我正在开发一个Mac应用程序,它将视频卡和外部声卡的音频混合在一起。
如何使用AVAudioEngine独立更改每个通道(而不是每个源)的音量。
假设我有一个带16个通道的AVAudioPCMBuffer,并且我希望通道1和2的音量达到50%,而其他100%
我应该将1个具有16个通道的AVAudioPCMBuffer转换为16个单声道AVAudioPCMBuffer并为每个通道分配一个AVPlayerNode吗?然后更改每个AVPlayerNode上的音量?
还是我可以保持o是否可以从AVAudioMixerNode更改基础音频单元?
还是应该直接使用CoreAudio AudioUnits?
答案 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);