Получить идентификатор с MIDI-устройств в C ++ - PullRequest
0 голосов
/ 26 декабря 2009

Я музыкант и программист и хотел бы создать свою собственную программу для создания музыки. Я начну с консольного приложения на C ++, прежде чем создавать GUI.

Я новичок в C / C ++ и знаю, как создать базовое консольное приложение, и прочитал об Win32 API.

Я искал 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 используют этот параметр.

Я знаю, что это не самая очевидная тема, но было бы здорово, если бы кто-то мог мне помочь.

Спасибо:)

Ответы [ 2 ]

4 голосов
/ 26 декабря 2009

Чтобы получить информацию, вы вызываете цикл midiInGetDevCaps , причем первый параметр варьируется от 0 до результата midiInGetNumDevs. Каждый вызов заполняет структуру MIDIINCAPS (вы передаете указатель на структуру при вызове функции) информацией о N-м устройстве. Чтобы открыть устройство и заполнить HMIDIIN, необходимый для других вызовов, вы набираете midiInOpen с номером устройства (опять же, с 0 по N-1 в комплекте) в качестве второго параметра. *

Та же концепция применима к устройствам вывода, за исключением того, что имена имеют Out вместо In (и для структур OUT вместо IN).

0 голосов
/ 28 декабря 2009

Хорошо, я понял это. Я не знал, что 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;
    }
}

И спасибо за помощь!

...