sdk-hwV1.3/lichee/xr806/appos/project/example/audio_reverb/readme.md

134 lines
4.9 KiB
Markdown
Raw Normal View History

2024-05-07 10:09:20 +00:00
# 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