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

时间:2018-11-08 12:44:01

标签: macos audio-processing avaudioengine avaudioplayernode avaudioconverter

我正在开发一个Mac应用程序,它将视频卡和外部声卡的音频混合在一起。

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

假设我有一个带16个通道的AVAudioPCMBuffer,并且我希望通道1和2的音量达到50%,而其他100%

我应该将1个具有16个通道的AVAudioPCMBuffer转换为16个单声道AVAudioPCMBuffer并为每个通道分配一个AVPlayerNode吗?然后更改每个AVPlayerNode上的音量?

还是我可以保持o是否可以从AVAudioMixerNode更改基础音频单元?

还是应该直接使用CoreAudio AudioUnits?

1 个答案:

答案 0 :(得分:0)

按通道而不是按输入更改音频音量需要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);