打印
[STM32F7]

STM32F769 Disc音频播放之三:播放MP3

[复制链接]
4448|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhanzr21|  楼主 | 2016-12-30 23:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhanzr21 于 2016-12-30 23:27 编辑

对于能跑216MHz的F769, 单单只是播放Wave, 还是很浪费的. 花了一点时间, 终于把MP3解码在F769板子上基本搞通了, 这里跟大家分享一下.

首先简介一下MP3.

MP3算是音频格式中的明星, 可谓家喻户晓. 最大特点是压缩比高, 这对于存储与传输来讲,压力减轻了许多. 简当讲一首四分钟的歌曲,按照CD音质的44.1KHz, 双声道16bit的配置来, 不经压缩的PCM数据是44.1K*2*2*60*4 = 42336KB, 四十多兆, 在线播放的话一秒钟176KB, 就算对于今天的网络与硬盘配置来讲, 也不是个小数目. 从嵌入式系统角度来说, 压力更加大.

那么采用128Kb的码率进行MP3编码后, 硬盘存储与网络带宽一下子缩减11倍, 分别是4MB与17KB/s, 这样的话绝大多数的PC系统与大多数嵌入式系统都可以达到. 而且MP3编码率还可以更低.

音质方面, MP3的128Kb码率编码后, 音质基本上没有什么损失. (比较挑的人除外)

下面来看个简单例子, 1秒钟的44.1KHz,双声道声音文件. 两个通道的声音分别是450Hz的正弦波与方波,生成代码请参照这个系列帖子之前**. 波形如下:

经过128K编码解码之后的波形如下:

经过32K编码解码之后的波形如下:

经过11K编码解码之后的波形如下:

可以看出来128K编码解码之后对于音质的影响是非常小的. 相比较而言11K编解码后音质变形有点明显但是基本的音质没有损失.
至于文件大小,原wave大小是:173KB, 三种编码之后的MP3文件大小分别是:17KB, 5KB, 2KB. 这还是比较短的文件,如果是比较长的音频, 开销平摊之后, 压缩比更大.

MP3编码的最主要的原理是听觉屏蔽, 也就是把人听觉感应不到或者很难感应的频谱分量给删除了, 编码率越小,删除的频谱分量越大, 这一点通过上面的图型可以看出来, 11K编码时,方波快削减成正弦波了, 而纯频音调则几乎没有损失. 这样做的原理就是当人耳朵同时接收几个频谱的声音时, 只能感觉到某一种或者某几种, 那么把不能感觉到的频谱删除或者削减之后对音质影响很小或者说没有. 所以对于变化复杂平滑的声音文件, MP3编码的效果更好(更低的码率达到好效果). 而对于突变的声音, MP3编解码效果差一点.

MP3的全称是:MPEG-1 或者 MPEG-2 音频 III层, 事实上还有一个MPEG-2.5的补充. 这三个是比较通行的标准, 此外还有一些软件有许多标准之外的扩展功能.
MPEG-2,MPEG-2.5对于MPEG-1的改动属于添加性质, 主要是添加编码率与采样率.
MPEG-1支持的编码率: 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320 kbit/s
MPEG-2增加了三种: 8, 16, 24
MPEG-3没有增加编码率.

MPEG-1支持的采样率: 48K, 44.1K, 32K
MPEG-2支持的采样率: 24K, 22.05K, 16K
MPEG-2.5支持的采样率: 12K, 11.025K, 8K

此外MPEG-2.5对同步头那里简化了一点.

MP3文件结构如下:


回到解码上面来, 之前很多人在STM32上做过, 有的是移植helix, 有的是移植libmad的, 我感觉这两个库过于复杂为了方便实验, 另外找了一个更简单的库进行移植:minimp3, 主要是把里面一个浮点运算的表格做成了预先计算好,用的时候直接查找, 其实对于F769来说, 这个表格即时运算也来得及. 代码没有清理, 也没有很详细的测试, 后面有时间再慢慢体会研究, 先传上来给大家做个参考.
工程文件: F769_SAI_MP3_Decode.zip (1.04 MB)
表格文件: table_43_81D0000.zip (164.59 KB)
测试用的MP3文件: city_of_sky_reduce.zip (779 KB)
因为没有使用文件系统, 先将就一下, 把mp3烧写到Flash中去吧.

目前我对MP3研究只是皮毛,后面有时间再来细细研究发帖.



沙发
王栋春| | 2016-12-31 10:41 | 只看该作者
不错的资料

使用特权

评论回复
板凳
bd7qwmcu| | 2017-1-1 15:47 | 只看该作者
支持一下,新年快乐

使用特权

评论回复
地板
zhanzr21|  楼主 | 2017-1-3 15:40 | 只看该作者
新开发版块真冷清, 需要大家继续支持

使用特权

评论回复
5
pener| | 2017-1-3 19:54 | 只看该作者
这各资料不错

使用特权

评论回复
6
yingdian6| | 2017-1-4 13:56 | 只看该作者
资料不错

使用特权

评论回复
7
slotg| | 2017-1-4 20:37 | 只看该作者
感谢分享,不晓得在 F103 底下是否能够跑的起来。

使用特权

评论回复
8
zhanzr21|  楼主 | 2017-1-4 22:43 | 只看该作者
我移植的这个library不知道效率够不够 我估计够 已经准备做个10x的板子来试验了
别的library已经有人在103上试验成功了 效果不错

使用特权

评论回复
9
yichunshan| | 2017-1-6 09:54 | 只看该作者
资料真不错,楼主好人
但是帖子标题颜色着实亮瞎眼,此处并非夸张,太刺眼了

使用特权

评论回复
10
mcumail| | 2017-1-6 09:58 | 只看该作者
感谢分享,绝对的好东西。

使用特权

评论回复
11
zhanzr21|  楼主 | 2017-1-6 14:03 | 只看该作者
yichunshan 发表于 2017-1-6 09:54
资料真不错,楼主好人
但是帖子标题颜色着实亮瞎眼,此处并非夸张,太刺眼了 ...

贴子内部颜色我能控制, 标题颜色我没法改的

使用特权

评论回复
12
还是看不穿| | 2017-1-7 17:40 | 只看该作者
厉害,谢谢分享

使用特权

评论回复
13
aresc| | 2017-1-7 19:17 | 只看该作者
MP3是MPEG1-layer3的简称,MPEG2和2.5增加了对低码率的支持,对音质的损伤是在高频部分16k以上的

使用特权

评论回复
14
peng352603281| | 2017-1-11 08:54 | 只看该作者
赶紧学习一个

使用特权

评论回复
15
Larm1| | 2017-1-16 08:02 | 只看该作者
谢谢楼主分享...

使用特权

评论回复
16
lanjackg2003| | 2017-1-16 11:30 | 只看该作者
mark

使用特权

评论回复
17
chenfei48| | 2017-2-27 17:07 | 只看该作者
不错,可惜没板子

使用特权

评论回复
18
zhanzr21|  楼主 | 2017-2-28 15:14 | 只看该作者
不一定非得用这板子, 原理部分通用

使用特权

评论回复
19
BruceLee1987| | 2017-3-8 16:56 | 只看该作者
mark!

使用特权

评论回复
20
BruceLee1987| | 2017-3-8 17:56 | 只看该作者
mark!

使用特权

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

本版积分规则

个人签名:每天都進步

91

主题

1013

帖子

34

粉丝