AudioTrack: AUDIO_OUTPUT_FLAG_FAST отклоняется клиентом из-за несовпадения частоты дискретизации
Кто-нибудь знает, как исправить это предупреждение?
07-14 10: 38: 55.411 V/tracker-audiotest (22426): Запись Thread:: run(): запуск записи аудиозаписей. 07-14 10: 45: 51.490 "W/AudioTrack (607): AUDIO_OUTPUT_FLAG_FAST, отказано клиентом из-за несоответствия частоты дискретизации (44100 против 48000)"
Когда я тестирую задержку звука на Android 4.4, я сталкиваюсь с внезапной задержкой, увеличивающейся после того, как я увидел это предупреждение. Но я не меняю частоту дискретизации во время теста, а начальная настройка - на 48 кГц. Это предупреждение появляется после запуска 7 минут.
Вы можете протестировать этот проект на своем устройстве, если это необходимо. Проект находится в GitHub:
https://github.com/garyyu/OpenSL-ES-Android-DelayTest
Ответы
Ответ 1
AUDIO_OUTPUT_FLAG_FAST отклоняется, потому что вы используете другую скорость, чем тот, который поддерживается в аппаратном обеспечении. Вам нужно запросить поддерживаемую аппаратную частоту дискретизации и записать с такой скоростью, а не жесткий код на 48 кГц.
Ответ 2
Попробуйте изменить частоту дискретизации в
рамки/основание/
рамки/ау/
аппаратное обеспечение /libhardware
местоположения.
частота выборки по умолчанию - 44100, попробуйте установить частоту дискретизации (ваши аудиофайлы). он будет работать.
приветствий.
Ответ 3
Вы можете попробовать использовать интерфейс функции Java:
AudioManager myAudioMgr = (AudioManager) getSystemService (Context.AUDIO_SERVICE);
nativeSampleRate = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);
чтобы получить стандартную частоту дискретизации на вашем телефоне, используйте это для создания проигрывателя.
Также попробуйте использовать: nativeSampleBufSize = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER);
чтобы получить размер буфера по умолчанию (он находится в кадрах) и использовать его для воспроизведения.
Вы можете посмотреть пример кода JNI audio-echo, если JNI подходит для вас.