J'ai écrit une simple application de console MIDI en C++. Voici l'ensemble:C++: Obtenir des données à partir d'un message MIDI (DWORD)
#include <windows.h>
#include <iostream>
#include <math.h>
using namespace std;
void CALLBACK midiInputCallback(HMIDIIN hMidiIn, UINT wMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2) {
switch (wMsg) {
case MIM_MOREDATA:
case MIM_DATA:
cout << dwParam1 << " ";
PlaySound("jingle.wav", NULL, SND_ASYNC | SND_FILENAME);
break;
}
}
int main() {
unsigned int numDevs = midiInGetNumDevs();
cout << numDevs << " MIDI devices connected:" << endl;
MIDIINCAPS inputCapabilities;
for (unsigned int i = 0; i < numDevs; i++) {
midiInGetDevCaps(i, &inputCapabilities, sizeof(inputCapabilities));
cout << "[" << i << "] " << inputCapabilities.szPname << endl;
}
int portID;
cout << "Enter the port which you want to connect to: ";
cin >> portID;
cout << "Trying to connect with the device on port " << portID << "..." << endl;
LPHMIDIIN device = new HMIDIIN[numDevs];
int flag = midiInOpen(&device[portID], portID, (DWORD)&midiInputCallback, 0, CALLBACK_FUNCTION);
if (flag != MMSYSERR_NOERROR) {
cout << "Error opening MIDI port." << endl;
return 1;
} else {
cout << "You are now connected to port " << portID << "!" << endl;
midiInStart(device[portID]);
}
while (1) {}
}
Vous pouvez voir qu'il existe une fonction de rappel pour gérer les messages MIDI entrants provenant de l'appareil. Here is the description of this function on MSDN. Sur cette page, ils disent que la signification de dwParam1
et dwParam2
sont spécifiées au type de message (wMsg
), comme MIM_DATA
.
Si je consulte la documentation de MIM_DATA
, je peux voir que c'est un double mot (DWORD
?) Et qu'il a un «mot haut» et un «mot bas». Comment puis-je obtenir des données comme le nom du contrôle sur le périphérique MIDI qui a envoyé les données et quelle valeur il envoie?
J'apprécierais que quelqu'un puisse corriger mon code si cela peut être mieux fait.
Merci :)
C'est vraiment cool. :) Ca marche, je ne pensais pas que ce serait aussi simple! Et merci de donner une réponse aussi rapide et utile. – Midas
Merci pour votre note à propos de 'PlaySound'. C'était juste un essai pour utiliser cette fonction là-bas, donc je peux encore changer cela. – Midas