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

如何在RDP远程桌面断开后正常使用Python调用Microsoft SAPI进行语音合成?

RDP断开后SAPI文本转语音报错解决方案

该问题由微软RDP默认机制导致:RDP连接时会为远程会话挂载虚拟音频设备、接管系统默认音频输出,断开连接时会自动卸载该虚拟设备,同时默认会禁用远程主机本地物理音频设备在远程会话中的权限,导致SAPI无法找到可用音频输出接口报错。可通过以下方案解决:

方案1:禁用RDP音频重定向(最推荐,无需额外安装软件)

在远程主机上操作:

  • 按Win+R打开运行窗口,输入gpedit.msc打开本地组策略编辑器
  • 依次定位到:计算机配置 > 管理模板 > Windows组件 > 远程桌面服务 > 远程桌面会话主机 > 设备和资源重定向
  • 找到允许音频和视频播放重定向选项,双击设置为已禁用
  • 可选:同时禁用允许音频录制重定向避免录音设备冲突
  • 重启远程主机后生效,后续RDP连接不会再替换系统默认音频设备,断开后SAPI可正常调用本地物理声卡

方案2:安装虚拟音频声卡

如果远程主机没有物理声卡,或者方案1不生效,可安装虚拟音频驱动:

  • 下载安装Virtual Audio Cable等虚拟声卡工具,安装完成后将系统默认音频输出设备设置为虚拟声卡
  • 虚拟声卡不会随RDP连接/断开被卸载,SAPI可稳定识别到可用输出设备

方案3:直接输出语音到文件(无需播放场景适用)

如果不需要实时播放语音,仅需生成语音文件,可绕过音频输出设备校验,直接将SAPI输出写入文件:

import win32com.client
speaker = win32com.client.Dispatch("SAPI.SpVoice")
# 创建文件输出流
stream = win32com.client.Dispatch("SAPI.SpFileStream")
# 第二个参数3代表创建并写入模式,第三个参数False代表不创建为ASCII流
stream.Open("output.wav", 3, False)
speaker.AudioOutputStream = stream
speaker.Speak("Hello, it works!")
stream.Close()

方案4:断开RDP时将会话切换到控制台

如果需要临时解决,可在断开RDP前执行命令将会话转到本地控制台,保留音频设备权限:

  • 打开管理员权限的命令提示符,执行:
    tscon %sessionname% /dest:console
  • 执行后会自动断开当前RDP连接,会话保留在控制台状态,音频设备不会被卸载

内容的提问来源于stack exchange,提问作者MacMarde

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:06:03