基于W801和Helix解码库的MP3播放器(W801单片机学习笔记)热血沸腾,流畅播放

1.前言

此前我有一篇帖子提出将Helix修改成能够运行在任何处理器上的解码算法。并着重以基于RISC-V处理器的国产单片机进行测试。此前测试了中科蓝汛出品的AB32VG1单片机,虽然解码没有出现错误,但是由于AB32VG1的处理器性能不足无法流畅播放,且超频至极限速度230MHZ后仍然无法流畅播放,未果,又踏上了寻找足够性能的国产单片机的道路。之后发现了W801单片机,该单片机额定工作频率就达到了240MHZ,且其处理器还带有一级指令缓存,这样一通硬核加持下来应该性能足够了,实测也是果真如此,热血沸腾,构想终于实现,国产基于RISC-V单片机流畅运行Helix解码库。

上文提到的两篇此前我发的帖子如下:

Helix MP3解码库脱离汇编指令束缚,运行在任何处理器上的解决方案_三月花科技的博客-CSDN博客

AB32VG1超频,编译器优化设置_三月花科技的博客-CSDN博客

修改好的MP3解码程序包下载如下:

CSDN下载:

HelixMP3解码库脱离汇编指令束缚,运行在任何处理器上的解决方案-单片机文档类资源-CSDN下载

百度云下载

链接:https://pan.baidu.com/s/1U4eVkZZ1IZaeGf4zzBerNQ 
提取码:SYHT

2.移植过程

2.1添加Helix解码库源码

添加Helix解码库进入工程后,记得先删除asm文件夹,因为这个文件夹里面的两个汇编文件是针对Cortex-M处理器的,RISC-V 处理器无法运行。添加后如下图所示:

2.2修改部分文件内容

现在需要使用C代码实现原汇编函数的功能。修改文件polyphase.c和assembly.h,具体修改的流程请见:

Helix MP3解码库脱离汇编指令束缚,运行在任何处理器上的解决方案_三月花科技的博客-CSDN博客

3.测试

3.1测试结论

正常解码,流畅播放。不得不说W801的XT804处理器性能非常优秀,其性能与Cortex-,M4差不多。DAC采用曾乐之邦的PCM5120A,连接W801单片机的I2S外设即可开始听歌。SD卡采用SD卡模块,并将W801的SDIO配置成单线模式。完整如下图所示:

现阶段除了移植了Helix以支持MP3格式音频文件外,还移植了FLAC无损音频格式的解码库,还有测试I2S时使用的WAV音频格式解码库,故当前供支持MP3,FALC,WAV三种格式。APE格式敬请期待。

3.2现阶段问题

现阶段是将歌曲名固定在程序中,还未实现自动搜歌的功能。而且,由于CDK使用的是UTF-8格式的文档,在程序中输入中文文件名将会出错。故只能用英文文件名,测试如下图:

 测试曲目:咱当兵的人.flac,由于不支持中文文件名,用了首拼

测试曲目:打靶归来.mp3(320kpbs, 16bits),我是一个兵.mp3(128kbps, 16bits) 

4.测试工程下载

4.1接线

SD卡部分(单线模式):

CLK        ->        PA9

CMD        ->        PA10

D0        ->        PA11

I2S部分(不含MCLK模式,因为PCM5120A无需MCLK,若使用其它DAC可以找到MCLK引脚设置处的代码,去掉注释,如下图所示)(该函数在userapp/audioplayerbase/playerbase.c):

BCK 位时钟        -》        PB8

WS字选择(声道切换)        -》        PB9

DO数据输出        -》        PB11

DI数据输入        -》        PB10(本例程中未使用,播放器只涉及数据输出)

4.2下载链接

CSDN下载:

基于W801的音频播放器-单片机文档类资源-CSDN下载

百度云下载:

链接:https://pan.baidu.com/s/1arpoAyh3sZXESIooQq3qiA 
提取码:SYHT

4.3例程使用注意事项

现阶段是将歌曲名固定在程序中,还未实现自动搜歌的功能。请确保SD卡中对应目录下有与程序中相对应的文件,或者修改程序为SD中现有文件的文件名。程序修改的地方如下图:

 文件位置如左侧所示,右侧调用PlayMusicFname函数时修改第一个参数即可,第一个参数是文件名,后面两个参数是播放时所需的二值信号量,请不要修改。

其次,由于CDK使用的是UTF-8格式的文档,在程序中输入中文文件名将会出错。故只能用英文文件名。

猜你喜欢

转载自blog.csdn.net/Fairchild_1947/article/details/123785622