Как использовать AU3DMixer с The Amazing Audio Engine?
Я использую (действительно!) Amazing Audio Engine для воспроизведения некоторых треков (с AUFilePlayer
каждый в отдельности AEAudioChannel
), который работает довольно хорошо.
Теперь я хотел бы добавить аудио блок 3D Mixer kAudioUnitSubType_AU3DMixerEmbedded
, но после поиска высоко и низко, я не могу найти информацию о том, как это можно сделать.
- Должен ли я создать и добавить 3D-микшер в качестве фильтра для каждого канала? (попробовал это, но звук всегда панорамируется на 50/50%, тем не менее, любое свойство, которое я установил.
- Или я должен взломать TAAE и изменить внутренний многоканальный микшер (звучит не очень хорошая идея)
- Или это вообще невозможно, и я должен просто использовать Core Audio без TAAE?
У меня также есть общее представление о том, как должен работать 3D-микшер, и я следовал всем примерам, которые я смог найти, например, Apple 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 м обязательно должны привести к панорамированию.
1 ответ
Проведя пару более непроизводительных часов, я решил полностью перейти к использованию только AudioUnits и избавиться от Amazing Audio Engine (с приятным побочным эффектом, благодаря которому весь мой проект стал меньше и проще в обращении).
Оказалось, что это не так сложно: подключить пару аудиоустройств в AUGraph
это довольно просто, когда вы смотрите на это с точки зрения API AUGraph (без обработчиков буфера рендеринга и тому подобное).
Это в основном так же просто, как:
- Создание
AUGraph
- Создание нескольких
AUNodes
на этом графике (все AudioUnits):- RemoteIO AudioUnit (выход)
- 3D AudioUnit Mixer
- AudioUnit FilePlayer
- Подключение микшера к выходу
- Подключение filePlayer к микшеру
Эти ссылки и документы были очень полезны (в таком порядке):