Как использовать 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 к микшеру

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

Другие вопросы по тегам