2009年5月28日 星期四

AMR Plugin For Winamp & foobar2000

好吧,我快要叛变了。又写了个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.2.1_20100924.zip

2009-5-28 oAMRpW v0.1
支持AMR-NB IF1格式
可拖放,可显示文件时长
播放损坏的文件时可能crash
不支持Winamp示波器及相关插件
2010-4-15 oAMRpF v0.2
基本功能跟Winamp版一样,多了示波功能
AMR-NB IF1最后一个frame的实际长度有可能小于应当值,不知道合不合规范,懒得查了
2010-9-24 oAMpF v0.2.1
忘记具体改了什么,好像是一点bug的说。这一版的foobar插件已经比较完善了,起码我自己用没遇到什么问题。

8 评论:

  1. 我使用foobar 1.1.5
    然後放入這個amr 插件
    撥放我的motorola手機作出來的amr
    可是不能撥放?
    上頭寫著
    "Unable to open item for playback (Unsupported format or corrupted file)"
    我看了一下開頭 寫著#!AMR 所以照理說應該跟您說的一樣 滿奇怪的

    但是kmp是可以撥放的

    回复删除
  2. 附上不能撥放的amr文件
    http://www.megaupload.com/?d=81FVQMGJ

    回复删除
  3. 不好意思,去年就有了v0.2.1,可我忘記放上來了…

    你下新的試試看,在我的foobar v1.1.2里一切正常。只是聽不太清你錄的是什麽,AMR音質還是太次了的說。

    回复删除
  4. 謝謝您 可以撥放了:D

    錄的是福山芳樹的live演唱會,我一直很想在電腦上用foobar聽XD

    回复删除
  5. 表客氣,這個東西我兩年前就開始弄,但搞不好你是除了我之外第一個用戶的說…

    回复删除
  6. 不敢當XDD
    我會把他推廣的 到時候會很多人會用他的

    順道請問一下 您知道大宇dos遊戲的音樂檔 *.rix
    在foobar裡 是否有插件可用呢?
    因為我不想灌解碼器在系統裡..

    回复删除
  7. I was looking for a amr plugin for foobar... thanks so much.

    回复删除