0

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

我对 C/C++ 很陌生,知道如何制作基本的控制台应用程序,并且阅读过有关 Win32 API 的信息。

我正在研究 Win32 应用程序中的多媒体 MSDN,我发现了很多 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 函数都使用这个参数。

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

谢谢 :)

4

2 回答 2

5

要获取信息,您循环调用midiInGetDevCaps,第一个参数从包含的 0 到midiInGetNumDevs排除的结果不等。每次调用都会用有关第 N 个设备的信息填充一个MIDIINCAPS结构(在调用函数时传递一个指向该结构的指针)。打开一个设备,并填写其他调用所需的 HMIDIIN,您调用midiInOpen时将设备编号(同样,包括 0 到 N-1)作为第二个参数。

相同的概念适用于输出设备,除了名称有Out代替In(和结​​构OUT代替IN)。

于 2009-12-26T00:20:46.890 回答
0

好的,我想通了。我不知道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;
    }
}

并感谢您的帮助!

于 2009-12-28T13:45:34.853 回答