134 lines
4.9 KiB
Markdown
134 lines
4.9 KiB
Markdown
|
# audio reverb 示例工程
|
|||
|
|
|||
|
> audio reverb 示例工程展示了XRadio SDK中进行混响播放的代码实现方法。
|
|||
|
>
|
|||
|
|
|||
|
---
|
|||
|
|
|||
|
## 适用平台
|
|||
|
|
|||
|
> 本工程适用以下芯片类型:
|
|||
|
>
|
|||
|
> 1. XR806系列芯片
|
|||
|
|
|||
|
> 本工程适用以下评估板类型:
|
|||
|
> 1. 底板:XR806_EVB
|
|||
|
> 2. 模组:XR806_MD01
|
|||
|
|
|||
|
> 本工程在基于"XR806_MD01"的“XR806_EVB”板上测试通过。
|
|||
|
> 若需要在其他适用芯片和评估板上运行本工程,请根据快速指南《XRadio_Quick_Start_Guide-CN》的提示进行相关配置修改。
|
|||
|
|
|||
|
> XRadio Wireless MCU芯片和评估板的更多信息可在以下地址获取:
|
|||
|
> https://docs.xradiotech.com
|
|||
|
|
|||
|
## 工程配置
|
|||
|
|
|||
|
> defconfig:
|
|||
|
> * CONFIG_XPLAYER:必选项,配置使用音频播放功能
|
|||
|
>
|
|||
|
> Makefile:
|
|||
|
> * N/A
|
|||
|
>
|
|||
|
> board_config.h
|
|||
|
> * N/A
|
|||
|
>
|
|||
|
> board_config.c
|
|||
|
> * N/A
|
|||
|
>
|
|||
|
> prj_config.h
|
|||
|
> * PRJCONF_SOUNDCARD0_EN: 可选项,配置使用外部声卡
|
|||
|
> * PRJCONF_SOUNDCARD2_EN: 必选项,配置使用内部声卡
|
|||
|
> * PRJCONF_NET_EN: 可选项,配置使用网络功能
|
|||
|
|
|||
|
## 模块依赖
|
|||
|
|
|||
|
> 必选项
|
|||
|
> 1. libcedarx.a: 音频播放核心模块
|
|||
|
> 2. libreverb.a: 音频混响核心模块
|
|||
|
|
|||
|
> 可选项
|
|||
|
> 1. libmp3.a: 播放mp3歌曲需要的解码库
|
|||
|
> 2. libamr.a: 播放amr歌曲需要的解码库
|
|||
|
> 3. libaac.a: 播放aac/m4a歌曲需要的解码库
|
|||
|
> 4. libwav.a: 播放wav歌曲需要的解码库
|
|||
|
> 5. liblwip.a: 播放网络歌曲需要依赖的库
|
|||
|
> 6. libmbedtls.a: 播放https歌曲需要依赖的库
|
|||
|
> 7. wlan模块: 播放网络歌曲需要依赖的库
|
|||
|
|
|||
|
> 音频的数据流、解码格式可根据需求选择,选择说明可在以下地址获取:
|
|||
|
> https://github.com/XradioTech/xradiotech-wiki/wiki/dev-about-cedarx-decoder-config
|
|||
|
|
|||
|
---
|
|||
|
|
|||
|
## 工程说明
|
|||
|
|
|||
|
> 本工程的实现为播放背景音乐,以及根据话筒的插入与否决定是否使能混响模块。
|
|||
|
|
|||
|
### 操作说明
|
|||
|
|
|||
|
> 1. 创建一个“music”的文件夹,并在里面添加音频文件“1.mp3”。通过文件系统工具将该文件夹打包烧写到flash对应的地址。文件系统工具的使用方式,请参考《XR806_文件系统工具_使用指南》
|
|||
|
> 2. 硬件上,以一个耳机座替换mic。即当插入话筒时,外部声音的来源源于该话筒
|
|||
|
> 3. 以GPIOA8作为话筒插入/拔出检测管脚
|
|||
|
> 4. 编译工程,烧录镜像,启动即可
|
|||
|
> 5. 系统启动后,即会自动播放“1.mp3”。当插入话筒时,系统会启动混响模式,此时喇叭播放声音为话筒声加音乐声。当拔出话筒时,系统退出混响模式,正常播放“1.mp3”
|
|||
|
|
|||
|
> XRadio SDK的编译、烧写等操作方式的说明可在以下地址获取:
|
|||
|
> https://github.com/XradioTech/xradiotech-wiki
|
|||
|
|
|||
|
### 控制命令
|
|||
|
|
|||
|
> N/A
|
|||
|
|
|||
|
### 代码结构
|
|||
|
```
|
|||
|
#本工程
|
|||
|
.
|
|||
|
├── gcc
|
|||
|
│ ├── defconfig # 本工程的配置选项,主要用于覆盖默认全局配置
|
|||
|
│ └── Makefile # 本工程的编译规则,如ld文件、image.cfg、board_config.h等文件指定,可覆盖默认配置
|
|||
|
├── main.c # 本工程的入口,完成平台初始化,启动背景音乐播放,启动话筒检测模块
|
|||
|
├── bgm.c # 本工程背景音乐播放的调用接口封装
|
|||
|
├── bgm.h
|
|||
|
├── prj_config.h # 本工程的配置选项,主要用于功能的选择。
|
|||
|
└── readme.md # 本工程的说明文档
|
|||
|
|
|||
|
#本程用到XRadio SDK的其他配置文件
|
|||
|
.
|
|||
|
└── project
|
|||
|
└── common
|
|||
|
└── board
|
|||
|
└── xr806_dig_ver #在project/Kconfig默认指定使用xr806_dig_ver的板级配置
|
|||
|
├── board_config.h #本工程的板级配置,
|
|||
|
└── board_config.c #本工程的板级pin mux的配置。
|
|||
|
```
|
|||
|
### 代码流程
|
|||
|
|
|||
|
> 1. main()入口: 平台初始化,启动背景音乐播放,启动话筒插入/拔出检测模块。
|
|||
|
> 2. 混响模块函数入口:karaok_task()
|
|||
|
> 3. karaok_task()函数流程:
|
|||
|
> 1)暂停背景音乐的播放,完成混响模块的必要初始化,然后恢复背景音乐的播放
|
|||
|
> 2)循环执行下述步骤
|
|||
|
> A)调snd_pcm_read(),获取话筒pcm数据
|
|||
|
> B)调reverb_comb(),处理话筒pcm数据,输出有混响效果的pcm数据
|
|||
|
> C)调snd_stream_read(),获取背景音乐pcm数据
|
|||
|
> D)调mixer_process(),混合背景音乐pcm数据和有混响效果的pcm数据
|
|||
|
> E)调snd_pcm_write(),输出最终处理得到的pcm数据到喇叭
|
|||
|
>
|
|||
|
|
|||
|
|
|||
|
## 常见问题
|
|||
|
|
|||
|
> 问:插入话筒,但喇叭没有话筒的声音
|
|||
|
|
|||
|
答:1.首先确认程序是否检测到话筒插入。如没能检测到话筒已插入,请检查硬件电路的GPIO管脚与配置的GPIO管脚是否相符;如能检测到话筒已插入,请检查获取到的话筒pcm数据是否正常
|
|||
|
|
|||
|
## 参考文档
|
|||
|
|
|||
|
> 文档资源
|
|||
|
|
|||
|
1. 《CedarX_Developer_Guide-CN.doc》
|
|||
|
|
|||
|
> WiKi资源
|
|||
|
|
|||
|
1. https://github.com/XradioTech/xradiotech-wiki/wiki/dev-about-cedarx
|