2016-11-06 4 views
0

私は、文字列を読み、それを音声に変換し、mp3として再生するプログラムを書いています。 しかし、プログラムは音楽を再生しません。私はチェックして、mp3ファイルが作成され、標準のmp3プレーヤーではなくスクリプトで再生できることを確認しました。 gttsモジュール(テキストを音声に変換する)とvlcモジュール(mp3を再生する)を使用しています コードはこのようです。「m」は音声に変換するテキストです。無限ループなしでPythonでmp3を再生するには?

tts = gTTS(text=m, lang='en') 
tts.save("greeting.mp3") 
p = vlc.MediaPlayer("greeting.mp3") 
p.play() 

私はさらに、私がプレイcommand.Like後に無限ループを提供したときにmp3を果たしていることを見出した。この

tts = gTTS(text=m, lang='en') 
tts.save("greeting.mp3") 
p = vlc.MediaPlayer("greeting.mp3") 
p.play() 
while True: 
    pass 

は、私は無限loop.Iがすでにインポートされていることを避けることができる方法はありますすべての必要なモジュールをプロジェクトに追加します。

+1

は 'p.play()'の最後の文ですか?もしそうなら、プログラムがmp3を再生するチャンスがある前に終了するかもしれないという問題かもしれません –

+0

はい私もそう思います...どうすれば修正できますか? –

+0

あなたが使用しているvlcモジュールについてよく分かりませんが、 'is_playing()'メソッドがあるようです。したがって、trueの間は 'while 'を' p.is_playing() 'に置き換えることができ、ビジー状態を避けるために' pass'を 'sleep'関数に置き換えることができます。 –

答えて

0

vlc libを使用してサブプロセスを開始すると、プログラムが終了してサブプロセスが終了します。だから、(適切にプロセスを処理する方法を学習せず)最速ソリューションは、スリープタイマーを設定することです:

import time 

tts = gTTS(text=m, lang='en') 
tts.save("greeting.mp3") 
p = vlc.MediaPlayer("greeting.mp3") 
p.play() 
time.sleep(120) # number of seconds in 

しかし、このsolutionは、スリープ期間は、コードから設定することができますので、メディアの長さを見つけるためにそこにあります。

関連する問題