2011-12-02 41 views
3

從這個tutorial慢MP3解碼在Android

不知怎的,我基於一直對MP3解碼在Android中,它需要1分鐘以上至解碼持續時間4:30歌這是在我的情況完全不可接受的。我一直在試圖找出問題所在,尋找提高速度的方法。在互聯網上搜索了幾天,仍然無法找出原因,因爲資源非常有限。我想我完全陷在這裏,因爲我從研究中得不到任何東西。

有人能指出關於在Android中處理MP3文件的任何信息嗎?我使用Libmad解碼MP3文件,並使用NDK將其移植到Android。也許有人可以指出任何替代MP3解碼。我很感激任何關於它的信息,非常感謝。

+0

我是新來的Android和我的工作在我的Android應用串聯MP3文件。你能幫我解碼兩個或多個mp3文件並編碼成一個文件嗎?我搜索了很多,但沒有發現有用的東西。你說你已經在android中完成了mp3編碼和解碼。你能分享代碼片段嗎?這將是一個很大的幫助。 Thanx – Harsh

回答

1

您要找的所有答案都已經在教程頁面上。

正如他在文章中解釋了所花費的時間似乎是正常的:47分鐘長 歌曲,在192kbps的編碼:

我以一首「分裂」的工具,它是一個6進行了測試。該文件的權重爲9.31mb,相當大的 對於mp3 imo ...沒有任何優化(拇指代碼,-O0, -DFPM_DEFAULT == libmad中的標準定點數學,沒有arm彙編優化的fp數學)解碼完成檔案在我的 里程碑上需要184秒。

然後他解釋了他是如何優化它的。你應該按照相同的步驟:

聖潔的狗屎,蝙蝠俠!如果我消除buffer.get(樣本)呼叫 下降到44秒!難以置信。現在我仍然認爲這是方式 減慢,所以我開始添加優化。我做的第一件事是 編譯成直臂,而不是拇指代碼。你可以告訴NDK 工具鏈由Android.mk文件放上這樣做:

LOCAL_ARM_MODE := arm 

啓用此功能解碼需要36秒。我做的下一件事是通過-O3作爲CFLAG的 積極優化。這削減了只有2更多 秒,所以沒有寫回家。最後的優化是 libmad特定。我鏈接上面的config.h文件沒有定義 定點數學模式libmad應該使用。現在,當您在libmad的fixed.h處看到 時,您可以在那裏看到安靜點 數學的一些選項。還有一個專門用於arm處理器的選項, 使用一些漂亮的小臂裝配代碼來完成繁重的工作。你可以通過將-DFPM_ARM作爲CFLAG傳遞給你。現在奇蹟了! 我現在下降到20秒解碼407秒的MP3編碼 音頻。這大約是實時20倍,這完全符合我的要求。我選擇的歌曲是 必須在我的下一個音頻遊戲項目中處理的歌曲長度譜的最後端。用戶使用的歌曲將被處理一次,並在我的書中等待20秒。

而最重要的部分出現了:

恐怕作爲 這是一個有點亂,我將不會釋放移植音頻框架的來源和需要一些清理工作。

而且許多人在評論咆哮關於圖書館和說,他們放棄了贊成的libmpg123

+0

我確實遵循了他所做的一切,沒有任何改變。我遵循了一切,因爲網絡中沒有其他參考,所以本教程是我唯一的來源。我甚至比他更快地使用Android,所以技術上解碼應該在我的機器上更快。 –

+0

補充說明,他和我的情況略有不同。他的案例似乎是獨立的音頻應用程序,而我的應用程序是一個子應用程序。我不確定這是否會影響我的處理速度。 –

+1

也許你可以嘗試增加緩衝區大小,並檢查它是否有所作爲。 – Caner