2010-03-25 152 views
2

我想在我的Android 1.6 HTC設備上使用以下代碼(AudioTrack)播放更大尺寸的音頻WAV文件(它大於20 MB) 。但是,一旦執行讀取,寫入和播放,我就發現設備崩潰。但相同的代碼工作正常,播放較小的音頻wav文件(10kb,20 kb文件等)非常好。 P.S:我應該播放PCM(.wav)緩衝聲音,這就是爲什麼我在這裏使用AudioTrack的原因。Android:播放更大尺寸的音頻WAV聲音文件會產生崩潰

儘管我的設備的內存較小,但是如何以字節讀取較大的音頻文件字節並播放聲音以避免由於內存限制而導致崩潰。

private void AudioTrackPlayPCM() throws IOException 

{

字符串文件路徑= 「/sdcard/myWav.wav」; // 8 kb文件

byte [] byteData = null;
File file = null;

file = new File(filePath);

byteData = new byte [(int)file.length()];

FileInputStream in = null;

嘗試{= {0} = new FileInputStream(file); in.read(byteData); in.close();

}趕上(FileNotFoundException異常E) {

// TODO自動生成的catch程序塊 e.printStackTrace();

}

INT intSize = android.media.AudioTrack.getMinBufferSize(8000,AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_8BIT);

AudioTrack在新= AudioTrack(AudioManager.STREAM_MUSIC,8000,AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_8BIT,intSize,AudioTrack.MODE_STREAM);

at.play();

at.write(byteData,0,byteData.length);
at.stop();

at.release();

}

有人能指導我,請打AudioTrack代碼爲大尺寸WAV文件?

回答

0

你intSize將會給init AudioTrack所需的最小緩衝區大小,請嘗試使用這個倍數,以創建一個更大的緩衝

AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, 
AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_8BIT, intSize*10, 
AudioTrack.MODE_STREAM); 
+0

這個沒有成功。 – Getsy

+0

你碰到什麼錯誤? –