084425 发表于 2020-7-26 21:27

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

本帖最后由 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 最初版本





小涛DZGZS 发表于 2020-7-27 01:01

好东西 好资料 感谢

wsnsyy 发表于 2020-7-27 16:20

Audio Arduino Board能买到吗

muyichuan2012 发表于 2020-7-27 19:03

wsnsyy 发表于 2020-7-27 16:20
Audio Arduino Board能买到吗

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

pattywu 发表于 2020-12-27 12:40

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

pattywu 发表于 2020-12-27 12:41

楼主,WM8978的音质如何?
比PCM1770如何?
2种芯片都没用过,想问一下。

123654789 发表于 2020-12-27 17:32

顶顶顶顶顶顶顶顶

musich 发表于 2020-12-30 23:03

这个好玩,

雪梦苍月 发表于 2022-2-11 10:07

感谢分享

6552918 发表于 2022-2-12 22:59

支持一下!!!!

Younique 发表于 2022-3-2 16:23

这个板子能买到吗?
页: [1]
查看完整版本: AN0039—开源Helix MP3解码算法Audio Decode by HELIX MP3