AudioFlinger не смог создать трек, статус: -12

Я пытаюсь воспроизвести аудиопоток с помощью audioTrack, поэтому я создал audioTrack следующим образом:

  public AudioTrack create() {
    if (mTrack != null) {
        if (mTrack.getState() == AudioTrack.STATE_INITIALIZED) {
            return mTrack;
        } else {
            mTrack.release();
            mTrack = null;
        }
    }

    mBuffSize = AudioTrack.getMinBufferSize(Settings.SAMPLE_RATE, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
    mTrack = new AudioTrack(AudioManager.STREAM_MUSIC, Settings.SAMPLE_RATE,
            AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, mBuffSize, AudioTrack.MODE_STREAM);
    if (mTrack.getState() == AudioTrack.STATE_INITIALIZED) {
        mTrack.play();
        return mTrack;
    }
    return null;
}

когда я заканчиваю, я вызываю стоп следующим образом:

public void stop() {
    if (mTrack != null) {
        if (mTrack.getState() == AudioTrack.STATE_INITIALIZED) {
            mTrack.release();
            mTrack = null;
        }

    }

}

на каком-то устройстве, когда я часто создаю и останавливаю, я получаю это:

AudioFlinger не смог создать трек, статус: -12.

Я много раз искал эту проблему в StackOverflow, но все ответы говорят о звуковом пуле, и я не использовал звуковой пул.

Любая помощь будет принята с благодарностью! (я китаец, и мой английский не очень хорош)


person Zenan.Lai    schedule 15.09.2017    source источник
comment
Не публикуйте скриншоты своего кода. Вставляйте фрагменты кода напрямую.   -  person Akshay    schedule 15.09.2017
comment
Спасибо! Но я не знаю, как это сделать, так как насчет этого?   -  person Zenan.Lai    schedule 15.09.2017
comment
Да.. лучше сейчас..   -  person Akshay    schedule 15.09.2017
comment
Вы добавили разрешения в свой манифест?   -  person Akshay    schedule 15.09.2017
comment
разрешение ведьмы мне нужно добавить? я не уверен, но в другом дайве работает нормально   -  person Zenan.Lai    schedule 15.09.2017
comment
Похоже, у вас есть короткие звуковые клипы, и вы проигрываете их много раз быстро. В других ответах говорится об SoundPool с этой ошибкой, потому что это то, что вы должны использовать. Собственные ресурсы, стоящие за AudioTrack, высвобождаются недостаточно быстро для вашего варианта использования.   -  person Dave    schedule 15.09.2017
comment
@Dave Мое приложение работает в интерфоне, оно может часто получать короткий или длинный аудиопоток. как только воспроизведение закончено, я вызываю stop().   -  person Zenan.Lai    schedule 16.09.2017
comment
Я бы предложил повторно использовать один экземпляр AudioTrack для воспроизведения. Не выпускайте и не пересоздавайте файл AudioTrack. Вместо этого вызывайте flush, pause и play для перехода от одного источника к другому.   -  person Dave    schedule 16.09.2017
comment
@Дэйв о! Это действительно полезно! Я просто делаю то, что ты говоришь! спасибо большое бро!   -  person Zenan.Lai    schedule 16.09.2017
comment
@Zenan.Lai Надеюсь, что да. Если я помог вам разработать решение, я опубликую его как ответ. Пожалуйста, отредактируйте мой ответ с рабочим кодом.   -  person Dave    schedule 16.09.2017
comment
@ Дэйв Хорошо, я буду. Еще раз спасибо!   -  person Zenan.Lai    schedule 18.09.2017


Ответы (1)


Добавлять

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

для воспроизведения аудиопотока.

person Akshay    schedule 15.09.2017