好吧,我快要叛变了。又写了个foobar2000的AMR插件,下载链接等在文末。
KMplayer就可以放AMR,但启动太慢了。foobar2000早就有相关插件,问题是歌词外挂支持不良。惦记了很久Winamp的AMR插件一直没出现,今天终于自己写了一个。
(从*UIX系统来的不算,命令行工具不算,Winamp是我现在还常用的辈分最老的程序了,总觉得有那么点英雄迟暮的味道。)
AMR由rfc3267定义,网上最容易找到的实现是3GPP发布的3GPP TS 26.104(AMR-NB)和3GPP TS 26.204(AMR-WB)。
由于写这个插件就是为了播放手机录制的音频文件,而手机录制的音频文件全部都是AMR-NB IF1格式,所以这个插件目前只实现了AMR-NB IF1的解码功能。ETSI和IF都没有文件头,应该不是设计给独立文件用的。至于AMR-WB,以后遇到了再说吧。
AMR-NB IF1格式很简单,头部为6个字节的标识信息"#!AMR\n",余下部分为若干个frame。每个frame第一字节的前4位决定了frame的字节长度(包括首字节),如1表示13,2表示14,3表示16,有个表可以查。
AMR-NB的目标码率只有一种,8kHz、13bit、单声道。而且每frame表示的数据量也是一定的,即160次采样的数据,20ms长。
因为AMR-NB格式没有任何的索引信息,所以不扫描整个文件就无法得知文件时长,这也是KMplayer播放AMR-NB时为什么不能拖动的原因。
Winamp - in_amr_v0.1_20090902.zip
foobar - foo_input_amr_v0.4.0_20220901.zip
- 2022-9-1 oAMpF v0.4.0
- Update with SDK v20220810
- Tested with fb2k v2.0b3
- Add x64 support
- 2017-9-18
- Box的下载链接挂掉了,换成了Google Drive,也不知道能用多久…
- 2012-8-13 oAMpF v0.3.1
- 增加单声道AMR-WB支持,改了几个bug。
- 2010-9-24 oAMpF v0.2.1
- 忘记具体改了什么,好像是一点bug的说。这一版的foobar插件已经比较完善了,起码我自己用没遇到什么问题。
- 2010-4-15 oAMRpF v0.2
- 基本功能跟Winamp版一样,多了示波功能
- AMR-NB IF1最后一个frame的实际长度有可能小于应当值,不知道合不合规范,懒得查了
- 2009-5-28 oAMRpW v0.1
- 支持AMR-NB IF1格式
- 可拖放,可显示文件时长
- 播放损坏的文件时可能crash
- 不支持Winamp示波器及相关插件