程序基于STM32F4 Discovery,用板载CS43L22播放。
用了官方的USB OTG功能,读取U盘下的audio.flac文件 并播放。
不过由于FLAC的FrameSize和BlockSize以及片内RAM的限制,目前只实现了level2级别的播放,一般网上下载的FLAC文件还需要重新转成Level2.
后续还在改进,毕竟F103ZE就可以软解到这个级别了。
程序主要参考TraxMOD代码以及前人移植的,在此基础上进行了修改。
程序同时包括软解MP3代码,在usbh_usr.c中注释掉playFLAC("audio.flac")并反注释掉WavePlayerStart()前面的"//"就可以读取U盘下的“audio.mp3”进行播放,完美320kbps解码。
更新:修改了BlockSize和FrameSize后尝试正常FLAC格式(Level8)软解,失败。调试发现HardFalut.分析后认为是内存溢出,毕竟增加了好几十KB的内存需求。查资料后尝试修改堆和栈的大小,一知半解,但是修改过后可以完美软解最高压缩比FLAC。后面还要深入学习下堆和栈的知识。更新完美版程序。
表格为两个级别分别需要的RAM空间
压缩级别
读取缓存(filebuf)
解码缓存(decoded)
乒乓缓存(PCM_buf)
Level2
5KB
9KB
9KB
Level8
15KB
36KB
36KB
编译完成的数据也比较吓人
Program Size: Code=33872 RO-data=176540 RW-data=372 ZI-data=103828
RAM达到了比较恐怖的地步,后面慢慢尝试优化。 |