Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 使用AVAudioEngine更改某些频道的音量_Macos_Audio Processing_Avaudioengine_Avaudioplayernode_Avaudioconverter - Fatal编程技术网

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

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上的音量 或者我可以保留

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

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

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

我是否应该将具有16个通道的1个AVAudioPCMBuffer转换为16个单声道AVAudioPCMBuffer,并为每个AVPlayerNode设置一个AVPlayerNode?然后更改每个AVPlayerNode上的音量

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


或者我应该直接使用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);