0

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

现在,我想添加 3D Mixer Audio Unit 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 m 的距离肯定会导致平移输出。

4

1 回答 1

0

在折腾了几个非生产性的小时后,我决定完全转而只使用 AudioUnits 并摆脱 Amazing Audio Engine(具有很好的副作用,我的整个项目也变得更小,更容易处理)。

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

它基本上很简单:

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

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

于 2015-02-28T15:59:04.003 回答