0

Я использую (действительно!) Amazing Audio Engine для воспроизведения некоторых треков (с AUFilePlayer, каждый в отдельном AEAudioChannel), который работает довольно хорошо.Как использовать AU3DMixer с Amazing Audio Engine?

Теперь я хотел бы добавить 3D-микшер Audio Unit kAudioUnitSubType_AU3DMixerEmbedded, но после поиска высокого и низкого я не могу найти никакой информации о том, как это можно сделать.

  • Должен ли я создавать и добавлять 3D-микшер в качестве фильтра для каждого канала? (попробовал это, но звук всегда подкачивается на 50/50%, тем не менее, любого свойства, которое я установил.
  • Или мне нужно взломать TAAE и изменить внутренний многоканальный микшер (не похоже на хорошую идею)
  • Или это вообще невозможно, и я должен просто использовать Core Audio непосредственно без TAAE?

Я также базовое понимание того, как 3D-смеситель должен работать и выполнял все примеры, я мог бы найти, например Apple's TN2112

Вот как я пытаюсь добавить 3D-микшер к каналу:

- (BOOL)add3DMixerToTrack:(NSURL*)track { 
    NSError *err; 
    AudioComponentDescription spatialMixerDescription = AEAudioComponentDescriptionMake(kAudioUnitManufacturer_Apple, kAudioUnitType_Mixer, kAudioUnitSubType_AU3DMixerEmbedded); 

    AEAudioUnitFilter *mixer = [[AEAudioUnitFilter alloc] 
     initWithComponentDescription:spatialMixerDescription 
     audioController:self.audioController 
     useDefaultInputFormat:YES 
     error:&err]; 

    AudioUnitSetParameter(mixer.audioUnit, k3DMixerParam_Azimuth, kAudioUnitScope_Input, 1, 90, 0); 
    AudioUnitSetParameter(mixer.audioUnit, k3DMixerParam_Distance, kAudioUnitScope_Input, 1, 10, 0); 

    AEAudioUnitChannel *channel = [self getChannelForTrack:track]; 
    if(channel) { 
     if(![self.audioController.channels containsObject:channel]) { 
      [self.audioController addChannels:@[channel]]; 
     } 
     [self.audioController addFilter:mixer toChannel:channel]; 

     return YES; 
    } else { 
     return NO; 
    } 
} 

Звук играет (поэтому я предполагаю, что все настроено нормально). Однако ни один из параметров, похоже, что-то не делает. Азимут 90 ° и расстояние 10 м должны обязательно приводить к выпуску.

ответ

0

После того, как я пропустил несколько более непроизводительных часов, я решил полностью перейти к использованию AudioUnits и избавиться от Amazing Audio Engine (с хорошим побочным эффектом, что весь мой проект также стал меньше и проще в обращении) ,

Это оказалось не так уж сложно: подключение пары AudioUnits в AUGraph довольно просто, когда вы смотрите на него с точки зрения API AUGraph (без обработчиков буфера обработки и т. Д.).

Это в основном так же просто, как:

  • Создание AUGraph
  • Создание нескольких AUNodes на этом графике (все AudioUnits):
    • В RemoteIO AudioUnit (выход)
    • 3D AudioUnit Смеситель
    • AudioUnit FilePlayer
  • Подключение микшера к выходу
  • Подключение filePlayer в смеситель

Эти ссылки и документы были очень полезны (в таком порядке):