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

如何用Nextcord在Discord频道播放AWS Polly音频缓冲?

解决Nextcord播放AWS Polly内存音频的问题

核心问题拆解

  • Polly返回的16位单声道PCM和Nextcord要求的双声道不匹配,导致音调异常
  • MP3内存流播放时,未正确重置缓冲指针或指定FFmpeg输入格式,导致无声

方案1:内存内完成PCM单声道转双声道

直接通过复制单声道采样数据生成双声道PCM,配合FFmpeg参数指定格式:

import io
import boto3
import nextcord

# 假设已初始化polly_client和有效语音连接vc
response = polly_client.synthesize_speech(
    VoiceId="Brian",
    OutputFormat='pcm',
    SampleRate="16000",
    Text=message,
    Engine='standard'
)

# 读取单声道PCM原始数据
mono_pcm = response['AudioStream'].read()
# 单转双:每个16位采样(2字节)重复一次
stereo_pcm = b''.join([sample * 2 for sample in io.BytesIO(mono_pcm).read(2)])
stereo_buff = io.BytesIO(stereo_pcm)

# 传入FFmpeg时明确指定输入参数
vc.play(nextcord.FFmpegPCMAudio(
    source=stereo_buff,
    pipe=True,
    options='-ar 16000 -ac 2 -f s16le'
))

方案2:修复MP3内存流播放

关键是重置缓冲指针,并告诉FFmpeg输入格式为MP3:

import io
import boto3
import nextcord

response = polly_client.synthesize_speech(
    VoiceId="Brian",
    OutputFormat='mp3',
    SampleRate="16000",
    Text=message,
    Engine='standard'
)

mp3_buff = io.BytesIO(response['AudioStream'].read())
# 必须把缓冲指针移到开头,否则FFmpeg读不到数据
mp3_buff.seek(0)

vc.play(nextcord.FFmpegPCMAudio(
    source=mp3_buff,
    pipe=True,
    options='-f mp3'
))

注意事项

  • 确认FFmpeg已安装并加入系统环境变量,Nextcord能正常调用
  • 语音连接对象vc必须处于已连接频道的状态
  • 小音频片段处理时,避免BytesIO对象被提前回收

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 16:46:19