2011-09-13 47 views
2

我正在使用AudioTrack的額外線程播放先前在其他活動中記錄過的波形文件。Android AudioTrack僅在前2秒後播放,然後停止

當我開始播放時,我得到下面的輸出中的logcat:

09-13 09:13:13.207: WARN/Archive(1066): audioplayThread is running..., state is: READY 
09-13 09:13:21.187: WARN/Archive(1066): wave file /mnt/sdcard/myrecording/myrecording_3_12-09-2011_14-14.wav 
09-13 09:13:22.582: WARN/Archive(1066): audioPlayer bufferSize 4090 
09-13 09:13:22.582: WARN/Archive(1066): audioPlayer wave length 206432 
09-13 09:13:22.601: DEBUG/AudioHardware(75): AudioHardware pcm playback is exiting standby. 
09-13 09:13:22.601: DEBUG/AudioHardware(75): openPcmOut_l() mPcmOpenCnt: 0 
09-13 09:13:22.683: WARN/AudioFlinger(75): write blocked for 82 msecs, 1 delayed writes, thread 0xcb08 
09-13 09:13:24.816: WARN/Archive(1066): playbackHeadposition is: 49591 
09-13 09:13:24.816: WARN/Archive(1066): audiostate is: 3 
09-13 09:13:26.089: WARN/AudioTrack(1066): obtainBuffer() track 0x298b18 disabled, restarting 
09-13 09:13:27.214: WARN/AudioTrack(1066): obtainBuffer() track 0x298b18 disabled, restarting 
09-13 09:13:28.332: WARN/AudioTrack(1066): obtainBuffer() track 0x298b18 disabled, restarting 
09-13 09:13:29.457: WARN/AudioTrack(1066): obtainBuffer() track 0x298b18 disabled, restarting 

... 
+0

您還沒有提出任何問題。 – Karu

+0

這需要更多信息。您的AudioTrack設置爲播放什麼模式,STREAM還是STATIC?如果它在STREAM中,您是否有一個正在寫入更多數據的線程?聲音數據總體有多大? – fluffy

回答

3

我剛纔看到的logcat的:obtainBuffer()跟蹤0x298b18禁用,重啓.. 就是說:你沒有音頻數據和輸入音頻流已經停止,所以緩衝區必須等待音頻流進入。我認爲你應該檢查輸入流和讀取方法。您必須確保您已連續讀取音頻數據。

+1

感謝您的回覆。在用不同的參數進行大量試驗並讀取了幾乎每個音頻線程的信息之後,我最終選擇不使用AudioTrack。早期的AudioTrack代碼工作,然後它沒有。它讓我感覺AudioTrack類不是那麼可靠。最後,我使用MediaPlayer進行音頻播放。也許它有更多的開銷,但它是可靠的。 – felix

+3

我不會說它不可靠,但你必須採取更多的照顧與AudioTrack。 – HannahMitt

+0

AudioTrack不適合心臟病。將字節反饋到它是非常容易的,導致您遇到的錯誤。我還沒有想出解決這個問題的辦法。 –

0

我以前遇到同樣的問題。我使用了與Android的媒體播放器相對應的vitamio包,並且有更多的音頻支持。嘗試添加此代碼到您的清單:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

我希望這有助於。

0

當書面樣本數量不能被信道數量整除時,我觀察到同樣的問題。

例如:

信道數:2

mAudioTrack.write(緩衝液,0,75);

相關問題