Получение аудио образцов из динамиков - PullRequest
0 голосов
/ 30 октября 2019

Итак, у меня два вопроса:

  1. Есть ли другой (возможно, низкоуровневый) способ получения поплавков * семплов звука, который воспроизводится в данный момент?
  2. Возможно ли этосделать это изнутри рамки? Я имею в виду, когда у вас нет доступа к экземпляру AVPlayer (или AVAudioPlayerNode, AudioEngine или даже низкоуровневым классам CoreAudio, как угодно), кому принадлежит аудиофайл? Есть ли способ подписаться (для анализа или также для изменения / выравнивания) на аудиосэмплы, которые воспроизводятся через динамики / наушники?

Я пытался установить кранна audioEngine.mainMixerNode, который работает, но когда я устанавливаю размер буфера> 4096 (для вычисления БПФ высокой плотности), обратный вызов вызывается реже, чем следовало бы (примерно 3 раза в секунду вместо 30 раз или даже часто)).

mixerNode.installTap(onBus: 0,
                     bufferSize: 16384, //or 8192
                     format: mixerNode.outputFormat(forBus: 0))
{[weak self] (buffer, time) in
    //this block is being called LESS frequently...
}

Я знаю, что CoreAudio очень мощный и что-то должно быть для таких целей ..

1 Ответ

0 голосов
/ 01 ноября 2019

Приложение для iOS может получать воспроизводимые аудиосэмплы только из необработанных сэмплов PCM, которые воспроизводит само приложение. Любая видимость образцов, выводимых другими приложениями или процессами, блокируется изолированной программной средой безопасности iOS. Приложение iOS может выполнять сэмплирование звука с микрофона устройства.

При подключении к звуковому ядру звуковые сэмплы доставляются в основной поток приложения и, таким образом, ограничиваются частотой и задержкой обратного вызова. Чтобы получить самые последние несколько миллисекунд сэмплов микрофона, приложение должно использовать API обратного вызова аудиоустройства RemoteIO, где сэмплы аудио могут доставляться в высокоприоритетном потоке аудиоконтекста.

...