health 发表于 2025-12-22 10:09
mp3文件不到30KB,时长大约7秒,循环播放。实测可行。
如果使用I2S-DAC播放应该有更好的音质。
不知道采样率是多少?
解码使用汇编,比较难看懂,能否使用C解码,
可以使用较低的采样率比如8KHz采样,
可以适配到STC32G144K246,这个跑起来是AI8051U的 N倍以上的速度。
使用C解码,有更多的人可以想办法优化速度。
梁工 发表于 2025-12-22 10:22
实测可行。如果使用I2S播放应该有更好的音质。
不知道采样率是多少?
解码使用汇编,比较难看懂,能否使 ...采样率16KHz。
开始就是用C编译的,但是性能满足不了最低要求。
先把C编译成asm,再优化asm程序才勉强达到流畅。
稍后我放上原始c文件。
用软浮点库纯CPU计算的话,解码时间与播放时间有十倍以上的差距,基本不用考虑。
启用TFPU浮点库,速度成倍提升,但是“ai8051u_32_tfpu.lib”中个别函数实现上有bug,
导致最终输出数据不对。
health 发表于 2025-12-22 10:45
采样率16KHz。
开始就是用C编译的,但是性能满足不了最低要求。
先把C编译成asm,再优化asm程序才勉强达到 ...
好的,有C文件,可以优化速度的。
health 发表于 2025-12-22 10:45
采样率16KHz。
开始就是用C编译的,但是性能满足不了最低要求。
先把C编译成asm,再优化asm程序才勉强达到 ...
如有问题,我们安排人来完善
health 发表于 2025-12-22 10:45
采样率16KHz。
开始就是用C编译的,但是性能满足不了最低要求。
先把C编译成asm,再优化asm程序才勉强达到 ...
方便问一下,ai8051u_32_tfpu.lib的浮点库,具体是哪些函数实现上有bug?我看看能否从库中修复一下这个问题
王昱顺 发表于 2025-12-22 17:12
方便问一下,ai8051u_32_tfpu.lib的浮点库,具体是哪些函数实现上有bug?我看看能否从库中修复一下这个问 ...
浮点数取反的函数
health 发表于 2025-12-22 17:27
浮点数取反的函数
好的,我检查一下,可以暂时使用浮点乘法,乘以-1代替,我测试一下
王昱顺 发表于 2025-12-22 17:56
好的,我检查一下,可以暂时使用浮点乘法,乘以-1代替,我测试一下
C?FPNEG
浮点数取反就是将最高位取反。
keil浮点库,前面几行是排除特殊值,0和NaN不做处理,这里不重要。
对其它普通浮点数,通过一句
XRL R4, #0x80
来实现最高位取反。
tfpu库使用A累加器中转了一下,
MOV A,R4
XRL A, #0x80
MOV R4, A
实现最高位取反的效果没问题,但是影响了A寄存器的值。
调用者如果A正在使用,调用FPNEG后A寄存器内容被破坏,导致上层函数的计算结果出错。
C版本
minimp3.c直接替代一楼项目中的minimp3.asm即可。