打印
[应用相关]

AN0039—开源Helix MP3解码算法Audio Decode by HELIX MP3

[复制链接]
3332|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
084425|  楼主 | 2020-7-26 21:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 muyichuan2012 于 2022-1-8 14:09 编辑

AN0039—Audio Decode by HELIX MP3



前言
本应用笔记介绍了如何将开源Helix MP3解码算法移植到AT32F4xx单片机方法。本文档提供的源代码演示了使用Helix MP3解码算法的MP3播放器应用程序。该MP3播放器应用程序使用SDIO接口读取SD Card中的MP3文件,解码后通过一颗高品质的立体声编解码器WM8988进行播放。
本应用笔记的组织顺序如下:
1. 介绍 Helix MP3 解码算法。
2. 系统硬件、软件流程介绍。
3. 介绍应用所需硬件资源。
4. 使用应用程序需要的步骤。
支持型号
AT32F403xx
AT32F413xx
AT32F415xx
AT32F403Axx
AT32F407xx
目录
概述 .................................. 5
关于HELIX MP3 解码算法 .... 5
基于AT32 的MP3 播放器 ..... 5
软解MP3 流程 .................... 6
软解MP3 使用方法 ............. 8
硬件资源 ........................... 8
软解MP3 的使用 ................. 8
版本历史 .......................... 11

概述
MP3的全称为MPEG1 Layer-3音频文件,MPEG 音频文件是MPEG1标准中的声音部分,它根据压缩质量和编码复杂程度划分为Layer1、Layer2、Layer3三层,分别对应MP1、MP2、MP3这三种声音文件。其中MP3文件以一帧为一个编码单元,各帧编码数据是独立的。
关于HELIX MP3 解码算法
Helix解码算法可用浮点和定点实现。将该算法移植到AT32单片机时可考虑定点实现。该算法可运行在任意32位定点处理器上,并完全使用C语言编码,可选择用优化的汇编指令替换某些代码段。Helix提供对MPEG-1、MPEG-2和MPEG-2.5的第3层(Layer 3)支持。它支持可变位速率、恒定位速率,以及立体声和单声道音频格式。有关实现和特性的详细信息,请访问Helix社区:
https://datatype.helixcommunity.org/Mp3dec
基于AT32 的MP3 播放器
本应用指南将介绍如何在AT32F403单片机上通过Helix解码算法实现MP3播放器,并提供基于AT32F4xx_StdPeriph_Lib和Helix算法的源代码。该MP3播放器应用程序使用SDIO接口读取SD Card中的MP3文件,解码后通过一颗高品质的立体声编解码器WM8988进行播放。而Artery提供了一块Audio Arduino Board,上面集成了Speaker、Microphone以及WM8988芯片电路。其中,对WM8988芯片的控制使用I2C接口,而音频数据传输使用I2S接口。结合AT-START Board可以方便快速的搭建起一套MP3播放器。


软解MP3 流程
了解了AT32软解MP3的硬件结构,下面我们来看一下系统软件流程,如下图2所示:


在上图中,MP3解码的内核逻辑以状态机的形式在程序中实现。下图3显示了此状态机的图形表示。当处于空闲状态时,状态机等待SD卡连接。设备连接后,代码尝试初始化SD卡文件系统。应用程序。将搜索SD卡中的MUSIC文件夹下的MP3文件。如果找到文件,则将文件名存储在mp3indextbl []数组中。然后打开第一个文件,代码将搜索第一个帧起始点。如果找到帧起始点,将从文件读取该帧的其余部分并传递给解码函数。已解码的音频帧发送到WM8988音频DAC器件进行播放。文件读取和解码操作将继续,直到文件结尾;然后将关闭该文件并打开下一个文件。


软解MP3 使用方法
硬件资源
1) AT-START-F403 V1.2 实验板
2) Audio Arduino Board (WM8988)
3) 外接 SD Card
4) 3.5mm 接口耳机



