FLASH工程应用流程 ===================================== AD16N 的FLASH工程拥有更大的存储空间,在OTP工程的Music模式、USB从机模式以及LINEIN模式的基础上,新增了玩具多路解码模式、录音模式、MIDI解码模式、MIDI琴模式等应用。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 音乐解码模式 ################################ 音乐解码模式在OTP小音箱Music模式的基础上,增加了内置flash设备播放。涉及的文件目录:apps\app\src\mbox_flash\music,涉及应用函数请参考《OTP小音箱应用流程》->《音乐解码模式》。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ USB从机模式 ################################ 同《OTP小音箱应用流程》中的USB从机模式。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ LINEIN模式 ################################ 同《OTP小音箱应用流程》中的LINEIN模式。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ MIDI解码 / MIDI琴模式 ################################ MIDI具体内容请参考《杰理AD14N_AD15N_MIDI应用说明文档.pdf》。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 玩具多路解码模式 ################################ 多路解码模式使用了SYD文件系统,能够播放打包成dir文件的F1A/B/C/X、UMP3,并叠加A文件解码,同时支持外挂FLASH解码。该模式还具备VM记忆,可记录解码文件序号与断点。多路解码使用play_control结构体,其成员如下: .. image:: f-4-1-play_control.png :alt: "图5.1 play_control结构体成员" :align: center .. centered:: 图5.1 play_control结构体成员 涉及的文件目录:apps\app\src\mbox_flash\simple_decode,涉及的应用函数如下: 函数u32 simple_dev_fs_mount(play_control \*ppctl) ******************************************************************************************** 此函数是多路解码挂载设备和SYD文件系统,其中参数: :: 1、ppctl:音乐播放器句柄指针; 2、返回值: 成功 返回0; 失败 错误值可查看errno-base.h; 函数u32 simple_dev_fs_close(play_control \*ppctl) ******************************************************************************************** 此函数实现多路解码释放文件、文件系统句柄,并关闭设备;释放的句柄分别是结构体play_control中的成员pfile,pfs以及device,其中参数: :: 1、ppctl:音乐播放器句柄指针; 2、返回值:0; 函数u32 simple_play_file_byindex(play_control \*ppctl) ******************************************************************************************** 此函数实现多路解码按文件序号播放指定文件,播放的文件序号使用结构体play_control中的成员findex,其中参数: :: 1、ppctl:音乐播放器句柄指针; 2、返回值:0; 5.4 函数u32 get_decoder_status(dec_obj \*obj) ******************************************************************************************** 此函数实现获取多路解码当前的状态,分别有播放停止(MUSIC_STOP)、播放暂停(MUSIC_PAUSE)以及播放中(MUSIC_PLAY)三种状态,其中参数: :: 1、obj:解码句柄; 2、返回值:返回当前解码器播放状态; 函数static bool simple_switch_device(play_control \*ppctl) ******************************************************************************************** 此函数实现多路解码切换下一个设备(内置flash<-->外挂flash),函数中需要停止解码器,关闭上次播放的文件与设备,重新初始化下一个需要播放的设备并开始解码,其中参数: :: 1、ppctl:音乐播放器句柄指针; 2、返回值: 成功 true; 失败 false; 函数static bool simple_next_dir(play_control \*ppctl) ******************************************************************************************** 此函数实现多路解码切换下一个dir文件夹,函数中需要停止解码器,关闭上次播放的文件与设备,重新初始化下一个需要播放的设备并开始解码,其中参数: :: 1、 ppctl:音乐播放器句柄指针; 2、返回值: 成功 true; 失败 false; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 录音模式 ################################ 录音模式支持内置flash、SD卡/U盘录音与播放,同时支持变速变调音效。 内置flash录音时挂载NORFS文件系统,支持录制UMP3、A格式音频;SD卡/U盘录音时挂载FAT文件系统,支持录制标准MP2格式音频;各编码格式支持的采样率以及码率范围请参考《第六章 编码接口》介绍。 编码使用Encode_Control结构体,其成员如下: .. image:: f-6-1-encode_control.png :alt: "图5.1 编码结构体Encode_Control说明" :align: center .. centered:: 图5.1 编码结构体Encode_Control说明 涉及的文件目录:apps\app\src\mbox_flash\record,涉及的应用函数如下面几个小节; 函数int encode_start(Encode_Control \*obj) ******************************************************************************************** 此函数实现配置AUDIO_ADC采样率,并识别当前在线设备进行编码,SD卡/U盘挂载fat文件系统录制标准mp2音频,内置flash挂载norfs文件系统录制ump3或a格式音频,其中参数: :: 1、obj:编码器句柄指针; 2、返回值: 成功 返回0; 失败 错误值可查看errno-base.h; 函数void encode_stop(Encode_Control \*obj) ******************************************************************************************** 此函数实现停止编码器工作,并保存录制完成的文件,其中参数: :: 1、obj:编码器句柄指针; 2、返回值:无; 函数int fatfs_enc_file_create(Encode_Control \*obj) ******************************************************************************************** 此函数实现打开SD卡/U盘设备,并创建固定命名格式的文件,创建的文件名遵循”AD16****.mp3”格式,可录制文件”AD160000.mp3”至”AD169999.mp3”,文件系统能识别最大后缀序号,并自增作为新建文件名,其中参数: :: 1、obj:编码器句柄指针; 2、返回值: 成功 返回0; 失败 错误值可查看errno-base.h; 函数dec_obj \*fatfs_enc_file_decode(Encode_Control \*obj, u16 dec_type) ******************************************************************************************** 此函数实现播放SD卡/U盘设备录制的标准mp2编码文件,其中参数: :: 1、obj:编码器句柄指针; 2、dec_type:解码格式、音效选择; 3、返回值: 成功 返回解码器句柄; 失败 返回NULL; 函数int norfs_enc_file_create(Encode_Control \*obj) ******************************************************************************************** 此函数实现内置flash挂载norfs文件系统录制ump3/a格式音频,norfs为循环管理的可读写文件系统,写满后会自动覆盖最开始的数据,该文件系统只能用文件序号打开文件,创建新文件时,会返回最新文件序号,其中参数: :: 1、obj:编码器句柄指针; 2、返回值: 成功 返回0; 失败 错误值可查看errno-base.h; 函数dec_obj \*norfs_enc_file_decode(Encode_Control \*obj, u16 dec_type) ******************************************************************************************** 此函数实现播放内置flash录制的ump3/a编码文件,其中参数: :: 1、 bj:编码器句柄指针; 2、dec_type:解码格式、音效选择; 3、返回值: 成功 返回解码器句柄; 失败 返回NULL; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ LoudSpeaker扩音模式 ################################ 扩音模式为mic采集音频数据,串联一个或多个音效算法并将处理后的数据输出至DAC出声的功能,常用于扩音喇叭等应用。 目前可串联的音效有: - 1)speed实时变调音效; - 2)echo混响音效; - 3)voice_pich变音音效; - 4)notcch_howling陷波啸叫抑制音效; - 5)pitchshift_howling移频啸叫抑制音效; - 6)EQ音效; 以上音效可在speaker._api.c文件中通过link函数形式串联到数据流中; 其中,(1)~(3)音效资源互斥,同时只可开启其中一个。 在audio DAC出数过程中,如遇到打印‘*’号,可能是算法运算时间较长,数据处理不过来,可尝试提高系统时钟解决。 各音效算法的介绍请查看《音效》章节说明。 函数void audio_adc_speaker_start(u32 sr) ******************************************************************************************** 此函数实现启动mic直通喇叭功能,其中参数: :: 1、sr:speaker工作采样率,可选采样率如下表所示; ====== ========================== 序号 AUDIO ADC可选采样率 ====== ========================== 1 8000 2 11025 3 12000 4 16000 5 22050 6 24000 7 32000 8 44100 9 48000 ====== ========================== .. centered:: 表1 AUDIO ADC可选采样率 函数void audio_adc_speaker_reless(void) ******************************************************************************************** 此函数实现关闭mic直通喇叭功能;