Voice Recorder 语音录音器*
概述*
Voice Recorder是一款基于国芯微Apus 8302b系列芯片的高性能语音录音应用,支持实时音频采集、OPUS-OGG编码压缩、SD卡存储以及USB设备功能。
功能特点*
核心录音功能*
- 音频格式: 16kHz 16bit
- 多种麦克风支持:
- 模拟单麦克风(AMIC)
- 数字单麦克风(DMIC)
- 数字双麦克风(2DMIC)
- 音频编码: 支持OPUS-OGG格式压缩,显著减少存储空间。也可以支持直接写入pcm数据
- 按键控制: 通过硬件按键一键开始/停止录音,终端输入命令,开始/结束录音,可配置
存储与传输*
- SD卡存储: 支持FAT文件系统,自动格式化
- 文件管理: 自动创建录音文件,支持PCM和OPUS格式
音频处理算法*
- 降噪算法: 可配置的音频降噪处理
扩展功能*
- 蓝牙连接: 可选的BLE功能支持
- 串口音频转储: 支持通过UART输出音频数据用于调试
- 低功耗管理: 集成电源管理功能
- LED状态指示: 录音状态可视化反馈
- USB设备功能: 用于调试
- USB Audio Class(UAC): 作为USB音频设备
- Mass Storage: 作为U盘访问SD卡文件
技术规格*
功能 | 规格 |
---|---|
音频数据 | 16kHz 16bit |
支持通道 | 1-2通道(可配置) |
编码格式 | OPUS-OGG / PCM |
存储介质 | SD卡(FAT文件系统) |
USB功能 | UAC + Mass Storage |
控制方式 | 硬件按键/串口终端命令 |
处理器 | 国芯微Apus 8302b |
硬件要求*
必需组件*
- 国芯微Apus 8302b开发板
- 麦克风(模拟或数字)
- SD卡,或者sdnand flash
- 录音控制按键(连接到P0_7)
可选组件*
- USB连接线(用于USB设备功能)
- LED指示灯
- 蓝牙天线(如启用BLE功能)
软件架构*
主要模块*
Voice Recorder App
├── 音频输入模块 (Audio Input)
│ ├── 麦克风配置
│ ├── ADC/DMIC驱动
│ └── 音频缓冲管理
├── 音频处理模块 (VPA)
│ ├── 实时音频处理
│ └── 降噪算法
├── 编码模块 (OPUS-OGG)
│ ├── OPUS编码器
│ ├── OGG封装
│ └── 文件写入
├── 存储模块 (Storage)
│ ├── SD卡驱动
│ ├── FAT文件系统
│ └── 文件管理
├── USB设备模块 (USB Device)
│ ├── UAC功能
│ └── Mass Storage
└── 控制模块 (Control)
├── 按键处理
├── LED控制
└── 状态管理
线程架构*
- 主线程: 应用逻辑控制和文件操作
- 语音处理线程: 实时音频算法处理
- 音频输入中断: 音频数据采集
- USB任务: USB设备功能处理
配置说明*
应用配置 (app_config.h)*
功能模块开关*
#define CONFIG_APP_USING_UART_AUDIO_DUMP (0) // 串口音频转储
#define CONFIG_APP_USING_8002_OTA (0) // 8002 OTA升级
#define CONFIG_APP_USING_BLE (0) // 蓝牙功能
#define CONFIG_APP_USING_FUNC_UAC (1) // USB音频设备
#define CONFIG_APP_USING_FUNC_MASS_STORAGE (0) // USB大容量存储
#define CONFIG_APP_USING_RECORD_OPUS_OGG (1) // OPUS-OGG编码
#define CONFIG_APP_USING_VPA_BEE (1) // 降噪算法
音频输入配置*
#define CONFIG_APP_AUDIO_IN_TYPE (0) // 0:模拟单mic, 1:数字单mic, 2:数字双mic
#define CONFIG_ADC_GAIN (30) // ADC增益 0-32dB,步进2dB
#define CONFIG_BOARD_AMIC_TYPE (0) // 0:MEMS硅麦, 1:ECM驻极体麦
音频处理参数*
#define CONFIG_AUDIO_IO_SAMPLE_RATE (16000) // 采样率
#define CONFIG_ADUIO_IO_FRAME_LENGTH_MS (16) // 帧长度
#define CONFIG_ADUIO_IO_PCM_FRAME_NUM_PER_CONTEXT (5) // 上下文帧数
#define CONFIG_VOICE_PROCESS_STACK_SIZE (2048) // 处理线程栈大小
硬件配置*
#define RECORD_KEY_GPIO (P0_7) // 录音按键GPIO
使用说明*
基本操作*
1. 开始录音*
- 按下录音按键(P0_7)
- LED指示灯闪烁3次表示开始录音
- 系统自动创建录音文件
2. 停止录音*
- 再次按下录音按键
- LED指示灯闪烁3次表示停止录音
- 录音文件自动保存到SD卡
3. 文件访问*
- 通过USB连接电脑
- 设备识别为USB音频设备或U盘(根据配置)
- 直接访问SD卡中的录音文件
录音文件格式*
OPUS-OGG格式 (推荐)*
- 文件名:
record.opus
- 编码: OPUS音频编码 + OGG容器
- 比特率: 单声道16kbps,双声道32kbps
- 压缩比: 16:1
PCM格式 (原始音频)*
- 文件名:
record.pcm
- 格式: 16位PCM,16kHz采样率
- 文件大小: 32KB/秒(单声道)
编译与部署*
编译命令*
# Linux环境
make app=voice_recorder board=gx8302b_dev
# 或修改Makefile中的默认配置
app ?= voice_recorder
board ?= gx8302b_dev
make
固件下载*
# 使用bootx工具下载
sudo ./tools/bootx/bootx -m auto -t s -d /dev/ttyUSB0 -r 1000000 -c "download 0 output/apus.bin"
调试与测试*
串口调试打印*
- 波特率: 115200
- 数据位: 8
- 停止位: 1
- 校验位: 无
调试信息*
Hello Apus: v1.2.5-1750400705, App Bank: 0x2000
Chip Label: GX8302B-66c6362bc31ca5b1
Build Target: voice_recorder-rtthread-gx8302b_dev
[VOICE RECORDER]Src:1, Cpu Fre : 144000000 Hz
[VOICE RECORDER]Src:1, Flash Fre: 144000000 Hz
[VOICE RECORDER]Src:1, Psram Fre: 144000000 Hz
[VOICE RECORDER][System Heap] total:104304, use:0, max_used:0
ADC:32000000, PDM:1023998, Ain:32000000, I2S:32000000, Aout:32000000
[VPA_Bypass] [vpa_init]
fatfs: sd block num=30883840, block size=512
msh >[VOICE RECORDER]mount fatfs ok! # 文件系统挂载成功
opus tmp_malloc size: 28160
SD卡容量: 15812526080 字节
SD卡块大小: 512 字节
SD卡块数量: 30883840 30883840
usb init done
saddr0: 0x21005060 , size = 0x5000
saddr1: 0x2100a060 , size = 0x5000
[VOICE RECORDER]-----------------------[376]-----------------------------
[VOICE RECORDER][tmp Heap] total:104304, use:58576, max_used:58576
[VOICE RECORDER][System Heap] total:104304, use:58576, max_used:58576
[VOICE RECORDER][PSRAM Heap] total:2097072, use:151880, max_used:151880
[VOICE RECORDER]Voice Recorder App started!
[VOICE RECORDER]Jun 20 2025 14:24:56
[VOICE RECORDER]2DMIC APP Channels Num:2
[VOICE RECORDER]ctx_id:0, vad:0
[VOICE RECORDER]ctx_id:30, vad:0
[VOICE RECORDER]ctx_id:60, vad:0
[VOICE RECORDER]ctx_id:90, vad:0
[VOICE RECORDER]key start record! # 按键按下开始录音
res: 80 1280
res: 80 1280
res: 80 1280
res: 80 1280
47 ms # 编码耗时
res: 80 1280
res: 80 1280
res: 80 1280
res: 80 1280
48 ms
res: 80 1280
res: 80 1280
res: 80 1280
res: 80 1280
48 ms
res: 80 1280
res: 80 1280
res: 80 1280
res: 80 1280
47 ms
res: 80 1280
res: 80 1280
res: 80 1280
res: 80 1280
48 ms
res: 80 1280
res: 80 1280
res: 80 1280
res: 80 1280
48 ms
res: 80 1280
res: 80 1280
res: 80 1280
res: 80 1280
48 ms
[VOICE RECORDER]key stop record! # 按键按下停止录音
res: 80 1280
[VOICE RECORDER]close file~
23 ms
[VOICE RECORDER]ctx_id:120, vad:0
[VOICE RECORDER]ctx_id:150, vad:0