Last active
January 1, 2022 11:10
-
-
Save rraallvv/4b28e6e1f88b55beeba6 to your computer and use it in GitHub Desktop.
Multichannel CoreMidi Example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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