Skip to content

Instantly share code, notes, and snippets.

@rraallvv
Last active January 1, 2022 11:10
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rraallvv/4b28e6e1f88b55beeba6 to your computer and use it in GitHub Desktop.
Save rraallvv/4b28e6e1f88b55beeba6 to your computer and use it in GitHub Desktop.
Multichannel CoreMidi Example
#include <iostream>
#include <AudioToolbox/AudioToolbox.h>
#include "CAComponent.h"
int main (int argc, char * const argv[]) {
AUGraph graph;
AUNode outputNode, mixerNode, dlsNodeA, dlsNodeB, dlsNodeC;
AudioUnit dlsA, dlsB, dlsC;
//Setup Graph
NewAUGraph(&graph);
CAComponent output('auou','ahal','appl');
AUGraphAddNode(graph, &(output.Desc()), &outputNode);
AUGraphOpen(graph);
AUGraphInitialize(graph);
AUGraphStart(graph);
//New NODES
CAComponent dls('aumu','dls ','appl');
AUGraphAddNode(graph, &(dls.Desc()), &dlsNodeA);
AUGraphNodeInfo(graph, dlsNodeA, NULL, &dlsA);
AUGraphAddNode(graph, &(dls.Desc()), &dlsNodeB);
AUGraphNodeInfo(graph, dlsNodeB, NULL, &dlsB);
AUGraphAddNode(graph, &(dls.Desc()), &dlsNodeC);
AUGraphNodeInfo(graph, dlsNodeC, NULL, &dlsC);
CAComponent mixer('aumx','smxr','appl');
AUGraphAddNode(graph, &(mixer.Desc()), &mixerNode);
//Connect NODES
AUGraphConnectNodeInput(graph,mixerNode,0,outputNode,0);
AUGraphConnectNodeInput(graph,dlsNodeA,0,mixerNode,0);
AUGraphConnectNodeInput(graph,dlsNodeB,0,mixerNode,1);
AUGraphConnectNodeInput(graph,dlsNodeC,0,mixerNode,2);
//Update Graph
AUGraphUpdate(graph,NULL);
//send program changes and notes
//only to DLS A using 3 different channels
MusicDeviceMIDIEvent(dlsA, 0xC0, 40, 0, 0);
MusicDeviceMIDIEvent(dlsA, 0xC1, 9, 0, 0);
MusicDeviceMIDIEvent(dlsA, 0xC2, 104, 0, 0);
sleep(1);
MusicDeviceMIDIEvent(dlsA, 0x90, 60, 80, 0);
sleep(1);
MusicDeviceMIDIEvent(dlsA, 0x80, 60, 0, 0);
MusicDeviceMIDIEvent(dlsA, 0x91, 60, 80, 0);
sleep(1);
MusicDeviceMIDIEvent(dlsA, 0x81, 60, 0, 0);
MusicDeviceMIDIEvent(dlsA, 0x92, 60, 80, 0);
sleep(1);
MusicDeviceMIDIEvent(dlsA, 0x82, 60, 0, 0);
//send program changes and notes
//to each DLS on channel 0
MusicDeviceMIDIEvent(dlsA, 0xC0, 40, 0, 0);
MusicDeviceMIDIEvent(dlsB, 0xC0, 9, 0, 0);
MusicDeviceMIDIEvent(dlsC, 0xC0, 104, 0, 0);
sleep(1);
MusicDeviceMIDIEvent(dlsA, 0x90, 60, 80, 0);
sleep(1);
MusicDeviceMIDIEvent(dlsA, 0x80, 60, 0, 0);
MusicDeviceMIDIEvent(dlsB, 0x90, 60, 80, 0);
sleep(1);
MusicDeviceMIDIEvent(dlsB, 0x80, 60, 0, 0);
MusicDeviceMIDIEvent(dlsC, 0x90, 60, 80, 0);
sleep(1);
MusicDeviceMIDIEvent(dlsC, 0x80, 60, 0, 0);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment