首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Toshiba膝上型电脑和Windows 7上使用python进行文本到语音?

如何在Toshiba膝上型电脑和Windows 7上使用python进行文本到语音?
EN

Stack Overflow用户
提问于 2013-12-20 05:33:57
回答 3查看 1.1K关注 0票数 5

我正在设法在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中打开它)。下面是:

代码语言:javascript
复制
winsound.PlaySound("file.wav", winsound.SND_FILENAME)    #the wav file is in the same directory as the program

我也尝试使用游戏混音器一个音乐模块。例如:

代码语言:javascript
复制
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文件的声音:

代码语言:javascript
复制
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文件,所以可能有一个解决方案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-23 19:07:48

碰巧,我最近有了一个想法,让我再次尝试了这一点。这个解决方案非常麻烦,不应该是必要的,但不幸的是,它是必要的。基本上,我所做的就是在windows媒体播放器中打开文件,但是使用子进程来抑制窗口。我已经有了这个问题的基本答案,所以就是这里,因为我不太愿意重写完全相同的东西。

票数 1
EN

Stack Overflow用户

发布于 2013-12-22 11:52:06

此错误表示它无法找到MPlayer的可执行文件,因为您只使用mplayer包装器。

代码语言:javascript
复制
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但是要小心,它们大多数都过时了。

游戏的问题是,你需要检查音乐是否在播放,只要音乐在播放,你的程序就会打开。

可以这样做:

代码语言:javascript
复制
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“。

票数 1
EN

Stack Overflow用户

发布于 2013-12-22 19:42:45

您可以尝试用于python的mp3play模块。如果它适用于您,并且适用于py2exe,那么它是一个非常容易使用的模块。我喜欢的docs页面说它需要win xp才能运行,但是我在win7上成功地使用了它。

例如:

代码语言:javascript
复制
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()

检查一下这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20696948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档