Windows Server 2016无扬声器时pyttsx3调用报错问题求助
解决方案:无扬声器环境下Windows Server 2016实现语音合成
方案1:启用Windows系统内置虚拟音频设备
无需第三方工具,通过修改注册表即可让系统识别虚拟音频输出设备:
- 打开注册表编辑器(运行
regedit) - 导航路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render - 右键点击
Render项,选择权限,给当前运行代码的用户添加完全控制权限 - 在
Render下新建子项,命名为{00000000-0000-0000-0000-000000000001}(可使用任意合法GUID) - 在该子项内创建两个字符串值:
DeviceDesc:值设为Virtual Audio OutputFriendlyName:值设为Virtual Audio Output
- 重启服务器,系统会自动加载这个虚拟音频设备,之后原pyttsx3代码即可正常运行
方案2:绕过pyttsx3,直接调用SAPI5核心API
pyttsx3的报错源于默认绑定系统音频流,直接使用win32com.client调用SAPI5原生接口,可完全绕过音频设备依赖,直接生成文件:
import win32com.client # 初始化SAPI语音对象和文件流对象 speaker = win32com.client.Dispatch("SAPI.SpVoice") audio_stream = win32com.client.Dispatch("SAPI.SpFileStream") # 打开音频文件流(3代表创建写入模式) audio_stream.Open("temp.wav", 3) speaker.AudioOutputStream = audio_stream # 选择目标语音(对应原代码中的voices[3]) voices = speaker.GetVoices() speaker.Voice = voices.Item(3) # 合成并写入语音 speaker.Speak("Hello World!") # 关闭文件流 audio_stream.Close()
该方法无需任何系统音频设备配置,适合长期无桌面连接的服务器环境。
方案3:修改pyttsx3源码临时修复
若必须保留pyttsx3调用方式,可修改其驱动文件绕过音频流检查:
- 找到pyttsx3安装目录下的
driver/sapi5.py(例如Lib/site-packages/pyttsx3/drivers/sapi5.py) - 定位到
save_to_file方法,将原代码中temp_stream = self._tts.AudioOutputStream一行替换为:temp_stream = win32com.client.Dispatch("SAPI.SpFileStream") - 保存修改后重启Python环境,原代码即可正常生成音频文件
补充建议
优先选择方案2,该方法稳定性最高,无需依赖系统设备配置,完全适配无扬声器的服务器运行场景。
内容的提问来源于stack exchange,提问作者Tiaranso
相关产品推荐
相关产品推荐

