尋找一些有關Android上音頻播放的幫助。我們有一個OpenGL應用程序(Java + C++),現在我們想播放聲音效果。玩家應該允許在玩時修改回放速度和音量。 可能是OpenSL或Audiotrack。多個音頻播放器(Java或C++),可以實時修改
第一個問題?是否有任何免費或商業庫/包裝,可以做的事情嗎?(可能是Java或本地)
..,如果沒有,我會解釋一下我們迄今所取得的,我們遇到問題。
我們用AudioTrack實例創建了MusicPlayer類(擴展了AsyncTask)。在activity的onResume()中,我們創建了5個實例,並在線程池中執行它。在任務的doInBackground()我們有一個運行循環檢查狀態變化,加載文件和寫入緩衝區。在JNI中,我們有單例存儲事件隊列並每10毫秒將它們發送給java一次。它以某種方式起作用,但距離被接受還有很遠的距離。我們遇到以下問題:
- 當文件開始播放時,我們可以聽到開始時出現短暫的噪音。像點擊或其他。
- 即使我們沖洗或釋放AudioTrack似乎聲音隊列播放(特別是當需要改變緩衝區快)
- 我們不能創造MODE_STREAM
- 當我們修改的AsyncTask的局部變量CHANGE_RATE和速率循環它應該調用audioTrack.setPlaybackRate(RATE)。它確實,但沒有任何反應。
我曾經用iOS編寫Obj-C,有很多「隨時可用」的解決方案(例如cocoacontrols)。從來沒有想過在Android上處理聲音將是這樣的噩夢; /任何幫助將不勝感激:)
_「我們無法在MODE_STREAM中創建循環」_爲什麼不能?你正在填寫你寫入'AudioTrack'的緩衝區。如果您一次又一次地使用相同的PCM數據填充緩衝區,則會一遍又一遍地聽到相同的PCM數據。 – Michael
@Michael謝謝你的迴應。以類似的方式完成它 - 現在可以工作:)我們還刪除了幾個第一個字節,而現在我們沒有點擊。主要問題是我們將整個文件一次發送到緩衝區。現在我們將其拆分爲3072b個零件,現在可以。 – rafalczuj