Android: проигрывание AudioTrack несколько раз приводит к сбою - PullRequest
4 голосов
/ 16 марта 2010

Я пытаюсь воспроизвести звук с буферизацией звука (.wav) с помощью AudioTrack. Пожалуйста, смотрите код ниже. Мне нужно вызвать эту функцию в потоке для поддержки одновременной игры. Это хорошо, находясь под нитью. Работает нормально, воспроизводит звук нормально. Но если я выполняю воспроизведение звука, используя AudioTrack один за другим непрерывно (то есть, выполняю второе воспроизведение перед завершением первого воспроизведения звука), происходит сбой устройства (неожиданная ошибка принудительного закрытия). Кто-нибудь сталкивался с такими проблемами и разрешил их каким-то образом?

private void PlayAudioTrack(String filePath) throws IOException
{

    if (filePath==null)
        return;

    byte[] byteData = null;

    File file = null; 
    file = new File(filePath); // sdcard path
    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);

    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();              

}

Ценю ваш ответ.

Спасибо.

1 Ответ

5 голосов
/ 16 марта 2010

Вы должны освободить ресурсы AudioTracks и остановить его

at.release();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...