代码之家  ›  专栏  ›  技术社区  ›  Midas

在C++中从MIDI设备中获取ID

  •  0
  • Midas  · 技术社区  · 16 年前

    我是一名音乐家和程序员,我想创建自己的程序来制作音乐。 在制作GUI之前,我将从C++中的控制台应用程序开始。

    我在研究Win32应用程序中多媒体的MSDN,发现了许多MIDI功能: http://msdn.microsoft.com/en-us/library/dd798495(VS.85).aspx

    #include <windows.h>
    #include <iostream>
    using namespace std;
    int main() {
        cout << midiInGetNumDevs();
        cout << " MIDI devices connected" << endl;
        return 0;
    }
    

    但现在我想知道这些设备是如何被调用的 midiInGetID 我认为功能和 while HMIDIIN

    我知道这不是最明显的话题,但如果有人能帮我,那就太好了。

    谢谢:)

    2 回复  |  直到 10 年前
        1
  •  4
  •   Alex Martelli    16 年前

    midiInGetDevCaps ,第一个参数从0到 midiInGetNumDevs 排除。每一次呼叫都会填充一个 MIDIINCAPS struct(调用函数时传递指向struct的指针)以及关于第n个设备的信息。到 打开 一个设备,并填写其他呼叫所需的HMIDIIN,您呼叫 midiInOpen 第二个参数是设备编号(同样包括0到N-1)。

    同样的概念也适用于输出设备,只是名称有 Out 而不是 In OUT 而不是 IN ).

        2
  •  0
  •   Midas    16 年前

    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;
        }
    }
    

    谢谢你的帮助!