2012-12-27 26 views
1

我有用於播放混合音頻文件的SoundPool []。 Soundpools一起玩沒有任何問題,它非常有效! 非常簡短:Soundpool到文件

private SoundPool[] sound = new SoundPool[C.ROWS]; 
    // every sound is initizialized with a load() 
    // and when asked... 
public void play(int row, int variation) { 
    if (mute[row]) return; 
    if (variation != 0) 
     sound[row].play(variation_scheme[row][variation-1], volume[row], volume[row], PRI, 0, 1f); 
} 

這只是顯示! :) 我不放其他代碼,因爲一切工作很好,這不是一個真正的問題。 我的問題,反而是:

我怎麼可以在應用程序的整個輸出重定向,而不是(或除了)音箱的音頻到一個文件,? 換句話說,有兩個主要的解決方案: 1.我如何指示AudioPool將聲音播放()到文件而不是音頻設備? 2.或者如何將我的應用(甚至是所有手機)的所有音頻輸出重定向到文件?

謝謝。

+2

對於問題的第2部分,答案是「你不能」。或者更確切地說,您無法爲手機上播放的所有音頻做到這一點。爲了僅保存您自己的應用程序播放的音頻,基本方法是將PCM數據寫入文件(或編碼器,該編碼器將數據寫入文件)並行寫入AudioTrack或通過的Soundpool。這就要求你的音頻已經被解碼爲原始的PCM,並且如果你同時播放了多個聲音,那麼在將它們寫入磁盤之前,你還必須注意混合它們。 – Michael

+0

謝謝邁克爾,至少現在我知道我在懷疑什麼。你知道是否有免費的編碼/管理/混音音頻庫嗎?是的,我使用wav文件,所以它是原始的PCM,但它不是那麼容易...例如混合音頻文件我懷疑它不只是添加字節。 –

回答

0

我發現如何記錄音頻的唯一方法是記錄正在按下的聲音的每個信息,例如持續時間(使用mediaplayer),soundID,毫秒時間戳以播放毫秒,音量,比率(if需要)。然後將它們寫入文本文件(內部或外部)供以後使用。創建一個回放系統,將保存的信息從文本文件中解碼出來,並將其組織在一些陣列或hashmaps中,並通過某種回放方法回放,例如使用處理程序和postDelay播放聲音和所需時間,然後插入必要的數據從陣列或散列圖播放聲音。

通過這種方式,您可以擁有自己的數據文件來播放聲音序列。