Aquí hay una aplicación CoreMIDI OS X extremadamente simple que envía datos MIDI. El problema es que no funciona. Compila bien y corre. No informa errores y no falla. La fuente creada se vuelve visible en el monitor MIDI. Sin embargo, no se reciben datos MIDI.¿Por qué este simple programa CoreMIDI no produce salida MIDI?
¿Podría alguien decirme qué estoy haciendo mal aquí?
#include <CoreMIDI/CoreMIDI.h>
int main(int argc, char *args[])
{
MIDIClientRef theMidiClient;
MIDIEndpointRef midiOut;
MIDIPortRef outPort;
char pktBuffer[1024];
MIDIPacketList* pktList = (MIDIPacketList*) pktBuffer;
MIDIPacket *pkt;
Byte midiDataToSend[] = {0x91, 0x3c, 0x40};
int i;
MIDIClientCreate(CFSTR("Magical MIDI"), NULL, NULL,
&theMidiClient);
MIDISourceCreate(theMidiClient, CFSTR("Magical MIDI Source"),
&midiOut);
MIDIOutputPortCreate(theMidiClient, CFSTR("Magical MIDI Out Port"),
&outPort);
pkt = MIDIPacketListInit(pktList);
pkt = MIDIPacketListAdd(pktList, 1024, pkt, 0, 3, midiDataToSend);
for (i = 0; i < 100; i++) {
if (pkt == NULL || MIDISend(outPort, midiOut, pktList)) {
printf("failed to send the midi.\n");
} else {
printf("sent!\n");
}
sleep(1);
}
return 0;
}
en mil años ¿pensaría usar MIDIReived para enviar MIDI? Gracias por la excelente explicación. – sixohsix
Tiene más sentido si se piensa en una fuente MIDI en el contexto de un controlador de dispositivo MIDI: en ese caso, el controlador recibió algo de MIDI (por cable), y le está diciendo a CoreMIDI al respecto. Las fuentes virtuales MIDI se agregaron más tarde. –
+1 eres un regalo del cielo, Kurt. –