2011-01-12 55 views
5

我處於開發此應用程序的非常初級階段,但正在研究它,我已經遇到了問題。我需要能夠向後播放音頻文件(您知道要顯示隱藏的消息;))。我沒有在Android上使用音頻的經驗,不知道這是否可能。Android中的反向音頻文件

我發現它解決了在Java(Click Here For Question

的問題,但這種利用其Android不支持javax.sound庫放在這裏的問題。我需要這個庫來解決這個問題,還是有另一種方法來反轉音頻文件?

+0

Hi @SamRowley您是否用上述算法實現了您的目標?我將第一個44字節的標題完全從原始文件複製到反向音頻文件,並且無法播放wav音頻?我使用sox和反向音頻並檢查44字節的標題不完全是什麼?請如果你能幫助我的任何建議,我將不勝感激 – 2016-01-26 22:52:14

回答

5

一個典型的WAV文件由一個44字節的頭部和實際的樣本值組成。 「幀」的大小取決於WAV文件的屬性:立體文件和每個樣本16位將具有4個字節的幀大小(左側樣本爲2個字節,右側樣本爲2個字節)。

因此,在代碼中,您可以通過創建與原始大小相同的字節數組來創建第二個WAV文件。將原始的44字節標題複製到副本中,然後從最後一個幀開始遍歷原始幀,然後前進到第一個幀。將每個幀複製到複製數組中的反向位置(即,最後一個原始幀將在頭部之後立即複製到複製數組中;倒數第二幀在第一幀之後複製等)。然後只需播放反轉的文件。

所以你不需要javax.sound庫來做到這一點 - 你只需要能夠複製和操作字節。僅供參考,並不是所有的WAV文件都是這樣的「規範」(規範意味着44字節的頭文件加樣本值,除此之外別無其他)。 WAV格式實際上是一種RIFF格式,這意味着您理論上需要對樣本值進行更復雜的提取。在實踐中(尤其是如果你自己創建WAV文件的話),你通常可以用一種更簡單的方法逃脫,正如我在這裏所描述的。

注意:如果您的聲音是MP3文件,則反轉是一項更爲複雜的任務,因爲樣本數據不會作爲樣本存儲在MP3文件中。如果您使用的是MP3,則一種方法是將其轉換爲WAV,然後反轉WAV文件。

+0

我通過使用MediaRecorder從麥克風捕獲音頻來創建WAV文件,所以我猜這樣會很好嗎?我將如何將從SD卡保存的文件轉換爲字節數組並複製44位標頭?感謝您的第一個答案,迄今爲止這對我有幫助,並且我理解這個概念。 – SamRowley 2011-01-13 11:20:33