Python中gTTS(Google TTS)仅单次执行有效,程序崩溃求助
解决gTTS连续生成播放音频时程序崩溃的问题
我之前也碰到过一模一样的问题!在Windows 10下用PyCharm跑gTTS+playsound,第一个音频能正常保存播放,到第二个直接就弹出python.exe停止工作的提示,折腾了好久终于找到几个靠谱的解决办法:
1. 回退playsound版本(最省心的方案)
Windows环境下新版的playsound有资源释放的bug,你把它换回1.2.2版本试试,亲测有效:
pip uninstall playsound pip install playsound==1.2.2
这个旧版本在Windows上的资源管理稳定很多,很多开发者都靠这个解决了连续播放崩溃的问题。
2. 换用subprocess替代playsound播放
如果不想换版本,用系统自带的播放器来播放音频,能彻底避免资源占用的问题。直接用subprocess调用,代码这么写:
from gtts import gTTS import subprocess import os str1 = "hello" str2 = "world" # 处理第一个音频 tts = gTTS(text=str1, lang='en') tts.save("hello.mp3") # 调用Windows自带播放器播放 subprocess.run(["start", "hello.mp3"], shell=True) # 如果需要等待播放完再处理下一个,加个延时就行 # import time # time.sleep(2) os.remove("hello.mp3") # 能正常删除就说明资源释放了 # 处理第二个音频 tts = gTTS(text=str2, lang='en') tts.save("world.mp3") subprocess.run(["start", "world.mp3"], shell=True)
用系统播放器播放完会自动释放文件资源,完全不会影响后续的gTTS保存操作。
3. 用临时文件存储音频
还有个思路是用临时文件来存生成的音频,播放完自动删除,根本不会有文件残留和占用的问题:
from gtts import gTTS import playsound import tempfile def speak(text): # 创建临时MP3文件,关闭后自动删除 with tempfile.NamedTemporaryFile(delete=True, suffix='.mp3') as temp_file: tts = gTTS(text=text, lang='en') tts.save(temp_file.name) playsound.playsound(temp_file.name) # 直接调用函数就行 speak("hello") speak("world")
这种方式的好处是不用手动管理文件,临时文件在播放完成后会自动清理,连续调用也不会出问题。
另外还要检查下你的PyCharm虚拟环境,确保gTTS和playsound都安装在当前正在用的虚拟环境里,有时候环境冲突也会导致这种莫名其妙的崩溃。
内容的提问来源于stack exchange,提问作者Nabeel Farooqui
相关产品推荐
相关产品推荐

