找回密码
 立即注册
查看: 326|回复: 4

minimp3解码库使用@STC32G144K246 的尝试,大家一起来帮忙

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:192
  • 最近打卡:2025-12-08 19:49:09

16

主题

96

回帖

950

积分

高级会员

积分
950
发表于 2025-12-7 02:23:49 | 显示全部楼层 |阅读模式

使用的IDE是小熊猫C++
编译器为mingw64.

自行修改main.c中的wavpath和mp3path

upload 附件:mp3frameLUT测试.zip

我删除了大量的代码,包括各种平台的针对优化都删了,只保留了layer3的解码部分,layer1和2已经没人用了也删了。

如果想直接解码后播放,记得声明libwinmm.a位置,如果遇到因为wav播放部分的代码导致的编译不了,播放不了,建议直接删除wav播放相关的代码,直接用其他播放器播放输出的wav。

如果想要移植到51上,记得把关键字int处理一下

image.png

mpeg1/2/2.5 layer3帧头结构

这里面的比特率是mpeg1的,2和2.5的与1不同

mpeg1-帧头位图数据.drawio.png

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

mpeg1边信息位图.drawio.png
mpeg2/2.5边信息结构

mpeg2和mpeg2.5边信息结构.drawio.png

mpeg1 layer3主数据结构
mp3主数据结构.drawio.png

minimp3采用了多种方式优化解码,仅看layer3的解码的核心huffman解码和缩放因子解码以及imdct解码部分就采用多种优化方法,大量使用常数减少浮点数三角函数开方计算
huffman部分采用数组模拟多叉树,但是又不仅仅是普通的多叉树,而是混合多叉树,每个分支节点都记录了自己有几个分支,这样可以减少冗余数据,一次可以从位流种解码多位数据,此外还直接用宏展开了码流读取的代码,增加效率。

imdct解码也采用了优化算法,先将IMDCT转换为iDCT-II然后用DCT-iii计算结果。

在解码的反量化步骤中涉及到2的幂运算和​\frac{3}{4}次方的幂运算,但是minimp3的处理方式十分精妙,可以说minimp3解码库的优化程度十分的高。

1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:266
  • 最近打卡:2025-12-16 08:29:17

812

主题

1万

回帖

2万

积分

管理员

积分
21282
发表于 7 天前 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:266
  • 最近打卡:2025-12-16 08:29:17

812

主题

1万

回帖

2万

积分

管理员

积分
21282
发表于 2025-12-7 10:11:34 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:192
  • 最近打卡:2025-12-08 19:49:09

16

主题

96

回帖

950

积分

高级会员

积分
950
发表于 2025-12-8 20:07:46 | 显示全部楼层
效果

output.wmv (7.36 MB, 下载次数: 12)
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:399
  • 最近打卡:2025-12-16 09:19:07

1

主题

17

回帖

1431

积分

金牌会员

积分
1431
发表于 7 天前 | 显示全部楼层
MP3格式也能解码么?
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-12-17 02:46 , Processed in 0.110974 second(s), 70 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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