我正在设法在python中创建文本到语音(我在windows 7上)。我正在使用pyinstaller来编译这个程序。我尝试了大量的方法,包括使用谷歌的非官方文本通过urllib2模块访问的语音程序。这将创建一个mp3文件。有关该代码的详细信息,大部分代码来自http://glowingpython.blogspot.com/2012/11/text-to-speech-with-correct-intonation.html。然后,我需要播放它生成的mp3文件。我使用过mplayer、ffmpeg、mp3play、audiere、pydub和mp3play,结果都是一样的:没有播放声音,但没有出现异常。我甚至在覆盆子皮上使用了相同的游戏代码,并成功地播放了一个mp3文件。我也尝试过把它转换成一个wav文件,它工作得很好,只有当我尝试用玩偶或which播放它时,同样的事情就会发生。没有声音,没有例外。我的当前代码使用winsound,播放一个wav文件,我可以在windows中成功地播放该文件(我甚至可以使用os.startfile()在python的windows中打开它)。下面是:
winsound.PlaySound("file.wav", winsound.SND_FILENAME) #the wav file is in the same directory as the program我也尝试使用游戏混音器一个音乐模块。例如:
init() #this is pygame.init(), I only imported init and the mixer module
pygame.mixer.init() #initializes pygame.mixer
pygame.mixer.music.load(filename) #loads it in music
pygame.mixer.music.play() #plays it in music
time.sleep(20)我甚至已经成功地使用winsound和win32api Beep()函数播放了python的声音。但是,这显然不能播放mp3或wav文件。我还尝试了一个与语音引擎完全不同的文本,它使用pyttsx来播放没有mp3文件的声音:
import pyttsx
engine = pyttsx.init()
def tts(mytext):
engine.say(mytext)
engine.runAndWait()这也无法创建声音,或引发异常。由于这种模式,我有一种感觉,这与系统有关,但似乎并不是显而易见的事情。
因为这几乎肯定与硬件有关(pygame.mixer在不同的硬件上以这种方式工作,而且我确信它通常在windows上工作),所以知道我使用的是东芝笔记本电脑可能是很重要的。另外,我使用python2.7。
理想的情况下,我想用玩偶游戏来做这件事,因为我最有经验使用它,如果可能的话,我想在游戏中访问一些声音编辑功能。
我还尝试使用64位python (我在64位windows 7上使用32位python )。但还是失败了。
我还尝试在Ubuntu虚拟盒环境中播放一个mp3文件,但是在相同的设备上。但还是没成功。这并不令人惊讶,因为virtualbox使用了来自主机操作系统的大量资源(如屏幕和wifi),因此它的播放听起来并不一定不同。不管怎么说都会有帮助的。有些声音听起来很好,只是在python中没有专门的mp3或wav文件,所以可能有一个解决方案。
发布于 2014-10-23 19:07:48
碰巧,我最近有了一个想法,让我再次尝试了这一点。这个解决方案非常麻烦,不应该是必要的,但不幸的是,它是必要的。基本上,我所做的就是在windows媒体播放器中打开文件,但是使用子进程来抑制窗口。我已经有了这个问题的基本答案,所以就是这里,因为我不太愿意重写完全相同的东西。
发布于 2013-12-22 11:52:06
此错误表示它无法找到MPlayer的可执行文件,因为您只使用mplayer包装器。
File ".\program.py", line 1681, in playsound
player = mplayer.Player()
File "C:\Users\Student\Documents\notes\mplayer.py", line 109, in __init__
self.spawn()
File "C:\Users\Student\Documents\notes\mplayer.py", line 319, in spawn
close_fds=(not subprocess.mswindows))
File "C:\Python27\lib\subprocess.py", line 711, in __init__
errread, errwrite)
File "C:\Python27\lib\subprocess.py", line 948, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified您可以从这里获得一个MPlayer二进制文件:http://www.mplayerhq.hu/design7/dload.html
大多数其他python程序使用ffmpeg并编写一些包装脚本来播放mp3文件。
也许你可以从音乐播放器中得到灵感
此外,在官方Python站点上有一个页面,您可以在那里找到一些库。https://wiki.python.org/moin/PythonInMusic但是要小心,它们大多数都过时了。
游戏的问题是,你需要检查音乐是否在播放,只要音乐在播放,你的程序就会打开。
可以这样做:
FRAMERATE = 30
clock = pygame.time.Clock()
pygame.mixer.music.load(soundfile)
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
clock.tick(FRAMERATE)编辑:对于你的赏赐,如果你不使用游戏和包含的sdl库,就没有一个真正简单的解决方案。最好在没有py2exe的情况下换掉py2exe /创建自己的"exe“。
发布于 2013-12-22 19:42:45
您可以尝试用于python的mp3play模块。如果它适用于您,并且适用于py2exe,那么它是一个非常容易使用的模块。我喜欢的docs页面说它需要win xp才能运行,但是我在win7上成功地使用了它。
例如:
import mp3play
filename = r'C:\Documents and Settings\Michael\Desktop\music.mp3'
mp3 = mp3play.load(filename)
mp3.play()
# Let it play for up to 30 seconds, then stop it.
import time
time.sleep(min(30, mp3.seconds()))
mp3.stop()检查一下这里
https://stackoverflow.com/questions/20696948
复制相似问题