Я использую библиотеку oboe для создания музыкального приложения. Там я создаю музыку, записывая значения с плавающей запятой PCM в заданный указатель. У меня редко бывают просадки, которые я слышу. Я также проверяю это с помощью следующих API-интерфейсов гобоя:
managedStream->getXRunCount();
Документы говорят следующее:
* An XRun is an Underrun or an Overrun. * During playing, an underrun will occur if the stream is not written in time * and the system runs out of valid data. * An underrun or overrun can cause an audible "pop" or "glitch".
Я пытаюсь отладить проблему. Я нашел это замечательное руководство от Дона. Я записал 10 секунд systrace со следующим: обратите внимание, что в течение этих 10 секунд я слышал 0 слышимых звуков хлопков/щелчков:
systrace.py --time=10 -o trace.html -a com.example.app частота планирования аудио
Результат при вызове aaRdy
выглядит следующим образом (высота синего прямоугольника показывает, сколько семплов находится в буфере, чем больше высота, тем сэмпл требуется): Это лишь малая часть ааРдый звонок. Никогда не бывает так, чтобы в моем буфере было 0 сэмплов. Я все это проверил. В статье, написанной Доном, он говорит следующее:
Но потом буфер начинает пустеть, сначала падает до 96 кадров, потом… о боже… до нуля! При нуле у нас гарантированно будет сбой звука, потому что в буфере нет данных.
Мой вопрос, глядя на статью, я могу гарантировать, что если синяя коробка пуста, значит, есть опустошение. Тем не менее, в моей системной трассе она никогда не бывает пустой, и я не слышал никаких кликов о недоставке, НО managedStream->getXRunCount();
call фактически вернул 12
. Я не уверен, есть ли недоработка или нет.
aaRdy
systrace измеряется в исходном коде Android: cs.android.com/android/platform/superproject/+/. По сути, это количество полных кадров в очереди буфера данных. Когда он равен 0, это, вероятно, означает, что буфер заполнен. - person Yi Yang   schedule 15.04.2021mAudioEndpoint->getFullFramesAvailable()
), то есть буферных кадров, доступных для записи. Когда он равен 0, буфер полностью занят и что-то нужно удалить. - person Yi Yang   schedule 16.04.2021