STM32F4 Discovery 软解FLAC(更新完美版)

2019-07-20 11:02发布


程序基于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达到了比较恐怖的地步,后面慢慢尝试优化。






友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。