Несколько шин, направленных в разные группы микшеров, позволяют им совместно использовать переменные в обратном вызове рендеринга
У меня был обратный вызов рендеринга с 20 шинами, синхронизированными и направленными на один и тот же микшер, но теперь мне нужно применить эффекты к некоторым из этих 20 шин, поэтому теперь они разделены на группы по 5.
Итак, теперь у меня 20 автобусов, разделенных на 4 группы.
Автобусы 0-4 - до - Mixer1
AUGraphSetNodeInputCallback (processingGraph,mixer1Node,
input, //0-4
&inputCallbackStruct
);
Автобусы 5-9 направляются в - Mixer2
AUGraphSetNodeInputCallback (processingGraph,mixer2Node,
input, //0-4
&inputCallbackStruct
);
Автобусы 10-14 направляются в - Mixer3 ...
Автобусы 15-19 направляются в - Mixer4 ...
Теперь моя проблема в том, что каждая из этих групп получает от [0] до [4] inBusNumber с одинаковыми данными в обратном вызове рендеринга. Таким образом, старый inBusNumber [5] теперь равен [0] Mixer2, с теми же данными рендеринга шины [0], что и Mixer1. Все переменные теперь доступны для шин других микшеров.
Теперь мой сложный код рендеринга бесполезен.... Мне нужны независимые переменные на каждой шине.
Есть идеи как с этим бороться?
1 ответ
Я сделал это с помощью kAudioUnitSubType_MatrixMixer. Это позволяет иметь любое количество входов и любое количество выходов. Поэтому я настраиваю шины 0-4 на выход 0, шины 0-9 на выход 1... и т. Д. Можно настроить громкость с любого входа на любой выход Matrix Mixer следующим образом:
UInt32 element = (inputChannel<<16) | outputChannel;
AudioUnitSetParameter(mixerMatrix, kMatrixMixerParam_Volume, kAudioUnitScope_Global, element, gain, 0);
С помощью этого метода все шины направляются в один и тот же микшер (MatrixMixer), и я могу совместно использовать переменные в обратном вызове рендеринга.