Почему интервал обратного вызова захвата звука iOS не является плавным? - PullRequest
0 голосов
/ 25 апреля 2020

Я пишу свое приложение iOS для записи звука.

Я вызвал session.setPreferredIOBufferDuration (0,001), чтобы установить продолжительность, и записал интервалы между двумя обратными вызовами.

Это данные моего iPhone 8:

max =  198 avg =  2.75314 min =  0 
======================================================
4 2 2 3 5 3 1 3 6 1
2 2 6 0 5 3 1 3 3 5
1 3 3 2 3 5 1 3 3 3
3 4 1 4 3 2 4 2 3 3
3 3 3 3 2 3 3 3 5 1
3 2 3 3 3 3 3 5 1 3
3 3 3 3 3 3 4 1 3 3
3 3 3 2 3 4 2 3 3 3
3 4 5 0 2 3 3 3 3 3
3 3 3 3 2 3 4 2 3 3
3 3 3 3 3 3 4 2 2 4
3 2 4 2 3 2 4 3 4 2
2 3 3 3 3 2 4 3 5 1
2 4 2 3 2 3 4 3 3 2
4 5 1 2 3 4 2 4 1 3
3 3 3 5 2 2 2 4 2 3
3 3 3 6 0 3 3 3 2 3
3 3 4 2 3 3 2 3 3 3
3 3 3 3 5 1 2 3 3 3
3 3 4 4 1 2 3 3 4 2
3 3 3 3 3 2 3 6 0 3
3 3 4 2 3 3 3 2 5 1

И это данные моего iPhone 7:

max =  246 avg =  2.59249 min =  0 
======================================================
3 2 3 2 3 3 5 2 2 3
3 3 3 4 2 2 3 3 3 3
221 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 2 0 0 0
0 0 0 0 0 0 0 1 7 1
1 3 2 3 3 3 3 2 4 4
1 3 4 2 3 3 5 4 0 2
3 5 2 3 2 3 3 4 2 3
2 6 0 4 2 3 3 3 4 3
1 3 3 3 5 3 1 3 3 2

, как видите, максимальный интервал далек от 1 мс, установленного на AudioSession. и огромные числа формы iPhone 7 появляются очень часто.

Почему iOS не перезванивают мой обратный вызов? Могу ли я сделать что-нибудь, например, установить некоторые предпочтения, чтобы получить более гладкие данные?

Спасибо.

1 Ответ

1 голос
/ 25 апреля 2020

1) Предпочтительная длительность буфера - это всего лишь совет ОС. В основном следуют, в зависимости от аппаратных возможностей моделей устройств. 256 кадров поддерживаются на всех текущих iOS устройствах. Меньшие числа могут работать только на некоторых более новых iOS моделях устройств. Но устройства iOS могут использовать разные размеры буфера (таким образом, длительности) для каждого обратного вызова аудиоустройства. И иногда это происходит (из-за управления питанием, изменения маршрута аудио, проблем с запуском / остановкой оборудования и т. Д. c.)

2) Интервал между запусками обратных вызовов буфера аудиоустройства чрезвычайно постоянен. Проблемы с высокой переменной задержкой обычно являются результатом того, что код внутри обратных вызовов занимает слишком много времени. Вы следовали всем правилам аудио контекста в реальном времени? (без долгих операций, без Swift, без цели C обмен сообщениями, без блокировок, без управления памятью, без чтения или записи файлов, без вызовов пользовательского интерфейса и т. д. c.?)

...