2

我正在尝试在我的Android 1.6 HTC 设备上使用以下代码(AudioTrack)播放更大尺寸的音频 wav 文件(>20 mb) ,该设备基本上具有较少的内存。但是我发现设备在执行读取、写入和播放时立即崩溃。但是相同的代码可以正常工作,并且可以很好地播放较小的音频 wav 文件(10kb、20kb 文件等)。PS:我应该播放 PCM(.wav) 缓冲声音,我在这里使用的原因。AudioTrack

虽然我的设备内存较小,但我如何逐字节读取更大的音频文件并播放声音以避免由于内存限制而崩溃。

private void AudioTrackPlayPCM() throws IOException
{
    String filePath = "/sdcard/myWav.wav"; // 8 kb file

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

    file = new File(filePath);

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

    FileInputStream in = null;

    try {
        in = new FileInputStream( file );
        in.read( byteData );
        in.close(); 
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

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

    AudioTrack at = new 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();
}

有人可以指导我播放更大尺寸的 wav 文件的 AudioTrack 代码吗?

4

1 回答 1

0

您的 intSize 将是初始化 AudioTrack 所需的最小缓冲区大小,请尝试使用它的倍数来创建更大的缓冲区

AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, 
AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_8BIT, intSize*10, 
AudioTrack.MODE_STREAM); 
于 2010-03-26T09:38:55.860 回答