使用 AVAudioEngine 更改某些频道的音量

Change audio volume of some channels using AVAudioEngine

我正在开发一个 mac 应用程序,它可以混合来自视频卡和外部声卡的音频。

如何使用 AVAudioEngine 独立改变每个通道(不是每个源)的音量。

假设我有一个 AVAudioPCMBuffer,其中有 16 个交错的通道,我希望通道 1 和通道 2 的音量为 50%,其他为 100%

我是否应该将 1 个 16 通道的 AVAudioPCMBuffer 转换为 16 个单声道 AVAudioPCMBuffer 并为每个通道分配一个 AVPlayerNode?然后改变每个 AVPlayerNode 的音量 ?

或者我可以保留 o 有没有办法从 AVAudioMixerNode 更改底层音频单元?

还是应该直接使用CoreAudio AudioUnits?

按通道而不是按输入更改音频音量需要 MatrixMixer。 AVAudioEngine MainMixer 不是矩阵混音器(mxmx)而是多通道混音器(mcmx)。

要使用矩阵混音器,请使用此代码:

AudioComponentDescription   mixerUnitDescription;

mixerUnitDescription.componentType          = kAudioUnitType_Mixer;
mixerUnitDescription.componentSubType       = kAudioUnitSubType_MatrixMixer;
mixerUnitDescription.componentManufacturer  = kAudioUnitManufacturer_Apple;
mixerUnitDescription.componentFlags         = 0;
mixerUnitDescription.componentFlagsMask     = 0;

[AVAudioUnit instantiateWithComponentDescription:mixerUnitDescription options:0 completionHandler:^(__kindof AVAudioUnit * _Nullable mixer, NSError * _Nullable error) {

}];

并使用

更改音频电平
AudioUnitSetParameter([_mixer audioUnit], kMatrixMixerParam_Volume, kAudioUnitScope_Input, i, volume, 0);