Я пытаюсь воспроизвести аудиопоток с помощью 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, но все ответы говорят о звуковом пуле, и я не использовал звуковой пул.
Любая помощь будет принята с благодарностью! (я китаец, и мой английский не очень хорош)
SoundPool
с этой ошибкой, потому что это то, что вы должны использовать. Собственные ресурсы, стоящие заAudioTrack
, высвобождаются недостаточно быстро для вашего варианта использования. - person Dave   schedule 15.09.2017AudioTrack
для воспроизведения. Не выпускайте и не пересоздавайте файлAudioTrack
. Вместо этого вызывайтеflush
,pause
иplay
для перехода от одного источника к другому. - person Dave   schedule 16.09.2017