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.3.1_20120813.7z

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示波器及相关插件

27 条评论 :

匿名 说...

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

但是kmp是可以撥放的

匿名 说...

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

oCameLo 说...

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

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

匿名 说...

謝謝您 可以撥放了:D

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

oCameLo 说...

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

匿名 说...

不敢當XDD
我會把他推廣的 到時候會很多人會用他的

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

ColdFire 说...

I was looking for a amr plugin for foobar... thanks so much.

魏鑫 说...

太感谢了!

笔戎 说...

我使用MIUI系统的录音功能,经测试,电话录音的AMR文件,可以使用你的foobar插件来播放,但直接录音也是AMR文件,却不能用你的插件来播放。
我上传了一个test.amr给你测试:
https://www.evernote.com/shard/s1/sh/bb63770c-23e4-41d8-ac03-8e3a80549343/09c9a9ff3e379f3385929f537c945707/res/d6616640-46b4-488e-8370-dbfd8d0adc1e/test.amr

这个文件是可以在evernote和手机里播放的,但你的插件播放不了。

oCameLo 说...

你这个文件是AMR-WB格式的(用写字板打开就能看到),目前的插件的确不支持。加上这个功能在代码方面问题不大,只是fb2k的sdk需要visual studio这种个头很大的东西来编译,我机器上现在又没有。我尽快吧,搞定了会去你那告诉你一声的。

笔戎 说...

谢谢你,我主要是想用foobar来把amr转换为mp3或wav,加以编辑。

不知道小米的程序员为何选用两种格式,电话录音用nb,普通录音用wb

oCameLo 说...

你如果只是想转换成wav,那potplayer就可以。

笔戎 说...

我下了个PotPlayer64_20120726,但只能播放这种amr,没有找到选项来转换为wav,请指教。

又或,你的插件什么进修可以更新?

oCameLo 说...

PotPlayer毕竟是个播放器,所以这个功能藏得有点深。右键、音频、语音录制、录制音频,设置好并选中播放开始时自动录制,然后播放AMR即可。

你只是想转成WAV的话,PotPlayer肯定可以的,你试试先吧。

笔戎 说...

原来是这样。

不过,我用的是1.5.33921
选择播放开始自动录制,似乎无效,播放AMR,不会录制,需要在录制里,点击开始,再播放,才录制。可能这个功能,就是这样用吧。

THX

oCameLo 说...

更新了,有兴趣的话试试吧。

holy834 说...

Failed to load DLL: foo_input_amr.dll
Reason: The specified procedure could not be found.
咋回事?

holy834 说...

升级了下foobar搞定了, 这个插件对我很重要, 多谢!

水水 说...

感谢成功了^^

Sabercon 说...

感谢
不发布到fb2k的官网上么?也方便获取更新(虽然觉得不可能会继续更新了...)

oCameLo 说...

这东西确实没什么可更新的了,本来说把多声道文件的支持也加上,结果找了半天也没找到个sample。

匿名 说...

不能拖动?foobar 1.2.1b1+foo_input_amr_v0.3.1_20120813

匿名 说...

https://github.com/unjello/foo_input_amr
http://angelo.scene.pl/download,foo_amr_1_1_1.exe

这个可以拖动播放

oCameLo 说...

1.2.1b1+0.3.1,我这里一切正常。你再试试吧,如果还是不行,把不能拖动的文件给我,我去查查是什么问题。

匿名 说...

感謝,終於可以讓foobar播放AMR

匿名 说...

Not working anymore

Didn't find other solution

匿名 说...

fb2k v1.3.15 with foo_input_amr v0.3.1, no problem here.