使用 AVAudioEngine 更改某些频道的音量
Change audio volume of some channels using AVAudioEngine
我正在开发一个 mac 应用程序,它可以混合来自视频卡和外部声卡的音频。
如何使用 AVAudioEngine 独立改变每个通道(不是每个源)的音量。
假设我有一个 AVAudioPCMBuffer,其中有 16 个交错的通道,我希望通道 1 和通道 2 的音量为 50%,其他为 100%
我是否应该将 1 个 16 通道的 AVAudioPCMBuffer 转换为 16 个单声道 AVAudioPCMBuffer 并为每个通道分配一个 AVPlayerNode?然后改变每个 AVPlayerNode 的音量 ?
或者我可以保留 o 有没有办法从 AVAudioMixerNode 更改底层音频单元?
还是应该直接使用CoreAudio AudioUnits?
按通道而不是按输入更改音频音量需要 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);
我正在开发一个 mac 应用程序,它可以混合来自视频卡和外部声卡的音频。
如何使用 AVAudioEngine 独立改变每个通道(不是每个源)的音量。
假设我有一个 AVAudioPCMBuffer,其中有 16 个交错的通道,我希望通道 1 和通道 2 的音量为 50%,其他为 100%
我是否应该将 1 个 16 通道的 AVAudioPCMBuffer 转换为 16 个单声道 AVAudioPCMBuffer 并为每个通道分配一个 AVPlayerNode?然后改变每个 AVPlayerNode 的音量 ?
或者我可以保留 o 有没有办法从 AVAudioMixerNode 更改底层音频单元?
还是应该直接使用CoreAudio AudioUnits?
按通道而不是按输入更改音频音量需要 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);