Получить идентификатор от MIDI-устройств на C++

StackOverflow https://stackoverflow.com/questions/1962281

  •  21-09-2019
  •  | 
  •  

Вопрос

Я музыкант и программист и хотел бы создать свою собственную программу для создания музыки.Прежде чем создавать графический интерфейс, я начну с консольного приложения на 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;
    }
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top