基于MAX78000FTHR的MP3播放器
基于MAX78000FTHR的MP3播放器,软件解码MP3支持MPEG-1、MPEG-2 以及MPEG-2.5 标准的Layer3 解码
标签
嵌入式系统
llzx
更新2022-12-01
561

1.项目介绍

MAX78000微控制器,MAX78000FTHR这款板卡集成了MAX9867超低功耗立体声声音频编解码器,非常适合语音方面应用。Cortex® M4F核心,片内512KB闪存 128KB SRAM,通过软件解码,大约需要50DMIPS的运算性能和20K以上RAM,MAX78000可以满足MP3软件解码要求。

 

2.项目设计思路  

2.1系统框图

FsOvJpqillUr8AOCkS8Ly0lpPM1Z

2.2 MP3文件结构

MP3文件大致分为3个部分:TAG_V2(ID3V2),音频数据,TAG_V1(ID3V1)。详细信息如下图,MP3 ID3V2和ID3 V1需要通过编程读取,音频数据即数据帧通过解码器处理,输出PCM到MAX9867 DAC实现声音的播放。

Fm4gb3KZo4HqX6EVP6obvy0RzoLZ

2.3选择合适解码器

适合嵌入式的解码器有helix和libmad,其中helix对资源占用更少,Helix解码库支持浮点和定点计算实现,移植到MAX78000控制器运行使用定点计算实现,它支持MPEG-1、MPEG-2以及MPEG-2.5标准的Layer3解码。 Helix解码库支持可变位速率、恒定位速率,以及立体声和单声道音频格式。

helix解码器文件结构如下,其中有优化解码速度,部分解码过程使用汇编实现,因此只需要大约50DMIPS即可完成对MP3解码。

FrAhxlub0-RZCejxYhx_gVntjf_X

 

3.程序

3.1文件系统

初始化SD卡,挂载文件系统,读取文件主要函数。

	result = f_mount(&fs,"0:",1);  
	if(result!=FR_OK)
	{
		printf("\n SD FAIL\n");
		while(1);
	}

result=f_open(&file,mp3file,FA_READ);

3.2Helix主要函数

MP3InitDecoder:初始化解码器函数

MP3FreeDecoder:关闭解码器函数

MP3FindSyncWord:寻找帧同步函数

MP3Decode:解码MP3帧函数

MP3GetLastFrameInfo:获取帧信息函数

数据帧信息结构体

typedef struct _MP3FrameInfo { 
int bitrate; //位率
int nChans; //声道数
int samprate; //采样率
int bitsPerSample; //采样位数
int outputSamps; //PCM 数据数
int layer; //层级
int version; //版本
} MP3FrameInfo;

 

4.总结

MP3 文件是经过压缩算法压缩而存在的,为得到 PCM 信号,需要对 MP3 文件进行解码,整个过程涉及很多算法计算,要自己编程实现不是一件现实的事情,最好参考现有的demo先实现了在深入了解。

现阶段只是对资料整合,接下来需要对所有的函数进行整合,调试,完成项目。

团队介绍
设计工程师
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号