结论:MiniMax 不支持 bitrate=24000,但支持 sample_rate=24000。
你这里的"24K"要分清两个概念:
| 参数 | 含义 | MiniMax 是否支持 24K |
|---|---|---|
bitrate=24000 |
24 kbps 码率 | 不支持 |
sample_rate=24000 |
24 kHz 采样率 | 支持 |
MiniMax 官方参数里,sample_rate 支持 [8000, 16000, 22050, 24000, 32000, 44100],但 bitrate 只支持 [32000, 64000, 128000, 256000],并且 bitrate 只对 mp3 生效。WebSocket 示例里也是 sample_rate: 32000、bitrate: 128000、format: mp3。(MiniMax API Docs)
xiaozhi-esp32-server 里说的 24K,本质上是 24 kHz 采样率的 Opus 音频,不是 MiniMax 输出 24 kbps。项目默认协议配置是:
xiaozhi:
audio_params:
format: opus
sample_rate: 24000
channels: 1
frame_duration: 60
也就是设备端收的是 Opus / 24kHz / 单声道 / 60ms帧 。(GitHub)
具体到 MiniMax TTS 实现,项目里的 minimax_httpstream.py 默认设置是:
"sample_rate": 24000,
"bitrate": 128000,
"format": "pcm",
"channel": 1
注意这里是 format: pcm,不是 mp3,所以 bitrate 实际不是关键参数;关键是 sample_rate=24000。项目还会在打开音频通道时把 MiniMax 的 sample_rate 更新为连接里的 conn.sample_rate。(GitHub)
它的实际链路是:
文本
↓
MiniMax TTS
↓
输出 24kHz PCM
↓
xiaozhi-esp32-server 收到 PCM hex
↓
服务器端重新编码为 Opus
↓
发送给 ESP32
代码里可以看到,它从 MiniMax 返回数据里取 audio_hex,转成 PCM bytes,然后调用 opus_encoder.encode_pcm_to_opus_stream() 编成 Opus 发给设备。父类也会按 conn.sample_rate 创建 Opus 编码器。(GitHub)
所以你要这样理解:
MiniMax 不支持 24kbps MP3
但 MiniMax 支持 24kHz PCM
xiaozhi 项目再把 24kHz PCM 转成 24kHz Opus
建议 MiniMax 配置保持这样:
"audio_setting": {
"sample_rate": 24000,
"bitrate": 128000,
"format": "pcm",
"channel": 1
}
不要写:
"bitrate": 24000
如果你最终想控制的是网络传输码率 24kbps 左右 ,应该改的是 Opus 编码器码率参数 ,不是 MiniMax 的 bitrate。MiniMax 这边只负责输出 24kHz PCM,后面压缩率由服务器 Opus 编码决定。