ich wollte selber ein kleines Software Tool schreiben, das ich über mein MIDI Keyboard ansteuern können soll. Jetzt weiß ich aber nicht, wie ich an die Daten kommen soll, die das Keyboard an meinen Rechner schickt.
Welche Programmiersprache verwendest du denn? Wenn du C++ unter Windows nimmst, müssen mmsystem.h und winmm.lib eingebunden werden. Dann geht's so weiter:
lege eine Callbackfunktion an, die später die Daten empfängt:
void CALLBACK MidiInProc( HMIDIIN hMidiIn, UINT wMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2 );
Hole dir die Zahl der Eingabegeräte:
UINT midiInGetNumDevs(void);
dann legst du ein Array von MIDIINCAPS-Strukturen an und füllst diese mit
MMRESULT midiInGetDevCaps( UINT_PTR uDeviceID, LPMIDIINCAPS lpMidiInCaps, UINT cbMidiInCaps );
dann suchst du dir ein Eingabegerät aus, oder lässt das den Benutzer machen und öffnest es:
MMRESULT midiInOpen( LPHMIDIIN lphMidiIn, UINT uDeviceID, DWORD_PTR dwCallback, DWORD_PTR dwCallbackInstance, DWORD dwFlags );
du brauchst dabei die Adresse der oben genannten Callbackfunktion (DWORD_PTR dwCallback), die jedes Mal beim Empfang von MIDI-Daten aufgerufen wird. Das kann etwas knifflig werden, weil bei objektorientierter Programmierung diese Adresse zur Compilezeit noch gar nicht feststeht, weil das Objekt ja noch nicht angelegt wurde.
mit...
MMRESULT midiInStart( HMIDIIN hMidiIn ); // ...wird der Empfangsvorgang gestartet
In der Callbackfunktion kannst du dann die MIDI-Daten weiterverarbeiten. Die ist aber etwas zeitkritisch: wenn du die Daten z.B. am Bildschirm ausgeben willst, empfiehlt es sich, sie über SendMessage o.ä. in die Message-Queue zu senden, dort wieder abzufangen und auszugeben.
Ich habe hier eine Testversion von Visual C++ und das funktioniert sehr gut so.
Harald