如何将AU3DMixer与Amazing Audio Engine配合使用?

时间:2015-02-26 21:03:43

标签: ios cocoa-touch core-audio audiounit the-amazing-audio-engine

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

现在,我想添加3D混音器音频单元kAudioUnitSubType_AU3DMixerEmbedded,但在搜索高低之后,我找不到任何有关如何完成此操作的信息。

  • 我应该为每个频道创建并添加3D混音器作为滤波器吗? (试过这个,但是声音总是被淘汰50/50%,不过我设置的任何属性。
  • 或者我应该破解TAAE并改变内部多通道混音器(听起来不是一个好主意)
  • 或者这根本不可能,我应该在没有TAAE的情况下直接使用Core Audio吗?

我对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 m,绝对会导致平移输出。

1 个答案:

答案 0 :(得分:0)

在摆弄了几个非常低效的时间之后,我决定完全转向使用AudioUnits并摆脱Amazing Audio Engine(具有良好的副作用,我的整个项目也变得更小,更容易处理)。

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

它基本上和以下一样简单:

  • 创建AUGraph
  • 在此图表中创建多个AUNodes(所有AudioUnits):
    • RemoteIO AudioUnit(输出)
    • 3D AudioUnit Mixer
    • AudioUnit FilePlayer
  • 将调音台连接到输出
  • 将filePlayer连接到调音台

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