2019.02.25 第8 页 版本1.0.0
www.arterytek.com
软解MP3 使用方法
硬件资源
1) AT-START-F403 V1.2 实验板
2) Audio Arduino Board (WM8988)
3) 外接 SD Card
4) 3.5mm 接口耳机
图4. AT-START 结合Audio Arduino Board 使用
图5. AT-START 与SD Card Module 接线图
注:
1.该demo是基于AT32F403的硬件条件,若需要在AT32其他型号上使用,请修改相应配置即可。
2.供电部分:使用电源供电,或USB线供电(勿使用Link单独供电)。
3.此AT-START板不包含SD卡电路,所以需要自行外接SD卡。

软解MP3 的使用
1. 在SD卡根目录下建立一个“MUSIC”文件夹,并在里面存放mp3格式的音乐文件;

2. 将SD卡连接到AT-START Board相应的引脚,参考 图5;
3. 打开MP3 decode project源程序,编译后下载到实验板;
4. 连接3.5mm 耳机到Audio Arduino Board的LINE_OUT接口;
5. 按RESET复位,即可播放音乐;
6. 音乐播放过程中可通过按键(KEY1/USER_KEY)进行暂停/播放、音量+/-、上一首/下一首等操作。

由于AT-START Board 结合Audio Arduino Board使用时只提供两个按键,USER_KEY和KEY1。要实现上述复杂的暂停/播放、音量+/-、上一首/下一首操作需要对按键进行复用,按键逻辑如下:
USER_KEY:
1) 循环切换KEY1的功能1 — 功能5
KEY1:
1) 功能1:暂停/播放
2) 功能2:音量+
3) 功能3:音量-
4) 功能4:上一曲
5) 功能5:下一曲

另,可以连接USART1_TX(PA9),查看打印消息,包括音乐名,MP3帧头信息,出错信息等数据,如下图6、图7所示:



版本历史
2019.02.25 1.0.0 最初版本

MP3_Decode_V2.0.0.zip (1.9 MB) AN0039_Audio_Decode_by_HELIX_MP3_ZH_V2.0.0.pdf (645.8 KB)



使用特权

评论回复
沙发
小涛DZGZS| | 2020-7-27 01:01 | 只看该作者
好东西 好资料 感谢

使用特权

评论回复
板凳
wsnsyy| | 2020-7-27 16:20 | 只看该作者
Audio Arduino Board能买到吗

使用特权

评论回复
评论
wsnsyy 2020-7-27 18:15 回复TA
@muyichuan2012 :能提供一下PCB图纸吗 
muyichuan2012 2020-7-27 17:54 回复TA
我们有做许多,请联系最近的方案商进行购买。Thanks. 
地板
muyichuan2012| | 2020-7-27 19:03 | 只看该作者
wsnsyy 发表于 2020-7-27 16:20
Audio Arduino Board能买到吗

如附件,希望对您有所帮助。

UM_Audio Arduino Daughter Board_V1.0.pdf

979.09 KB

使用特权

评论回复
5
pattywu| | 2020-12-27 12:40 | 只看该作者
helix要解码320Kbps码流的MP3,输入缓冲区需要设为大于2000,否则解码不出来,
如果只解码128K码流的MP3,输入缓冲区只设为1000就差不多了。
以前默认的输入缓冲区是1500,能解码192K码流的,死活就是解码不出320K的码流,今天突发奇想,把输入缓冲区改为4096,不小心解码了320K的码流。
然后逐步减小输入缓冲区的大小,到1960时候,就有部分码流解码不出来。为了保险起见,输入缓冲区的大小设为2000以上为宜。

使用特权

评论回复
6
pattywu| | 2020-12-27 12:41 | 只看该作者
楼主,WM8978的音质如何?
比PCM1770如何?
2种芯片都没用过,想问一下。

使用特权

评论回复
7
123654789| | 2020-12-27 17:32 | 只看该作者
顶顶顶顶顶顶顶顶

使用特权

评论回复
8
musich| | 2020-12-30 23:03 | 只看该作者
这个好玩,

使用特权

评论回复
9
雪梦苍月| | 2022-2-11 10:07 | 只看该作者
感谢分享

使用特权

评论回复
10
6552918| | 2022-2-12 22:59 | 只看该作者
支持一下!!!!

使用特权

评论回复
11
Younique| | 2022-3-2 16:23 | 只看该作者
这个板子能买到吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

225

帖子

0

粉丝