Получить идентификатор от MIDI-устройств на C++
Вопрос
Я музыкант и программист и хотел бы создать свою собственную программу для создания музыки.Прежде чем создавать графический интерфейс, я начну с консольного приложения на C++.
Я новичок в C/C++, знаю, как создать базовое консольное приложение, и читал об API Win32.
Я искал в MSDN информацию о мультимедиа в приложениях Win32 и нашел множество функций для MIDI: http://msdn.microsoft.com/en-us/library/dd798495(VS.85).aspx
Я могу узнать, сколько MIDI-устройств подключено таким образом:
#include <windows.h>
#include <iostream>
using namespace std;
int main() {
cout << midiInGetNumDevs();
cout << " MIDI devices connected" << endl;
return 0;
}
Но теперь я хочу узнать, как называются эти устройства, причём midiInGetID
функция, я думаю, и while
петля.Может ли кто-нибудь помочь мне с этим?Для функции требуется HMIDIIN
параметр, и я не знаю, как его получить, поскольку почти все функции MIDI используют этот параметр.
Я знаю, что это не самая очевидная тема, но было бы здорово, если бы кто-нибудь мог мне помочь.
Спасибо :)
Решение
Чтобы получить информацию, вы выполняете циклический вызов MidiInGetDevCaps, с первым параметром, варьирующимся от 0, включенным в результат midiInGetNumDevs
Исключенный.Каждый звонок заполняет МИДИИНКАПС struct (вы передаете указатель на структуру при вызове функции) с информацией о N-м устройстве.К открыть устройство и заполните HMIDIIN, необходимый для других вызовов, вы звоните мидиВОткрыть с номером устройства (опять же, от 0 до N-1) в качестве второго параметра.
Та же концепция применима и к устройствам вывода, за исключением того, что имена имеют Out
вместо In
(и для структур OUT
вместо IN
).
Другие советы
Хорошо, я понял это.я не знал midiInGetDevCaps
требует вызова его конкретных свойств, чтобы вернуть имя устройства.
Вот мой код:
#include <windows.h>
#include <iostream>
using namespace std;
int main() {
unsigned int devCount = midiInGetNumDevs();
cout << devCount << " MIDI devices connected:" << endl;
MIDIINCAPS inputCapabilities;
for (unsigned int i = 0; i < devCount; i++) {
midiInGetDevCaps(i, &inputCapabilities, sizeof(inputCapabilities));
cout << "[" << i << "] " << inputCapabilities.szPname << endl;
}
}
И спасибо за вашу помощь!