You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 Output
    • FriendlyName:值设为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:42:42