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格式的文档,在程序中输入中文文件名将会出错。故只能用英文文件名。

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

  1. 【Arduino + Linux】基于 Helix 解码库实现 MP3 音频播放

    目录 一.MP3 文件结构 1.1.ID3V2.3 1.1.1.标签头 1.1.2.扩展标签头 1.1.3.标签帧 1.2.音频数据 1.3.ID3V1 1.4.MP3文件结构图 二.MP3 解码库 ...

  2. W801单片机学习笔记——调试器的配置与使用(适用于W801和W806)

    1.前言 在以往的Cortex-M内核单片机的开发中,最离不开的一个东西就是调试器,什么J-Link,ST-Link,DAP-Link等等,没了他们调试程序感觉浑身难受,效率直线下降.调试器就好比是战 ...

  3. 基于安卓的IJK解码库使用指南

    一.环境准备 1.ubuntu环境 2.Android studio 二.软件安装 1.ubuntu系统需要安装 :NDK.Android-sdk.JDK 其中NDK和android-sdk需要配置到 ...

  4. 【51单片机学习笔记】基于STC11F04E的蜂鸣器音乐播放器

    微型播放器                                     --基于STC11F04E的蜂鸣器控制 青岛科技大学 信息科学技术学院 集成162 Listen C 一.简介 1. ...

  5. W801单片机学习笔记——SDK的启动流程,例程使用

    目录 1.前言 2.SDK的启动流程 3.挖坑 1.前言 W801的SDK需要配套的CDK集成开发环境进行开发,该SDK具有W801单片机所有硬件的驱动程序,FreeRTOS操作系统,基于蓝牙和WiF ...

  6. 单片机学习笔记1--资料下载、环境搭建(基于百问网STM32F103系列教程)

    第1篇 资料下载.环境搭建 第一章 百问网视频体系及学习路线 1.1课程视频变化 2011-2020:百问网录制了10年的Linux视频. 2021: 1.首次进入单片机领域,发布单片机课程! 2.重 ...

  7. 智能android电视更换播放器,GitHub - qfwc258/TvPlayer: android智能电视播放器,可以播放各电视台节目,播放基于ijkplayer的实现。...

    TvPlayer 1,android智能电视播放器,可以播放各电视台节目,播放基于ijkplayer的实现 2,测试的源地址可能失效,如需测试可以自己更换播放源.HttpUtils.getOfflin ...

  8. 智能android电视更换播放器,GitHub - kaigeLove/TvPlayer: android智能电视播放器,可以播放各电视台节目,播放基于ijkplayer的实现。...

    TvPlayer 1,android智能电视播放器,可以播放各电视台节目,播放基于ijkplayer的实现 2,测试的源地址可能失效,如需测试可以自己更换播放源.HttpUtils.getOfflin ...

  9. 智能android电视更换播放器,GitHub - xioxu/TvPlayer: android智能电视播放器,可以播放各电视台节目,播放基于ijkplayer的实现。...

    TvPlayer 1,android智能电视播放器,可以播放各电视台节目,播放基于ijkplayer的实现 2,测试的源地址可能失效,如需测试可以自己更换播放源.HttpUtils.getOfflin ...

最新文章

  1. 美国科技界高度关注中国科技创新进展
  2. 动态修改数据窗口的数据源
  3. 【PHP】创建文件并写入内容
  4. python土木_土木和结构工程师用Python-Python for civil and structural engineers
  5. WiFi万能钥匙发布iOS4.0新增骚扰电话拦截功能
  6. pygame的最小系统
  7. Android SystemProperties系统属性详解
  8. 【Lintcode】350. Slash Separating
  9. Java SE 007 循环控制语句
  10. 拉格朗日法线性规划求解
  11. VR电竞游戏在英特尔®架构上的用户体验优化
  12. Team Queue -uva
  13. 419. 甲板上的战舰
  14. 删除坑爹甲方软件天珣客户端
  15. 目标检测入门知识以思考(写于2021.11)
  16. [换根] Accumulation Degree
  17. 2.13学习生活总结
  18. Eclipse中页面跳转、请求转发
  19. Spring整合定时任务调度框架Quartz实
  20. 实现三栏布局的几种方法 1

热门文章

  1. android TextView文字底部或者中间加横线
  2. 学习linux第十二天
  3. php设计模式之工厂模式用法经典实例
  4. Java基础课程设计——DVD管理器
  5. 计算器上复合型折现率i折算的理解
  6. ajaxfileupload 返回值_ajaxfileupload上传文件,返回json数据报错的问题。
  7. count(*) MySQL 统计表的行数
  8. 借助公有云服务器内网穿墙ssh访问内网服务器
  9. Java安装教程-没有jre解决办法
  10. sms+quartz多次重发短信