社区导航

 

搜索
查看: 519|回复: 2

[原创] 使用ST公司提供的MP3解码库

[复制链接]

196

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2020-5-21 17:41 | 显示全部楼层 |阅读模式

硬件平台:STM32F746G-DISC

开发平台:KEIL_5.29

我这里不再介绍MP3文件的详细结构,只介绍如何使用MP3解码库,需要了解MP3文件信息可以参考这个网:https://www.cnblogs.com/ranson7zop/p/7655474.html

这个解码库可以从ST公司官网通过搜索关键词“x-cube-audio”下载。下载解压完后,进入到此路经下:STM32CubeExpansion_Audio_V1.1.1\Middlewares\ST\STM32_Audio\Codecs,可以看到有两个文件夹,如下图所示:

1.png

 

 进入到解码库的目录下,会有3个文件夹,如下图所示:

2.png

 

进入lib文件夹下,会有3个解码库,分别对应不同的平台

3.png

 

我这里使用的是STM32F7,当然选用M7平台的lib文件。

接下来创建KEIL工程,先把SD卡驱动和音频芯片WM8994驱动调试好,然后将SpiritDSP_MP3_Dec文件夹复制到工程目录下,keil中添加lib文件,并设置include包含路经,那么MP3解码库就添加完成了。

4.png

 

5.png

 

接着说明一下MP3解码用到的函数,这些函数可以在spiritMP3Dec.h文件中找到。

1. void SpiritMP3DecoderInit(

TSpiritMP3Decoder *pDecoder,

fnSpiritMP3ReadCallback* pCallbackFn,

                      fnSpiritMP3ProcessCallback *pProcessFn,

                      void * token   )

函数功能:初始化MP3解码器,每次解码完后,再重新解码新的MP3文件,就必须再次先调用这个函数,以完成MP3解码器的初始化。

参数:

TSpiritMP3Decoder *pDecoder

指向要初始化的解码器结构。所有解码器变量都存储在此结构中。 解码器不使用非恒定的静态或全局变量,因此所有函数都是可重入的。

fnSpiritMP3ReadCallback* pCallbackFn

回调函数指针,解码器将使用此功能来检索输入的mp3数据。

fnSpiritMP3ProcessCallback *pProcessFn

回调函数指针,解码器将使用此功能来解码Layer3文件时,处理MDCT系数。目前不需要用到此功能,设置为NULL

void * token

传递给回调函数的可选参数。

2. typedef unsigned int (fnSpiritMP3ReadCallback)

(

void * pMP3CompressedData,

unsigned int nMP3DataSizeInChars,

void * token

)

函数功能:解码器使用它来读取MP3文件数据,必须实现此功能。

参数:

 

void * pMP3CompressedData

存放读取的mp3数据。

unsigned int nMP3DataSizeInChars

需要读取的MP3数据大小。

void * token

回调函数的可选参数。

3. unsigned int SpiritMP3Decode (

TSpiritMP3Decoder *pDecoder,

                              short *pPCMSamples,

                   unsigned int nSamplesRequired,

               TSpiritMP3Info * pMP3Info

                 );

函数功能:解码每一帧MP3数据,并将解码完后的数据存放在pPCMSamples中。如果此函数的返回值小于nSamplesRequired,则文件指针已到达MP3文件末尾,MP3文件解码完成,否者继续调用此函数解码。

参数:

TSpiritMP3Decoder *pDecoder

指向初始化的解码器结构。

short *pPCMSamples

存放解码输出的PCM数据。

unsigned int nSamplesRequired

MP3文件每个音频帧的采样字节数

TSpiritMP3Info * pMP3Info

解码完成后,存放当前音频帧的解码信息。其中TSpiritMP3Info结构体中的成员IsGoodStream,用来判断当前音频帧解码是否成功,解码成功为1,失败为0

        介绍下该解码库的使用流程,具体代码请参考我的程序。

6.png

 

 

此帖出自stm32/stm8论坛

使用ST公司提供的MP3解码库.docx

117.11 KB, 下载次数: 2

Audio.zip

4.85 MB, 下载次数: 3


回复

使用道具 举报

5789

TA的帖子

209

TA的资源

版主

Rank: 6Rank: 6

发表于 2020-5-21 22:20 | 显示全部楼层

不错,谢谢分享

EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,上班摸鱼场,释放压力好地方!商家勿入!加群暗号:喵


回复

使用道具 举报

1万

TA的帖子

133

TA的资源

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2020-5-24 16:49 | 显示全部楼层

谢谢楼主分享~~不错~

玩板看这里:

http://bbs.eeworld.com.cn/elecplay.html

EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 1/4 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-6-3 11:37 , Processed in 0.175443 second(s), 24 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表