前言
最近在学习上海山景公司的BP10_128DBG的开发板,因为网上关于BP10开发板的帖子也比较少,在学习的时候也没有太多的参考资料,基本上都是官方的历程。芯片的相关资料也没有像ST、NXP这些那么全,所以我把我自己的学习心得分享出来,大家有需要的可以参考。
一:添加的文件、静态库
中间层添加了audio和fatfs
添加的.a静态库
src文件夹下添加audio_decoder_in_use.h文件,里面定义了用哪些解码方式的宏
然后在audio_decoder_api.c中定义了各种解码方式的函数,注意要添加#include "audio_decoder_in_use.h",否则定义的函数就是灰的,不能使用。这些函数的具体实现被编译成了libAudioDecodderLibrary.a静态库。
Mvstdio.c中就是一些上海山景公司封装的一些C库函数或系统调用
二:先进行IO的复用和SDCard初始化
与之前SD卡读写block不同,这里使用了文件系统
三:进行分区挂载
current_vol的定义,该数组用来记录用哪个分区
使用f_mount函数进行挂载
f_mount函数相关参数含义
ffpresearch_init(&gFatfs_sd,NULL,NULL,acc_ram_blk)、f_scan_vol(current_vol)初始化sd卡挂载的分区
四:循环扫描TF卡中的每个歌曲文件
f_file_real_quantity()可以返回当前TF卡中文件的数量
我的TF卡里只放了两首歌,所以用串口打印出来的值就是2
五:几个FATFS文件系统中的结构体
FileType结构体中记录了常见音频编码类型
FIL结构体记录了File这个类中的成员
Ff_dir是描述文件夹的类
六:打开音频文件,初始化相应结构体
调用f_open_by_num来打开文件
通过get_audio_type((TCHAR *)file_long_name)来获取音频文件编码类型
打印song相关的一些信息(Song name、type)
在FiileType中第7个是mp3,跟音频文件匹配得上
七:audio_decoder结构体初始化
通过文件系统读取音频文件之后将得到的文件句柄传入audio_decoder_initialize()函数中进行初始化
audio_decoder_initialize()里面主要初始化了audio_decoder这个变量
注意AudioDecoderContext结构体中定义的4个函数(initialize、decode、can_continue、seek)在确定音频解码类型之后都会指向.a编译的静态库。
一些mp3、wma相关函数的实现编译成了libAudioDecoderLibrary.a库,audio_decoder_api.c文件中的函数最后都会调用.a库的函数,该文件就是一个简单的调用。
通过audio_decoder_get_context_size()可以得到文件大小(差不多)
audio_decoder->song_info结构体中记录了相关音频文件信息(作者、专辑等)
SongInfo结构体
调用AudioDAC_VolSet()可以设置音量,这个函数是在dac.h中
准备工作做完之后就开始解码了,先用audio_decoder_can_continue()判断一下是否能进行
然后再判断一下音频文件的采样率和SampleRateCC是否相同,不同的话就重新赋值,修改AudioDAC的采样率。其实在前面已经做过了一遍这个操作。
判断一下DAC0循环FIFO中还有多少空间,如果小于pcm_data_length就死等
然后根据通道数进行不同的配置,读取数据,以两个通道的为例
最后就会从DAC0输出音频,将音频文件放到文件夹里也可以,是一样的效果。
总结
以上就是本文的全部内容,非常感谢你能看到这。