2015-07-15 1 views
0

Есть ли способ захвата аудио буферов, которые отправляются из удаленного устройства на динамик? Я делаю пару различных циклов в разных потоках для одного и того же IOUnit (один - щелчок, другой - музыка) и хотел бы выполнить анализ того, как музыка выстраивается щелчком, не отфильтровывая какой-либо шум например, используя микрофонный вход. Моя математика должна быть очень точной (ошибка меньше 2 мс), поэтому получение этого буфера после микширования было бы идеальным.захват звукового буфера после микширования, отправленного с удаленного устройства на динамик

ответ

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; 
}