【问题标题】:How to play mp3 in python without infinite loop?如何在没有无限循环的情况下在 python 中播放 mp3?
【发布时间】:2016-11-06 17:24:44
【问题描述】:

我正在编写一个程序,它读取一个字符串,然后将其转换为语音并以 mp3 形式播放。 但程序不播放音乐。我检查并发现 mp3 文件已创建并且可以使用标准 mp3 播放器播放,但不能使用脚本播放。 我正在使用 gtts 模块(用于将文本转换为语音)和 vlc 模块(用于播放 mp3) 代码是这样的。请注意,'m'是我要转换为声音的文本。

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

我进一步发现,当我在播放命令后提供无限循环时,会播放 mp3。像这样

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

有什么办法可以避免无限循环。我已经将所有需要的模块导入到项目中。

【问题讨论】:

  • p.play() 程序中的最后一条语句吗?如果是这样,问题可能是程序在有机会播放 mp3 之前就终止了
  • 是的,我也这么认为...我们该如何解决?
  • 我对您使用的 vlc 模块了解不多,但它似乎有一个 is_playing() 方法。因此,您可以将while True: 替换为while p.is_playing(),并可能将pass 替换为sleep 函数以避免忙等待
  • 我猜还有一个 get_length() 方法,它以 ms 为单位返回长度。您也可以像time.sleep( p.get_length()/1000.) 一样使用它

标签: python mp3 infinite-loop vlc playback


【解决方案1】:

您正在做的是使用 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 用于查找媒体的长度,因此可以从代码中设置睡眠时间。

【讨论】:

    猜你喜欢
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 2013-05-20
    相关资源
    最近更新 更多