2011-09-13 3 views
2

AudioTrack에 추가 스레드를 사용하여 이전에 다른 활동에서 녹음 한 웨이브 파일을 재생하고 있습니다. 내가 재생을 시작하면Android AudioTrack은 처음 2 초 만 재생 한 다음 중지합니다.

, 나는 로그 캣에 다음과 같은 출력을 얻을 :

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

가 난 그냥 로그 캣을 보았다 : obtainBuffer() 트랙을 0x298b18 장애인, 다시 시작 ... 말을하는 것입니다 : 당신이 없어를 오디오 데이터 및 입력 오디오 스트림이 중지되었습니다. 버퍼는 오디오 스트림을 기다려야합니다. 나는 당신이 inputstream과 read 메소드를 점검해야한다고 생각합니다. 계속 오디오 데이터를 읽었는지 확인해야합니다.

+1

답장을 보내 주셔서 감사합니다. 마침내 AudioTrack을 사용하지 않기로 결정했습니다. 다른 매개 변수로 많은 것을 실험하고 stackoverflow에서 거의 모든 오디오 스레드를 읽은 후입니다. 이전 AudioTrack 코드가 제대로 작동하지 않았다. 그것은 AudioTrack 클래스가 그다지 신뢰할 수 없다는 느낌으로 저를 떠났습니다. 마지막으로 오디오 재생을 위해 MediaPlayer를 사용했습니다. 어쩌면 오버 헤드가 조금 더 많을 수도 있지만 신뢰할 만합니다. – felix

+3

신뢰할 수는 없지만 AudioTrack으로 더 많은주의를 기울여야합니다. – HannahMitt

+0

AudioTrack은 희미한 심장을위한 것이 아닙니다. 바이트 입력을 퍼지 (fudge)하는 것이 매우 쉽기 때문에 발생하는 오류가 발생합니다. 아직이 문제에 대한 해결책을 찾지 못했습니다. –

0

이전에도 같은 문제가있었습니다. 나는 안드로이드의 Media Player에 대응하는 비타민 (vitamio) 번들을 사용했고 더 많은 오디오를 지원합니다. 매니페스트에이 코드를 추가하십시오 :

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

을 나는이 도움이되기를 바랍니다.

0

작성된 샘플 수가 채널 수로 나눌 수없는 경우에도 동일한 문제가 발생했습니다. 예를 들어

의 채널

: 2

mAudioTrack.write (버퍼, 0, 75);