找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1669|回复: 0
打印 上一主题 下一主题
收起左侧

STM32下几种无损音乐格式比较

[复制链接]
跳转到指定楼层
楼主
ID:780108 发表于 2021-8-7 17:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
常见的无损音乐有好几种(不讨论类似mp3(爱梦屁三)之类的有损压缩格式)

WAV(娃夫) 无损非压缩 最早由microsoft(卖客烧福特)定义 常见的数字无损音乐都是以此为标准 压缩和解压
FLAC(佛勒啊测) 这个格式很常见 压缩和解压的速度都不错 免费 stm32下有牛人做出了解压程序 我自己是用FLAC(佛勒啊次)的原生代码改的 效果很好
APE(啊屁) 这个格式也很常见 不过现在大大落后了 STM32上处理这个垃圾货色 基本呵呵
ALAC(啊拉客) 这个是Apple(矮破)家的垃圾货色 破玩意儿 压缩比 和速度都很次 Apple(矮破)家所有的东西一个鸟样 辣鸡 不讨论


下面隆重推出两款免费的 开源的 无损格式
TTA True Audio(特特啊 楚奥丢)
https://sourceforge.net/projects/tta/files/tta/

这个格式的文件非常优秀 压缩只有一个级别 支持8字节密码(两个CRC16) 哈哈 也支持流压缩 所以 假定你给你小女盆友录一段的话 别人没密码是听不到的 只有沙沙声,而且密码是初始化一次即可(即 不设密码的话是8个0x00) 并不影响 压缩和解压的速度

WAVPACK(娃夫怕客)
(请手工把点替换成.)
www点wavpack点com/downloads.html

这个格式的文件及其优秀 共四种压缩级别 fast(罚死特) default(得佛尔特) high(嗨) very-high(歪芮嗨) 而且支持Hybrid(嗨补芮得) 无损/有损混血模式  不过这里只讨论无损

做好解压程序后 FLAC + WAVPACK + TTA True Audio

在用STM32F103+0 SRAM 72Mhz  / STM32F407+1M SRAM 168Mhz / STM32F746+8M SRAM (受限于SRAM(四日啊摸) 的速度限制 200Mhz)  三款板子比较

最终结果如下:
STM32F103 超频到80后 只可以正常播放 WAVPACK  fast 44khz 16bits

TTA True Audio 和  FLAC  卡 没法播放


STM32F407

WAVPACK fast  96khz 24bits

TTA True Audio 96khz 24bits  

  FLAC 96khz 24bits 0级

STM32F746

WAVPACK  very-high  96khz 24bits

TTA True Audio  96khz 24bits  

FLAC  96khz 24bits 8级

顺便说一下 我用的是正版STM32F746迪斯科(坑爹版)  这个片子用的是WM8994 我找遍了萨拉热窝也没有找到192Khz (需要打开Ultrasonic 优特拉锁你客 模式)  的驱动程序 所以虽然 相信 STM32F746 可以播放192khz 24bits的WAVPACK+TTA True Audio 但是没法测试
-------------------------------------------------------------------------------
这三款格式的压缩比差不多 仅就压缩比作比较的话 TTA True Audio是最好的 大多数情况下文件比 WAVPACK  very-high 和 FLAC 8级小   

WAVPACK + fast 的文件常常比TTA True Audio大3%-8% 尤其是24bit的


解压速度
WAVPACK > TTA True Audio > FLAC
注意 这里说的是在STM32解压的情况 ,PC上三者都有SSE或者汇编的部分 一般一首5分钟左右44khz 16bits的音乐 都只需要不到两秒钟 即压缩完成 (FLAC是最慢的)

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
做完解压后 顺便做了一个录音程序直接存储WAVPACK 不过这个东西很好玩 上述三款格式都提供了CRC FRAME(测啊测 夫软木)校验 wavpack 的crc因子从头文件就开始了 在total_samples(头陀桑扑了)未知的情况下 只能在头文件给一个默认值 然后最后修改这个值

所以后面所有的crc值全错 导致录出来的只能在不校验crc的播放器上播放 好比VLC(微了测)这种比较矫情的播放器软件就放不了


音频解压移植到类似STM32资源比较吃力的机器上的一点心得:
1: 墙裂推荐一款编译器 Tiny C Compiler (太腻 色 康拍了)

(请手工把点替换成.)
bellard点org/tcc/

这个世界上最小的C编译器 基于ANSI C (昂西 色) 编译速度太特么快了 对付上面几种 基本上敲回车就搞定 一般来说 Tiny C Compiler能通过的编译 可以直接用到STM32上

2:尽量去掉校验 CRC MD5这些 解压速度大大加快
3:STM32上面对解压速度影响最大的是最后数据输出
WAVPACK和 TTA True Audio都是最后 输出 的格式直接可以存为 WAV , FLAC还要做一道手脚 因为FLAC是分声道输出的 (这个也是为啥FLAC在STM32上最卡的原因)
所以在输出的时候 最好不要像网上大多数例子一样 对输出的数据再加工一次

最终推荐顺序 WAVPACK > FLAC > TTA True Audio

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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