Изменить громкость звука некоторых каналов с помощью AVAudioEngine - PullRequest
0 голосов
/ 08 ноября 2018

Я работаю над приложением Mac, которое смешивает звук с видеокарты и внешней звуковой карты.

Как изменить громкость на каждом канале (не на каждом источнике) независимо с помощью AVAudioEngine.

Допустим, у меня есть AVAudioPCMBuffer с чередованием 16 каналов, и я хочу, чтобы громкость каналов 1 и 2 составляла до 50%, а другие 100%

Должен ли я преобразовать из 1 AVAudioPCMBuffer с 16 каналами в 16 моно AVAudioPCMBuffer и иметь один AVPlayerNodeдля каждого из них?Затем измените громкость на каждом AVPlayerNode?

Или я могу оставить o есть ли способ изменить базовый аудиоустройство с AVAudioMixerNode?

Или я должен использовать CoreAudio AudioUnits напрямую?

1 Ответ

0 голосов
/ 20 ноября 2018

Для изменения громкости звука по каналу, а не по входу требуется 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);
...