2010-02-25 39 views
12

簡短版本:什麼是將數據編碼到MP3(最好是在 AAC/Ogg/WMA中)編碼到Java數組或ByteBuffer中那我可以 操縱?在Android上解碼編碼的音頻數據(MP3等)而不播放它

我正在制定一個程序,該程序已經放緩並加速了作爲其功能之一的 聲音文件。這適用於WAV文件, 這是一個標題加上確切的二進制數據,需要發送到 揚聲器,現在我需要實現它的MP3(理想情況下,這 也將支持AAC,Ogg和WMA ,但由於這些不是必需的,所以這些格式不太流行 格式)。 Android不公開接口 ,但不播放MP3解碼,所以我需要創建 接口。

三個選項展示自己,雖然我對其他人開放:

1)寫我自己的解碼器。我已經有一個功能框架探測器 ,我是希望使用選項(3),而現在只需要 實現霍夫曼解碼錶。

2)使用JLayer或等效的Java庫來處理 解碼。我並不完全清楚許可證分支 在這裏。

3)連接到libmedia庫/ MediaPlayerService。這是SoundPool所做的,並且該服務的使用量使我相信 雖然它正式不穩定,但實現不會在任何地方進行 。這意味着編寫JNI代碼來連接服務,但是 我發現那是一個很深的兔子洞。在表面上,我無法與SP <>模板 。

+0

這個問題的任何運氣? – twk 2010-04-20 23:05:57

+0

您是否成功解碼音頻數據?如果是這樣,你是怎麼做到的? – 2011-01-12 06:33:25

回答

1

我是用libmad和NDK做到的。 JLayer是緩慢的方式,媒體框架是一個移動的目標。你可以找到信息和源代碼在http://apistudios.com/hosted/marzec/badlogic/wordpress/?p=231

+1

這似乎是一個有限的解決方案,因爲libmad根據GPL授權;這意味着要使用它,我需要在GPL下授權我的應用程序,這不是我計劃做的事情(聽起來你可能在同一條船上)。 這是什麼原因使JLayer吸引人的地方:這是LGPL許可。 Android是Apache許可的,所以你真的很清楚。我的顯著部分懷疑媒體框架是一個移動的目標:在這一點上,它是根深蒂固到如此多的更高級別的對象(MediaPlayer的和的Soundpool,大多),我懷疑他們將被刪除。 – 2010-03-02 19:43:01

1

我還沒有嘗試過,但mp3transform是LGPL。

+2

android不支持javax.sound。這個庫使用它,所以它不適用於android – Adem 2013-02-17 10:51:34