梁工 发表于 2025-12-22 10:22:33

health 发表于 2025-12-22 10:09
mp3文件不到30KB,时长大约7秒,循环播放。实测可行。
如果使用I2S-DAC播放应该有更好的音质。
不知道采样率是多少?
解码使用汇编,比较难看懂,能否使用C解码,
可以使用较低的采样率比如8KHz采样,
可以适配到STC32G144K246,这个跑起来是AI8051U的 N倍以上的速度。
使用C解码,有更多的人可以想办法优化速度。

health 发表于 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,
导致最终输出数据不对。

梁工 发表于 2025-12-22 13:52:10

health 发表于 2025-12-22 10:45
采样率16KHz。
开始就是用C编译的,但是性能满足不了最低要求。
先把C编译成asm,再优化asm程序才勉强达到 ...

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

神农鼎 发表于 2025-12-22 17:07:32

health 发表于 2025-12-22 10:45
采样率16KHz。
开始就是用C编译的,但是性能满足不了最低要求。
先把C编译成asm,再优化asm程序才勉强达到 ...

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

王昱顺 发表于 2025-12-22 17:12:07

health 发表于 2025-12-22 10:45
采样率16KHz。
开始就是用C编译的,但是性能满足不了最低要求。
先把C编译成asm,再优化asm程序才勉强达到 ...

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

health 发表于 2025-12-22 17:27:54

王昱顺 发表于 2025-12-22 17:12
方便问一下,ai8051u_32_tfpu.lib的浮点库,具体是哪些函数实现上有bug?我看看能否从库中修复一下这个问 ...

浮点数取反的函数

王昱顺 发表于 2025-12-22 17:56:33

health 发表于 2025-12-22 17:27
浮点数取反的函数

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

health 发表于 2025-12-22 18:00:50

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


C?FPNEG


health 发表于 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寄存器内容被破坏,导致上层函数的计算结果出错。

health 发表于 2025-12-22 18:17:12

C版本
minimp3.c直接替代一楼项目中的minimp3.asm即可。
页: 1 [2] 3 4 5
查看完整版本: MP3解码播放流畅@Ai8051U核心板-擎天柱,8051U移植minimp3解码库