fix(audio): lower raw opus bitrate to 16 kbps
This commit is contained in:
@@ -46,7 +46,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef CONFIG_MULTIMODAL_DOWNSTREAM_RATE_LIMIT
|
#ifndef CONFIG_MULTIMODAL_DOWNSTREAM_RATE_LIMIT
|
||||||
#define CONFIG_MULTIMODAL_DOWNSTREAM_RATE_LIMIT 3000
|
#define CONFIG_MULTIMODAL_DOWNSTREAM_RATE_LIMIT 2000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef CONFIG_MULTIMODAL_DOWNSTREAM_INCREMENTAL_RESPONSE
|
#ifndef CONFIG_MULTIMODAL_DOWNSTREAM_INCREMENTAL_RESPONSE
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef CONFIG_MULTIMODAL_OPUS_BITRATE_KBPS
|
#ifndef CONFIG_MULTIMODAL_OPUS_BITRATE_KBPS
|
||||||
#define CONFIG_MULTIMODAL_OPUS_BITRATE_KBPS 24
|
#define CONFIG_MULTIMODAL_OPUS_BITRATE_KBPS 16
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CONTROL_PLANE_MULTIMODAL_OPUS_CHANNELS 1
|
#define CONTROL_PLANE_MULTIMODAL_OPUS_CHANNELS 1
|
||||||
|
|||||||
@@ -246,14 +246,14 @@
|
|||||||
|
|
||||||
#ifndef CONFIG_MULTIMODAL_OPUS_FRAME_DURATION_MS
|
#ifndef CONFIG_MULTIMODAL_OPUS_FRAME_DURATION_MS
|
||||||
/*
|
/*
|
||||||
* 服务端协议要求 60ms raw-Opus 帧。24kbps、低复杂度和关闭 VBR/DTX/FEC 是当前
|
* 服务端协议要求 60ms raw-Opus 帧。16kbps、低复杂度和关闭 VBR/DTX/FEC 是当前
|
||||||
* 实时性与 MCU 负载基线;改变任一项需同步验证服务端解码、包容量和网络带宽。
|
* 实时性与 MCU 负载基线;改变任一项需同步验证服务端解码、包容量和网络带宽。
|
||||||
*/
|
*/
|
||||||
#define CONFIG_MULTIMODAL_OPUS_FRAME_DURATION_MS 60
|
#define CONFIG_MULTIMODAL_OPUS_FRAME_DURATION_MS 60
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef CONFIG_MULTIMODAL_OPUS_BITRATE_KBPS
|
#ifndef CONFIG_MULTIMODAL_OPUS_BITRATE_KBPS
|
||||||
#define CONFIG_MULTIMODAL_OPUS_BITRATE_KBPS 24
|
#define CONFIG_MULTIMODAL_OPUS_BITRATE_KBPS 16
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef CONFIG_MULTIMODAL_OPUS_COMPLEXITY
|
#ifndef CONFIG_MULTIMODAL_OPUS_COMPLEXITY
|
||||||
|
|||||||
@@ -544,7 +544,7 @@ if (ret != ESP_CODEC_DEV_OK) {
|
|||||||
位深:16 bit
|
位深:16 bit
|
||||||
通道:单声道
|
通道:单声道
|
||||||
Opus 帧长:60 ms
|
Opus 帧长:60 ms
|
||||||
Opus 码率:24 kbps
|
Opus 码率:16 kbps
|
||||||
```
|
```
|
||||||
|
|
||||||
每个 60ms 帧包含:
|
每个 60ms 帧包含:
|
||||||
@@ -679,11 +679,11 @@ Opus 编码核心为:
|
|||||||
esp_opus_enc_process(ctx->opus_enc, &in_frame, &out_frame);
|
esp_opus_enc_process(ctx->opus_enc, &in_frame, &out_frame);
|
||||||
```
|
```
|
||||||
|
|
||||||
输入为固定的 1920 字节 PCM,输出为压缩后的 Opus 包。按照 24kbps、60ms 计算,理论平均大小约为:
|
输入为固定的 1920 字节 PCM,输出为压缩后的 Opus 包。按照 16kbps、60ms 计算,理论平均大小约为:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
24000 bit/s × 0.060s = 1440 bit
|
16000 bit/s × 0.060s = 960 bit
|
||||||
1440 / 8 = 180 字节
|
960 / 8 = 120 字节
|
||||||
```
|
```
|
||||||
|
|
||||||
实际包大小仍可能受到编码参数和音频内容影响。
|
实际包大小仍可能受到编码参数和音频内容影响。
|
||||||
|
|||||||
@@ -142,7 +142,7 @@ Token、JWT、Wi-Fi 密码等敏感信息不应写入文档、日志或提交到
|
|||||||
| `CONFIG_MULTIMODAL_AUDIO_CODEC_BITS_PER_SAMPLE` | 16 bit | PCM 位深 |
|
| `CONFIG_MULTIMODAL_AUDIO_CODEC_BITS_PER_SAMPLE` | 16 bit | PCM 位深 |
|
||||||
| `CONFIG_MULTIMODAL_AUDIO_CHUNK_SIZE` | 1920 B | 60 ms 单声道 PCM 数据量 |
|
| `CONFIG_MULTIMODAL_AUDIO_CHUNK_SIZE` | 1920 B | 60 ms 单声道 PCM 数据量 |
|
||||||
| `CONFIG_MULTIMODAL_OPUS_FRAME_DURATION_MS` | 60 ms | 每个 Opus 帧的时长 |
|
| `CONFIG_MULTIMODAL_OPUS_FRAME_DURATION_MS` | 60 ms | 每个 Opus 帧的时长 |
|
||||||
| `CONFIG_MULTIMODAL_OPUS_BITRATE_KBPS` | 24 kbit/s | Opus 目标码率 |
|
| `CONFIG_MULTIMODAL_OPUS_BITRATE_KBPS` | 16 kbit/s | Opus 目标码率 |
|
||||||
| `CONFIG_MULTIMODAL_OPUS_COMPLEXITY` | 0 | Opus 编码复杂度,优先降低 MCU 负载 |
|
| `CONFIG_MULTIMODAL_OPUS_COMPLEXITY` | 0 | Opus 编码复杂度,优先降低 MCU 负载 |
|
||||||
| `CONFIG_MULTIMODAL_AUDIO_IN_GAIN_DB` | 30 dB | ES8311 输入增益 |
|
| `CONFIG_MULTIMODAL_AUDIO_IN_GAIN_DB` | 30 dB | ES8311 输入增益 |
|
||||||
| `CONFIG_MULTIMODAL_AUDIO_MIC_CHANNEL` | 0 | 从 codec 数据中选取的麦克风通道 |
|
| `CONFIG_MULTIMODAL_AUDIO_MIC_CHANNEL` | 0 | 从 codec 数据中选取的麦克风通道 |
|
||||||
@@ -160,12 +160,12 @@ Token、JWT、Wi-Fi 密码等敏感信息不应写入文档、日志或提交到
|
|||||||
每帧采样点 = 16000 × 60 / 1000 = 960 samples
|
每帧采样点 = 16000 × 60 / 1000 = 960 samples
|
||||||
每帧 PCM = 960 × 16 / 8 × 1 = 1920 bytes
|
每帧 PCM = 960 × 16 / 8 × 1 = 1920 bytes
|
||||||
PCM 裸码率 = 16000 × 16 × 1 = 256 kbit/s = 32 kB/s
|
PCM 裸码率 = 16000 × 16 × 1 = 256 kbit/s = 32 kB/s
|
||||||
Opus 目标包大小约 = 24 kbit/s × 60 ms / 8 = 180 bytes/frame
|
Opus 目标包大小约 = 16 kbit/s × 60 ms / 8 = 120 bytes/frame
|
||||||
每秒 Opus 帧数约 = 1000 / 60 = 16.67 frame/s
|
每秒 Opus 帧数约 = 1000 / 60 = 16.67 frame/s
|
||||||
24 格上行队列对应约 = 24 × 60 ms = 1.44 s 音频
|
24 格上行队列对应约 = 24 × 60 ms = 1.44 s 音频
|
||||||
```
|
```
|
||||||
|
|
||||||
180 B 是按目标码率计算的平均值,不代表每个实际 Opus 包都固定为 180 B。
|
120 B 是按目标码率计算的平均值,不代表每个实际 Opus 包都固定为 120 B。
|
||||||
|
|
||||||
### 4.4 下行音频参数
|
### 4.4 下行音频参数
|
||||||
|
|
||||||
@@ -174,8 +174,8 @@ Opus 目标包大小约 = 24 kbit/s × 60 ms / 8 = 180 bytes/frame
|
|||||||
| 下行协议格式 | `raw-opus` | 服务端通过 WebSocket 二进制帧发送 |
|
| 下行协议格式 | `raw-opus` | 服务端通过 WebSocket 二进制帧发送 |
|
||||||
| 下行采样率 | 16000 Hz | Start 中与 codec 采样率保持一致 |
|
| 下行采样率 | 16000 Hz | Start 中与 codec 采样率保持一致 |
|
||||||
| 下行帧时长 | 60 ms | Start 的 `frame_size` |
|
| 下行帧时长 | 60 ms | Start 的 `frame_size` |
|
||||||
| 下行码率 | 24 kbit/s | Start 的 `bit_rate` |
|
| 下行码率 | 16 kbit/s | Start 的 `bit_rate` |
|
||||||
| `CONFIG_MULTIMODAL_DOWNSTREAM_RATE_LIMIT` | 3000 B/s | 请求服务端限制下发速率,约等于 24 kbit/s |
|
| `CONFIG_MULTIMODAL_DOWNSTREAM_RATE_LIMIT` | 2000 B/s | 请求服务端限制下发速率,约等于 16 kbit/s |
|
||||||
| `CONFIG_MULTIMODAL_AUDIO_DOWNSTREAM_PLAYBACK_MAX_PACKET_BYTES` | 2048 B | 单个播放队列音频包最大尺寸 |
|
| `CONFIG_MULTIMODAL_AUDIO_DOWNSTREAM_PLAYBACK_MAX_PACKET_BYTES` | 2048 B | 单个播放队列音频包最大尺寸 |
|
||||||
| `CONFIG_MULTIMODAL_AUDIO_DOWNSTREAM_PLAYBACK_QUEUE_LEN` | 1024 | 下行播放队列最大包数 |
|
| `CONFIG_MULTIMODAL_AUDIO_DOWNSTREAM_PLAYBACK_QUEUE_LEN` | 1024 | 下行播放队列最大包数 |
|
||||||
| `CONFIG_MULTIMODAL_AUDIO_DOWNSTREAM_PLAYBACK_TASK_STACK` | 12288 B | 解码/播放任务栈 |
|
| `CONFIG_MULTIMODAL_AUDIO_DOWNSTREAM_PLAYBACK_TASK_STACK` | 12288 B | 解码/播放任务栈 |
|
||||||
@@ -384,11 +384,11 @@ esp_websocket_client_config_t cfg = {
|
|||||||
"audio_format": "raw-opus",
|
"audio_format": "raw-opus",
|
||||||
"sample_rate": 16000,
|
"sample_rate": 16000,
|
||||||
"frame_size": 60,
|
"frame_size": 60,
|
||||||
"bit_rate": 24,
|
"bit_rate": 16,
|
||||||
"speech_rate": 110,
|
"speech_rate": 110,
|
||||||
"incremental_response": false,
|
"incremental_response": false,
|
||||||
"intermediate_text": "transcript,dialog",
|
"intermediate_text": "transcript,dialog",
|
||||||
"transmit_rate_limit": 3000,
|
"transmit_rate_limit": 2000,
|
||||||
"voice": "<optional-voice-id>"
|
"voice": "<optional-voice-id>"
|
||||||
},
|
},
|
||||||
"client_info": {
|
"client_info": {
|
||||||
|
|||||||
@@ -1602,7 +1602,7 @@ menu "TQ Cat Configuration"
|
|||||||
|
|
||||||
config MULTIMODAL_OPUS_BITRATE_KBPS
|
config MULTIMODAL_OPUS_BITRATE_KBPS
|
||||||
int "Opus bitrate (kbps)"
|
int "Opus bitrate (kbps)"
|
||||||
default 24
|
default 16
|
||||||
range 6 510
|
range 6 510
|
||||||
help
|
help
|
||||||
raw-opus bit_rate field in Start downstream/upstream codec target.
|
raw-opus bit_rate field in Start downstream/upstream codec target.
|
||||||
@@ -2052,7 +2052,7 @@ menu "TQ Cat Configuration"
|
|||||||
|
|
||||||
config MULTIMODAL_DOWNSTREAM_RATE_LIMIT
|
config MULTIMODAL_DOWNSTREAM_RATE_LIMIT
|
||||||
int "Downstream transmit rate limit (bytes/s)"
|
int "Downstream transmit rate limit (bytes/s)"
|
||||||
default 3000
|
default 2000
|
||||||
range 0 200000
|
range 0 200000
|
||||||
help
|
help
|
||||||
Optional downstream raw-opus transmit rate limit. The runtime
|
Optional downstream raw-opus transmit rate limit. The runtime
|
||||||
|
|||||||
+2
-2
@@ -213,7 +213,7 @@ CONFIG_MULTIMODAL_NO_RESPONSE_TIMEOUT_MS=60000
|
|||||||
CONFIG_MULTIMODAL_DIALOG_IDLE_TIMEOUT_MS=60000
|
CONFIG_MULTIMODAL_DIALOG_IDLE_TIMEOUT_MS=60000
|
||||||
CONFIG_MULTIMODAL_AUDIO_CHUNK_SIZE=1920
|
CONFIG_MULTIMODAL_AUDIO_CHUNK_SIZE=1920
|
||||||
CONFIG_MULTIMODAL_OPUS_FRAME_DURATION_MS=60
|
CONFIG_MULTIMODAL_OPUS_FRAME_DURATION_MS=60
|
||||||
CONFIG_MULTIMODAL_OPUS_BITRATE_KBPS=24
|
CONFIG_MULTIMODAL_OPUS_BITRATE_KBPS=16
|
||||||
CONFIG_MULTIMODAL_OPUS_COMPLEXITY=0
|
CONFIG_MULTIMODAL_OPUS_COMPLEXITY=0
|
||||||
# CONFIG_MULTIMODAL_OPUS_ENABLE_VBR is not set
|
# CONFIG_MULTIMODAL_OPUS_ENABLE_VBR is not set
|
||||||
# CONFIG_MULTIMODAL_OPUS_ENABLE_DTX is not set
|
# CONFIG_MULTIMODAL_OPUS_ENABLE_DTX is not set
|
||||||
@@ -249,7 +249,7 @@ CONFIG_MULTIMODAL_AUDIO_TASK_CORE=1
|
|||||||
CONFIG_MULTIMODAL_TTS_VOICE=""
|
CONFIG_MULTIMODAL_TTS_VOICE=""
|
||||||
CONFIG_MULTIMODAL_TTS_SPEECH_RATE=110
|
CONFIG_MULTIMODAL_TTS_SPEECH_RATE=110
|
||||||
CONFIG_MULTIMODAL_DOWNSTREAM_INTERMEDIATE_TEXT="transcript,dialog"
|
CONFIG_MULTIMODAL_DOWNSTREAM_INTERMEDIATE_TEXT="transcript,dialog"
|
||||||
CONFIG_MULTIMODAL_DOWNSTREAM_RATE_LIMIT=3000
|
CONFIG_MULTIMODAL_DOWNSTREAM_RATE_LIMIT=2000
|
||||||
# CONFIG_MULTIMODAL_DOWNSTREAM_INCREMENTAL_RESPONSE is not set
|
# CONFIG_MULTIMODAL_DOWNSTREAM_INCREMENTAL_RESPONSE is not set
|
||||||
CONFIG_MULTIMODAL_WEBSOCKET_TASK_STACK_BYTES=32768
|
CONFIG_MULTIMODAL_WEBSOCKET_TASK_STACK_BYTES=32768
|
||||||
CONFIG_MULTIMODAL_WEBSOCKET_TASK_PRIORITY=8
|
CONFIG_MULTIMODAL_WEBSOCKET_TASK_PRIORITY=8
|
||||||
|
|||||||
Reference in New Issue
Block a user