# 内存音频播放示例 本示例演示如何使用 `app_player` 组件播放存储在内存(Flash)中的音频文件。 ## 功能说明 - 使用 `mem://` 协议播放内存中的音频数据 - 演示基本的播放控制:播放、暂停、恢复、停止 - 支持从 Flash 指定地址读取音频数据 ## mem:// 协议格式 ``` mem://addr=<内存地址>size=<数据大小> ``` - `addr`: 音频数据在内存中的起始地址(十进制) - `size`: 音频数据的大小(字节数) 示例: ```c "mem://addr=806355570size=1620" // 播放地址为 806355570,大小为 1620 字节的音频 ``` ## 准备工作 ### 1. 准备音频文件 在 `res/` 目录下准备一个音频文件,例如 `001_network_suc.mp3`。 支持的音频格式: - MP3 - WAV - AAC - M4A - PCM 建议参数(获得最佳性能): - 采样率:16 kHz - 位深度:16 bit - 声道:单声道 ### 2. 烧录音频文件到 Flash 使用烧录工具将音频文件烧录到 Flash 的指定地址。 默认配置: - Flash 地址:`0x30100000` - 预留空间:128KB **烧录步骤:** 1. 使用 CSK Burner 或其他烧录工具 2. 选择音频文件 `res/001_network_suc.mp3` 3. 设置烧录地址为 `0x30100000` 4. 执行烧录 ### 3. 修改代码配置 打开 `src/main.c`,根据实际情况修改以下配置: ```c #define AUDIO_FLASH_ADDR 0x30100000 /* 音频在Flash中的起始地址 */ #define AUDIO_DATA_SIZE 8192 /* 音频文件大小(字节) */ ``` - `AUDIO_FLASH_ADDR`:必须与烧录时的地址一致 - `AUDIO_DATA_SIZE`:设置为实际音频文件的大小 ## 编译和运行 ### 编译 ```{eval-rst} .. include:: /sample_build.rst ``` ### 烧录固件 编译完成后,烧录生成的固件: ```bash # 固件路径 build/arcs.bin ``` **完整烧录流程:** 1. 烧录音频文件到 `0x30100000` 2. 烧录固件 `build/arcs.bin` 到程序区 ### 运行 烧录完成后,设备会自动运行示例程序。 ## 预期输出 ``` === Memory Audio Playback Sample === Audio Flash Address: 0x30100000 Audio Data Size: 8192 bytes PA OFF Memory URL: mem://addr=806355570size=8192 === Scenario 1: Play memory audio === Playing audio from memory... PA ON Player prepared Player playing === Scenario 2: Pause playback === Audio paused Player paused === Scenario 3: Resume playback === Audio resumed Player playing === Scenario 4: Stop playback === Audio stopped Player stopped PA OFF === Sample completed === You can modify AUDIO_FLASH_ADDR and AUDIO_DATA_SIZE to match your actual audio file location and size. ``` ## 注意事项 1. **地址对齐**:确保 Flash 地址与烧录工具的地址一致 2. **文件大小**:`AUDIO_DATA_SIZE` 必须设置为实际文件大小,否则可能导致播放失败或播放不完整 3. **Flash 分区**:确保音频存储地址不与固件或其他数据冲突 4. **音频格式**:推荐使用 16kHz、16bit、单声道的音频文件以获得最佳性能 5. **PA 控制**:根据硬件设计配置正确的 PA 控制引脚