Изменить громкость звука некоторых каналов с помощью AVAudioEngine
Я работаю над приложением Mac, которое смешивает звук с видеокарты и внешней звуковой карты.
Как я могу изменить громкость на каждом канале (не каждый источник) независимо с помощью AVAudioEngine.
Допустим, у меня есть AVAudioPCMBuffer с чередованием 16 каналов, и я хочу, чтобы громкость каналов 1 и 2 составляла 50%, а остальные 100%
Должен ли я конвертировать из 1 AVAudioPCMBuffer с 16 каналами в 16 моно AVAudioPCMBuffer и иметь один AVPlayerNode для каждого из них? Затем изменить громкость на каждом AVPlayerNode?
Или я могу сохранить o есть ли способ изменить базовый аудиоустройство с AVAudioMixerNode?
Или я должен использовать CoreAudio AudioUnits напрямую?
1 ответ
Для изменения громкости звука по каналу, а не по входу требуется 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);