Macos 使用AVAudioEngine更改某些频道的音量
我正在开发一个mac应用程序,它将视频卡和外部声卡的音频混合在一起 如何使用AVAudioEngine独立更改每个频道(而不是每个源)上的音量 假设我有一个AVAudioPCMBuffer,16个通道交错,我希望通道1和通道2的音量达到50%,其他100% 我是否应该将具有16个通道的1个AVAudioPCMBuffer转换为16个单声道AVAudioPCMBuffer,并为每个AVPlayerNode设置一个AVPlayerNode?然后更改每个AVPlayerNode上的音量 或者我可以保留o有没有办法从AVAudioMixerNode更改底层音频单元Macos 使用AVAudioEngine更改某些频道的音量,macos,audio-processing,avaudioengine,avaudioplayernode,avaudioconverter,Macos,Audio Processing,Avaudioengine,Avaudioplayernode,Avaudioconverter,我正在开发一个mac应用程序,它将视频卡和外部声卡的音频混合在一起 如何使用AVAudioEngine独立更改每个频道(而不是每个源)上的音量 假设我有一个AVAudioPCMBuffer,16个通道交错,我希望通道1和通道2的音量达到50%,其他100% 我是否应该将具有16个通道的1个AVAudioPCMBuffer转换为16个单声道AVAudioPCMBuffer,并为每个AVPlayerNode设置一个AVPlayerNode?然后更改每个AVPlayerNode上的音量 或者我可以保留
或者我应该直接使用CoreAudio AudioUnits吗?按频道而不是按输入更改音频音量需要MatrixMixer。AVAudioEngine主混频器不是矩阵混频器(MX),而是多通道混频器(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);