如何使用带有 The Amazing Audio Engine 的 AU3DMixer?

How to use an AU3DMixer with The Amazing Audio Engine?

我正在使用(确实如此!)Amazing Audio Engine 播放一些曲目(带有 AUFilePlayer,每个曲目在单独的 AEAudioChannel 中),效果非常好。

现在,我想添加 3D Mixer Audio Unit kAudioUnitSubType_AU3DMixerEmbedded,但是在上下搜索之后,我找不到任何有关如何完成此操作的信息。

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

音频正在播放(所以我假设一切都设置好了)。但是,none 的参数似乎有所作为。 90° 的方位角和 10 m 的距离肯定会导致平移输出。

在闲置了几个小时之后,我决定完全转向使用 AudioUnits 并摆脱 Amazing Audio Engine(副作用是我的整个项目也变得更小更容易处理) ).

事实证明并没有那么复杂:在 AUGraph 中连接几个 AudioUnit 非常简单,当您从 AUGraph API 的角度来看时(没有渲染缓冲区处理程序和这样的)。

基本上就像:

  • 创建 AUGraph
  • 在此图中创建几个 AUNodes(所有 AudioUnit):
    • RemoteIO AudioUnit(输出)
    • 3D AudioUnit 混音器
    • 一个音频单元文件播放器
  • 将调音台连接到输出
  • 正在将 filePlayer 连接到混音器

这些链接和文档非常有帮助(按此顺序):