2016-11-06 12 views
0

Я пишу программу, которая читает строку, затем преобразует ее в речь и воспроизводит ее как mp3. Но программа не воспроизводит музыку. Я проверил и узнал, что mp3-файл создан и может воспроизводиться стандартными mp3-плеерами, но не скриптом. Я использую модуль gtts (для преобразования текста в речь) и модуль vlc (для воспроизведения mp3) Код выглядит следующим образом. Обратите внимание, что «m» - это текст, который я хочу преобразовать в звук.Как играть в mp3 в python без бесконечного цикла?

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

Я также обнаружил, что mp3 играет, когда я обеспечиваю бесконечный цикл после игры command.Like это

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

Есть ли способ, я могу избежать этого Infinite loop.I уже импортирован все необходимые модули для проекта.

+1

is 'p.play()' последнее утверждение в вашей программе? Если это так, проблема может заключаться в том, что программа завершается раньше, чем у нее есть возможность воспроизвести mp3 –

+0

да, я тоже так думаю ... Как мы можем это исправить? –

+0

Я мало знаю о модуле vlc, который вы используете, но, похоже, имеет метод 'is_playing()'. Таким образом, вы можете заменить 'while 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 для нахождения длины носителя, поэтому период сна может быть установлен с кодом.