使用的IDE是小熊猫C++
编译器为mingw64.
自行修改main.c中的wavpath和mp3path
附件:mp3frameLUT测试.zip
我删除了大量的代码,包括各种平台的针对优化都删了,只保留了layer3的解码部分,layer1和2已经没人用了也删了。
如果想直接解码后播放,记得声明libwinmm.a位置,如果遇到因为wav播放部分的代码导致的编译不了,播放不了,建议直接删除wav播放相关的代码,直接用其他播放器播放输出的wav。
如果想要移植到51上,记得把关键字int处理一下

mpeg1/2/2.5 layer3帧头结构
这里面的比特率是mpeg1的,2和2.5的与1不同

mpeg1 layer3边信息结构(在帧头后面)

mpeg2/2.5边信息结构

mpeg1 layer3主数据结构

minimp3采用了多种方式优化解码,仅看layer3的解码的核心huffman解码和缩放因子解码以及imdct解码部分就采用多种优化方法,大量使用常数减少浮点数三角函数开方计算
huffman部分采用数组模拟多叉树,但是又不仅仅是普通的多叉树,而是混合多叉树,每个分支节点都记录了自己有几个分支,这样可以减少冗余数据,一次可以从位流种解码多位数据,此外还直接用宏展开了码流读取的代码,增加效率。
imdct解码也采用了优化算法,先将IMDCT转换为iDCT-II然后用DCT-iii计算结果。
在解码的反量化步骤中涉及到2的幂运算和\frac{3}{4}次方的幂运算,但是minimp3的处理方式十分精妙,可以说minimp3解码库的优化程度十分的高。