Android:播放更大尺寸的音频wav声音文件会导致崩溃

问题描述 投票:2回答:1

我试图在我的Android 1.6 HTC设备上使用以下代码(AudioTrack)播放更大尺寸的音频wav文件(大于20 mb),该设备基本上具有更少的内存。但是我发现设备一执行读取,写入和播放就会崩溃。但相同的代码工作正常,播放较小的音频wav文件(10kb,20 kb文件等)非常好。 P.S:我应该播放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代码吗?

android audiotrack
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); 
© www.soinside.com 2019 - 2024. All rights reserved.