Есть ли способ захвата аудио буферов, которые отправляются из удаленного устройства на динамик? Я делаю пару различных циклов в разных потоках для одного и того же IOUnit (один - щелчок, другой - музыка) и хотел бы выполнить анализ того, как музыка выстраивается щелчком, не отфильтровывая какой-либо шум например, используя микрофонный вход. Моя математика должна быть очень точной (ошибка меньше 2 мс), поэтому получение этого буфера после микширования было бы идеальным.захват звукового буфера после микширования, отправленного с удаленного устройства на динамик
0
A
ответ
0
Да, вы просто добавляете обратный вызов render to remoteIO с AudioUnitAddRenderNotify
. Затем вы получите четыре обратных вызова на буфер: ввод предварительной рендеринга, ввод-вывод, вывод предварительной рендеринга и вывод пост-рендера. Вам просто нужно действовать на соответствующих ioActionFlags и inBusNumber.
AudioUnitAddRenderNotify(remoteIO, inputOutputTap, (__bridge void *)self);
OSStatus inputOutputTap (void * inRefCon,
AudioUnitRenderActionFlags * ioActionFlags,
const AudioTimeStamp * inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList * ioData) {
if (*ioActionFlags == kAudioUnitRenderAction_PostRender && inBusNumber == 0) {
MyObject *self = (__bridge MyObject *)inRefCon;
MyObjectDoTheThing(self,ioData,inTimeStamp);
}
return noErr;
}