前言
本应用笔记介绍了如何将开源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)