无法设置 MultiChanelMixer AudioUnit 总线的输入音量

Posted

技术标签:

【中文标题】无法设置 MultiChanelMixer AudioUnit 总线的输入音量【英文标题】:Cannot set input volume of MultiChanelMixer AudioUnit bus 【发布时间】:2016-12-29 02:39:02 【问题描述】:

我正在尝试使用 CoreAudio/AudioToolbox 使用不同的 MIDISynth 节点播放多个 MIDI 文件。我将采样器连接到 MultiChanelMixer,然后再连接到 IO 单元。我希望能够相互独立地更改不同的输入音量。我正在尝试使用这一行:

AudioUnitSetParameter(mixerUnit, kMultiChannelMixerParam_Volume, kAudioUnitScope_Input, UInt32(trackIndex), volume, 0)

问题在于调整trackIndex 0 会调整每个输入进入混音器,而不是像我期望的那样只调整一个总线。

这是主图 CAShow 的输出

AudioUnitGraph 0xC590003:
  Member Nodes:
    node 1: 'auou' 'rioc' 'appl', instance 0x60000002d580 O I
    node 2: 'aumx' 'mcmx' 'appl', instance 0x60000002d680 O I
    node 3: 'aumu' 'msyn' 'appl', instance 0x60000002db60 O I
    node 4: 'aumu' 'msyn' 'appl', instance 0x60000002ef20 O I
    node 5: 'aumu' 'msyn' 'appl', instance 0x60000002df00 O I
    node 6: 'aumu' 'msyn' 'appl', instance 0x60800022d820 O I
  Connections:
    node   2 bus   0 => node   1 bus   0  [ 2 ch,  44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
    node   3 bus   0 => node   2 bus   0  [ 2 ch,  44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
    node   4 bus   0 => node   2 bus   1  [ 2 ch,  44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
    node   5 bus   0 => node   2 bus   2  [ 2 ch,  44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
    node   6 bus   0 => node   2 bus   3  [ 2 ch,  44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
  CurrentState:
    mLastUpdateError=0, eventsToProcess=F, isInitialized=T, isRunning=T (2)

这是我为控制所有这些而编写的类:https://gist.github.com/jadar/26d9625c875ce91dd2ad0ad63dfd8f80

【问题讨论】:

我看到你在课堂上使用 kMultiChannelMixerParam_Volume 的唯一地方是使用 kAudioUnitScope_Input。除了将每个采样器的音量设置到混音器之外,您还可以使用 kAudioUnitScope_Output 将混音器的输出设置为一个整体。 【参考方案1】:

混音器很困难,因为通道在某种程度上打破了核心音频设置的音频流范式,加上交叉点与输入/输出主设备不同,全局主设备也不同。

根据您提供的代码,并假设您为 trackIndex 传递 0,我将使用属性 kAudioUnitProperty_MatrixLevels 查看卷(使用起来可能会很棘手,所以如果您需要,请告诉我帮助)。可能是交叉点电平设置不正确,降低 trackIndex 0(实际上是总线 0 通道 0)会影响您听到的一切。

如果不清楚,总线/通道范例的工作方式是它在混音器本身内是连续的。因此,如果您有 4 个带有立体声通道的总线,并且想要影响总线 0 的右通道,那就是混音器通道 7。

【讨论】:

以上是关于无法设置 MultiChanelMixer AudioUnit 总线的输入音量的主要内容,如果未能解决你的问题,请参考以下文章

转wensy的个人空间 :关于“ORA-01653: 表 SYS.AUD$ 无法通过 128 (在表空间 SYSTEM 中) 扩展”的错误

Oracle11g adump目录下面.aud增长导致空间撑满无法删除导致CRS无法启动的解决方法

Keycloak-gatekeeper:“aud”声明和“client_id”不匹配

aud是啥货币

如何能够清除aud脚本?

Core Audio - 远程 IO 混乱