2016-12-29 1 views
0

Ich versuche CoreAudio/AudioToolbox zu verwenden, um mehrere MIDI-Dateien mit verschiedenen MIDISynth-Knoten abzuspielen. Ich habe die Sampler in einen MultiChanelMixer verdrahtet, der wiederum in die IO-Einheit verdrahtet ist. Ich möchte die verschiedenen Eingangsvolumina unabhängig voneinander ändern können. Ich versuche, dies mit dieser Zeile:Die Eingangslautstärke des MultiChanelMixer AudioUnit-Busses kann nicht eingestellt werden

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

Das Problem ist, dass trackIndex 0 Stellt Einstellung jeder Eingang in den Mischer kommt, nicht nur den einen Bus wie ich es erwartet habe. Hier

ist die Ausgabe von CAShow des Master-Graph

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) 

Hier wird die Klasse schrieb ich all dies zu kontrollieren: https://gist.github.com/jadar/26d9625c875ce91dd2ad0ad63dfd8f80

+0

Der einzige Ort, an dem ich Sie mit kMultiChannelMixerParam_Volume in Ihrer Klasse sehe, ist mit kAudioUnitScope_Input. Zusätzlich zum Einstellen der Lautstärke jedes Samplers auf den Mixer können Sie die Ausgabe des Mixers als Ganzes mit kAudioUnitScope_Output einstellen. –

Antwort

0

Mischer schwierig sind, weil in einer Weise, die Kanäle, die Audio-Pause stream paradigm, das core audio einrichtet, plus ist für die Koppelpunkte anders als die Input/Output-Master und unterschiedlich für den globalen Master.

Basierend auf dem Code, den Sie angegeben haben, und vorausgesetzt, Sie übergeben 0 für trackIndex, würde ich auf die Volumes mit der Eigenschaft kAudioUnitProperty_MatrixLevels (was kann schwierig zu bedienen sein, so lassen Sie mich wissen, wenn Sie Hilfe dabei benötigen). Es ist möglich, dass die Crosspoint-Pegel nicht korrekt eingestellt sind und dass das Senken 0 (welches eigentlich Bus 0 Kanal 0 ist) alles beeinflusst, was Sie hören.

Falls es nicht klar ist, ist die Art und Weise, wie das Bus/Kanal-Paradigma funktioniert, ein zusammenhängendes Element innerhalb des Mischers. Also, wenn Sie 4 Busse mit Stereokanälen haben und den rechten Kanal von Bus 0 beeinflussen wollten, wäre das der Mixerkanal 7.

Verwandte Themen