代码之家  ›  专栏  ›  技术社区  ›  vtruant

使用avaudioEngine更改某些频道的音频音量

  •  0
  • vtruant  · 技术社区  · 6 年前

    我正在开发一个混合视频卡和外部音频卡音频的Mac应用程序。

    如何使用avaudioEngine单独更改每个频道(而不是每个源)上的音量。

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

    我是否应该将16个通道的1个avaudiopcmbuffer转换为16个mono avaudiopcmbuffer,并为每个avplayernode设置一个avplayernode?然后更改每个avplayernode上的音量?

    或者我可以保留o是否有方法从avaudiomxernode更改基础音频单元?

    还是应该直接使用CoreAudio音频单元?

    1 回复  |  直到 6 年前
        1
  •  0
  •   vtruant    6 年前

    按频道而不是按输入更改音频音量需要矩阵混音器。avaudioEngine主混频器不是矩阵混频器(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);