如何使用带有 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 混合器并将其添加为每个通道的过滤器吗? (试过这个,但声音总是平移 50/50%,尽管如此我设置的任何 属性。
- 或者我应该破解 TAAE 并更改内部多通道混音器(听起来不是个好主意)
- 或者这根本不可能,我应该直接使用 Core Audio 而不是 TAAE 吗?
我对 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 连接到混音器
这些链接和文档非常有帮助(按此顺序):
- Audio Unit Hosting Guide for iOS
- How do I connect an audiofileplayer audio unit to a 3dmixer
- Using the 3D Audio Mixer Unit
我正在使用(确实如此!)Amazing Audio Engine 播放一些曲目(带有 AUFilePlayer
,每个曲目在单独的 AEAudioChannel
中),效果非常好。
现在,我想添加 3D Mixer Audio Unit kAudioUnitSubType_AU3DMixerEmbedded
,但是在上下搜索之后,我找不到任何有关如何完成此操作的信息。
- 我应该创建 3D 混合器并将其添加为每个通道的过滤器吗? (试过这个,但声音总是平移 50/50%,尽管如此我设置的任何 属性。
- 或者我应该破解 TAAE 并更改内部多通道混音器(听起来不是个好主意)
- 或者这根本不可能,我应该直接使用 Core Audio 而不是 TAAE 吗?
我对 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 连接到混音器
这些链接和文档非常有帮助(按此顺序):
- Audio Unit Hosting Guide for iOS
- How do I connect an audiofileplayer audio unit to a 3dmixer
- Using the 3D Audio Mixer Unit