找回密码
 立即注册
楼主: health

MP3解码播放流畅@Ai8051U核心板-擎天柱,8051U移植minimp3解码库

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:271
  • 最近打卡:2026-01-09 10:16:27

84

主题

7218

回帖

1万

积分

超级版主

积分
15420
发表于 2025-12-22 10:22:33 | 显示全部楼层
hea*** 发表于 2025-12-22 10:09
mp3文件不到30KB,时长大约7秒,循环播放。
实测可行。
如果使用I2S-DAC播放应该有更好的音质。
不知道采样率是多少?
解码使用汇编,比较难看懂,能否使用C解码,

可以使用较低的采样率比如8KHz采样,
可以适配到STC32G144K246,这个跑起来是AI8051U的 N倍以上的速度。
使用C解码,有更多的人可以想办法优化速度。

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:111
  • 最近打卡:2026-01-09 00:32:58

21

主题

184

回帖

1749

积分

金牌会员

积分
1749
发表于 2025-12-22 10:45:08 | 显示全部楼层
梁*** 发表于 2025-12-22 10:22
实测可行。如果使用I2S播放应该有更好的音质。
不知道采样率是多少?
解码使用汇编,比较难看懂,能否使 ...
采样率16KHz。
开始就是用C编译的,但是性能满足不了最低要求。
先把C编译成asm,再优化asm程序才勉强达到流畅。
稍后我放上原始c文件。

用软浮点库纯CPU计算的话,解码时间与播放时间有十倍以上的差距,基本不用考虑。
启用TFPU浮点库,速度成倍提升,但是“ai8051u_32_tfpu.lib”中个别函数实现上有bug

导致最终输出数据不对。

点评

方便问一下,ai8051u_32_tfpu.lib的浮点库,具体是哪些函数实现上有bug?我看看能否从库中修复一下这个问题  详情 回复 发表于 2025-12-22 17:12
如有问题,我们安排人来完善  详情 回复 发表于 2025-12-22 17:07
好的,有C文件,可以优化速度的。  详情 回复 发表于 2025-12-22 13:52
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:271
  • 最近打卡:2026-01-09 10:16:27

84

主题

7218

回帖

1万

积分

超级版主

积分
15420
发表于 2025-12-22 13:52:10 | 显示全部楼层
hea*** 发表于 2025-12-22 10:45
采样率16KHz。
开始就是用C编译的,但是性能满足不了最低要求。
先把C编译成asm,再优化asm程序才勉强达到 ...

好的,有C文件,可以优化速度的。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:290
  • 最近打卡:2026-01-09 10:19:02

819

主题

1万

回帖

2万

积分

管理员

积分
21729
发表于 2025-12-22 17:07:32 | 显示全部楼层
hea*** 发表于 2025-12-22 10:45
采样率16KHz。
开始就是用C编译的,但是性能满足不了最低要求。
先把C编译成asm,再优化asm程序才勉强达到 ...

如有问题,我们安排人来完善
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:660
  • 最近打卡:2026-01-09 13:13:24
已绑定手机
已实名认证

124

主题

3318

回帖

8457

积分

版主

积分
8457
发表于 2025-12-22 17:12:07 | 显示全部楼层
hea*** 发表于 2025-12-22 10:45
采样率16KHz。
开始就是用C编译的,但是性能满足不了最低要求。
先把C编译成asm,再优化asm程序才勉强达到 ...

方便问一下,ai8051u_32_tfpu.lib的浮点库,具体是哪些函数实现上有bug?我看看能否从库中修复一下这个问题
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:111
  • 最近打卡:2026-01-09 00:32:58

21

主题

184

回帖

1749

积分

金牌会员

积分
1749
发表于 2025-12-22 17:27:54 来自手机 | 显示全部楼层
王昱顺 发表于 2025-12-22 17:12
方便问一下,ai8051u_32_tfpu.lib的浮点库,具体是哪些函数实现上有bug?我看看能否从库中修复一下这个问 ...

浮点数取反的函数

点评

好的,我检查一下,可以暂时使用浮点乘法,乘以-1代替,我测试一下  详情 回复 发表于 2025-12-22 17:56
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:660
  • 最近打卡:2026-01-09 13:13:24
已绑定手机
已实名认证

124

主题

3318

回帖

8457

积分

版主

积分
8457
发表于 2025-12-22 17:56:33 | 显示全部楼层
hea*** 发表于 2025-12-22 17:27
浮点数取反的函数

好的,我检查一下,可以暂时使用浮点乘法,乘以-1代替,我测试一下
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:111
  • 最近打卡:2026-01-09 00:32:58

21

主题

184

回帖

1749

积分

金牌会员

积分
1749
发表于 2025-12-22 18:00:50 | 显示全部楼层
王*** 发表于 2025-12-22 17:56
好的,我检查一下,可以暂时使用浮点乘法,乘以-1代替,我测试一下


C?FPNEG

无标题1.png
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:111
  • 最近打卡:2026-01-09 00:32:58

21

主题

184

回帖

1749

积分

金牌会员

积分
1749
发表于 2025-12-22 18:09:58 | 显示全部楼层
浮点数取反就是将最高位取反。
keil浮点库,前面几行是排除特殊值,0和NaN不做处理,这里不重要。
对其它普通浮点数,通过一句
XRL R4, #0x80
来实现最高位取反。

tfpu库使用A累加器中转了一下,
MOV A,R4
XRL A, #0x80
MOV R4, A
实现最高位取反的效果没问题,但是影响了A寄存器的值。
调用者如果A正在使用,调用FPNEG后A寄存器内容被破坏,导致上层函数的计算结果出错。

点评

好的,经过检查,是由于8位的C51不支持直接XRL R4,#0x80,所以在移植到32位平台时没有删除掉导致的 目前存在这个问题的FPNEG和fabs函数均已修改为非操作A寄存器实现 [attachimg]125911[/attachimg] [attachimg]1  详情 回复 发表于 2025-12-22 20:56
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:111
  • 最近打卡:2026-01-09 00:32:58

21

主题

184

回帖

1749

积分

金牌会员

积分
1749
发表于 2025-12-22 18:17:12 | 显示全部楼层
C版本
minimp3.c直接替代一楼项目中的minimp3.asm即可。
minimp3.rar (15.57 KB, 下载次数: 47)
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-1-9 21:07 , Processed in 0.116234 second(s), 90 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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