So, I tried to configure nodes for each track, but that didn’t change anything. Soundfont is installed only for the first samplerUnit . This is how I set the chart:
AudioComponentDescription MixerUnitDescription; MixerUnitDescription.componentType = kAudioUnitType_Mixer; MixerUnitDescription.componentSubType = kAudioUnitSubType_MultiChannelMixer; MixerUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple; MixerUnitDescription.componentFlags = 0; MixerUnitDescription.componentFlagsMask = 0; AudioComponentDescription cd = {}; cd.componentManufacturer = kAudioUnitManufacturer_Apple; cd.componentType = kAudioUnitType_MusicDevice; // type - music device cd.componentSubType = kAudioUnitSubType_Sampler; // sub type - sampler to convert our MIDI result = NewAUGraph (&_processingGraph); result = AUGraphAddNode(self.processingGraph, &MixerUnitDescription, &mixerNode); result = AUGraphAddNode (self.processingGraph, &cd, &samplerNode); result = AUGraphAddNode (self.processingGraph, &cd, &samplerNode2); cd.componentType = kAudioUnitType_Output; // Output cd.componentSubType = kAudioUnitSubType_RemoteIO; // Output to speakers result = AUGraphAddNode (self.processingGraph, &cd, &ioNode); result = AUGraphOpen (self.processingGraph); result = AUGraphConnectNodeInput (self.processingGraph, samplerNode, 0, mixerNode, 0); result = AUGraphConnectNodeInput (self.processingGraph, samplerNode2, 0, mixerNode, 1); result = AUGraphConnectNodeInput (self.processingGraph, mixerNode, 0, ioNode, 0); result = AUGraphNodeInfo (self.processingGraph, samplerNode, 0, &_samplerUnit); result = AUGraphNodeInfo (self.processingGraph, samplerNode2, 0, &_samplerUnit2); result = AUGraphNodeInfo (self.processingGraph, ioNode, 0, &_ioUnit);
This is an example of the method on Apple Developer pages that I changed to assign soundfont to a specific samplerUnit :
-(OSStatus) loadFromDLSOrSoundFont: (NSURL *)bankURL withPatch: (int)presetNumber withAudioUnit:(AudioUnit)auUnit{ OSStatus result = noErr;
Then I did this twice to get each track in musicSequence :
if(MusicSequenceFileLoad(tmpSequence, (__bridge CFURLRef)midiFileURL, 0, 0 != noErr)) { [NSException raise:@"play" format:@"Can't load MusicSequence"]; } MusicSequenceGetIndTrack(tmpSequence, 0, &tmpTrack); MusicSequenceNewTrack(musicSequence, &track); MusicTimeStamp trackLen = 0; UInt32 trackLenLen = sizeof(trackLen); MusicTrackGetProperty(tmpTrack, kSequenceTrackProperty_TrackLength, &trackLen, &trackLenLen); MusicTrackCopyInsert(tmpTrack, 0, trackLenLen, track, 0);
And finally:
MusicTrackSetDestNode(track, samplerNode); MusicTrackSetDestNode(track2, samplerNode2);
But this will not be assigned to the samplerUnit2 sound screen:
[self loadFromDLSOrSoundFont: (NSURL *)presetURL2 withPatch: (int)0 withAudioUnit:self.samplerUnit2];
Appointment samplerUnit works fine. Any ideas what I'm missing here?