Discord TTS机器人显示正在播放音频但无声音输出问题求助
Discord TTS机器人无声音输出修复方案
1. 修复代码中的拼写错误与过时API调用
你代码中存在两处明显的语法错误,会导致语音通道切换逻辑异常:
# 原错误代码 await bot.voice_cilent_in(ctx.message.server).disconnect()
- 拼写错误:
voice_cilent_in应为voice_client_in - 过时属性:discord.py v1.0+ 版本已经废弃
server属性,统一改用guild
修改后代码为:
await bot.voice_client_in(ctx.guild).disconnect()
2. 补充FFmpeg播放参数
默认的FFmpegPCMAudio参数不匹配Discord要求的音频传输规则,会出现显示播放但无声音的问题,修改播放代码为:
vc.play(discord.FFmpegPCMAudio( executable="ffmpeg.exe", source=f"./storage/{ctx.guild.id}/tts-result.mp3", before_options="-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5" ), after=lambda e: print(e))
- 显式指定
executable为同目录下的ffmpeg.exe,避免和系统环境变量中的FFmpeg版本冲突 - 添加重连参数避免音频加载异常
3. 开启语音相关Intents
Discord现在要求显式声明Intents才能正常使用语音功能,修改bot初始化代码:
intents = discord.Intents.default() intents.voice_states = True bot = commands.Bot(command_prefix="&", intents=intents)
同时需要前往Discord开发者后台的机器人设置页,在「Privileged Gateway Intents」板块开启Voice State Intent开关。
4. 检查权限配置
- 确认机器人在当前语音频道被授予了
说话、语音活动权限 - 确认你的Discord客户端没有静音机器人或者当前语音频道
5. 验证文件与逻辑合理性
- 手动打开生成的
tts-result.mp3确认文件本身可正常播放,排除gTTS生成音频损坏的问题 - 现有逻辑会每次覆盖同一个音频文件,多请求并发时会出现读写冲突,建议改为生成随机文件名的临时音频,播放完成后自动删除避免冲突
内容的提问来源于stack exchange,提问作者팬케이크
相关产品推荐
相关产品推荐

