0

我正在开发一个混合来自 VideoCard 和外部声卡的音频的 mac 应用程序。

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

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

我应该从 1 个具有 16 个通道的 AVAudioPCMBuffer 转换为 16 个单声道 AVAudioPCMBuffer 并为每个通道设置一个 AVPlayerNode 吗?然后改变每个 AVPlayerNode 的音量?

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

还是我应该直接使用 CoreAudio AudioUnits?

4

1 回答 1

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);
于 2018-11-20T14:50:16.740 回答