|
||
---|---|---|
.. | ||
gcc | ||
bgm.c | ||
bgm.h | ||
detect.c | ||
detect.h | ||
karaok.c | ||
karaok.h | ||
main.c | ||
prj_config.h | ||
readme.md |
readme.md
audio reverb 示例工程
audio reverb 示例工程展示了XRadio SDK中进行混响播放的代码实现方法。
适用平台
本工程适用以下芯片类型:
- XR806系列芯片
本工程适用以下评估板类型:
- 底板:XR806_EVB
- 模组: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: 可选项,配置使用网络功能
模块依赖
必选项
- libcedarx.a: 音频播放核心模块
- libreverb.a: 音频混响核心模块
可选项
- libmp3.a: 播放mp3歌曲需要的解码库
- libamr.a: 播放amr歌曲需要的解码库
- libaac.a: 播放aac/m4a歌曲需要的解码库
- libwav.a: 播放wav歌曲需要的解码库
- liblwip.a: 播放网络歌曲需要依赖的库
- libmbedtls.a: 播放https歌曲需要依赖的库
- wlan模块: 播放网络歌曲需要依赖的库
音频的数据流、解码格式可根据需求选择,选择说明可在以下地址获取: https://github.com/XradioTech/xradiotech-wiki/wiki/dev-about-cedarx-decoder-config
工程说明
本工程的实现为播放背景音乐,以及根据话筒的插入与否决定是否使能混响模块。
操作说明
- 创建一个“music”的文件夹,并在里面添加音频文件“1.mp3”。通过文件系统工具将该文件夹打包烧写到flash对应的地址。文件系统工具的使用方式,请参考《XR806_文件系统工具_使用指南》
- 硬件上,以一个耳机座替换mic。即当插入话筒时,外部声音的来源源于该话筒
- 以GPIOA8作为话筒插入/拔出检测管脚
- 编译工程,烧录镜像,启动即可
- 系统启动后,即会自动播放“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的配置。
代码流程
- main()入口: 平台初始化,启动背景音乐播放,启动话筒插入/拔出检测模块。
- 混响模块函数入口:karaok_task()
- 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数据是否正常
参考文档
文档资源
- 《CedarX_Developer_Guide-CN.doc》
WiKi资源