在 C++ 中从 MIDI 设备获取 ID
Posted
技术标签:
【中文标题】在 C++ 中从 MIDI 设备获取 ID【英文标题】:Get ID from MIDI devices in C++ 【发布时间】:2009-12-26 00:00:46 【问题描述】:我是一名音乐家和程序员,我想创建自己的程序来制作音乐。 在制作 GUI 之前,我将从 C++ 中的控制台应用程序开始。
我是 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 函数都使用这个参数。
我知道这不是最明显的话题,但如果有人可以帮助我,那就太好了。
谢谢:)
【问题讨论】:
【参考方案1】:要获取信息,您循环调用midiInGetDevCaps,第一个参数从包含的0 到排除midiInGetNumDevs
的结果不等。每次调用都会用关于第 N 个设备的信息填充一个 MIDIINCAPS 结构(在调用函数时传递一个指向该结构的指针)。要打开一个设备并填写其他调用所需的 HMIDIIN,您可以调用midiInOpen,并将设备编号(同样,包括 0 到 N-1)作为第二个参数。
同样的概念也适用于输出设备,只是名称用Out
代替In
(结构用OUT
代替IN
)。
【讨论】:
我在一个新的答案中回复了你,因为我不能在这里标记我的代码。【参考方案2】:好的,我想通了。我不知道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;
感谢您的帮助!
【讨论】:
以上是关于在 C++ 中从 MIDI 设备获取 ID的主要内容,如果未能解决你的问题,请参考以下文章