Opus 示例
源码路径:example/multimedia/audio/opus
支持的平台
eh-lb525
概述
本示例演示如何使用 Opus 音频编解码库进行录音、编码、解码和播放,包含:
通过mic录音,从麦克风录制 16kHz 采样率的 PCM 音频数据
编码:使用 Opus 编码器将 PCM 数据压缩(10ms 帧长,约 16kbps 比特率)
解码:使用 Opus 解码器解压缩音频数据
播放:将解码后的音频数据通过扬声器播放
例程的使用
硬件需求
运行该例程前,需要准备:
一块本例程支持的开发板(支持的平台)。
喇叭。
例程说明
如果opus_test()函数中有opus_encoder_ctl(encoder, OPUS_SET_FORCE_MODE(MODE_SILK_ONLY));
则定义OPUS_STACK_SIZE为20k。
如果opus_test()函数没有opus_encoder_ctl(encoder, OPUS_SET_FORCE_MODE(MODE_SILK_ONLY));
则定义OPUS_STACK_SIZE为200k。
录音实现说明
录音时长由
RECORD_SECONDS控制(默认 10 s),按采样帧计数停止:1000 帧 × 320 字节/帧(10 ms)= 320,000 字节 = 10.000 s;录音回调把数据
memcpy到 PSRAM 缓冲(rec_pcm_buf),录音期间不做 flash 操作,避免音频 pipe 溢出丢帧,以及写 flash 时 SysTick 丢失导致的计时偏差;录音结束后再把整块缓冲一次性写入
/mic16k.pcm;flash 擦写较慢(320 KB 约需数秒),因此日志中record stop与record end之间有几秒间隔,属正常现象,不影响录音内容。真实录音耗时看record start与record stop: xx bytes (xx ms)的时间间隔。
编译和烧录
切换到例程project目录,运行scons命令执行编译:
scons –board=eh-lb525 -j32
切换到例程project/build_xx目录,运行uart_download.bat,按提示选择端口即可进行下载:
./uart_download.bat
Uart Download
please input the serial port num:5
关于编译、下载的详细步骤,请参考快速上手的相关介绍。
例程的预期结果
例程启动后:
自动运行:程序启动后自动录音 10 秒,随后先回放一次原始录音(playing start ~ playing end),再播放编码解码后的音频(opus runing ... ~ ---opus test exit---)。因此正常会听到两遍声音,第二遍才是 Opus 编解码链路的结果。
预期日志:
record start
record stop: 320000 bytes (10000 ms)
record end ← 与上一行相隔数秒,是写 flash 的耗时
playing start
playing end ← 第一次:原始 PCM 回放
opus runing ...
---opus test exit--- ← 第二次:编码解码后播放
手动命令:
opus : 录音10秒到 /mic16k.pcm,先回放原始录音,再编码解码后播放
opus /mic16k.pcm : 从指定文件读取 PCM 数据,编码解码后播放
opus xxxxx : 如果文件不存在,实时录音并回环播放10s(边录边播,喇叭和麦隔离下,不然有啸叫,可以把喇叭扣到耳朵上捂住)
异常诊断
参考文档
更新记录
版本 |
日期 |
发布说明 |
|---|---|---|
0.0.1 |
12/2025 |
初始版本 |
0.0.2 |
10/2026 |
录音改为 PSRAM 缓冲 + 按采样帧数计时,修复录音时长偏差与丢帧 |



