簡體   English   中英

從C ++的MIDI設備獲取ID

[英]Get ID from MIDI devices in C++

我是音樂家和程序員,並且想創建自己的程序來制作音樂。 在制作GUI之前,我將從C ++中的控制台應用程序開始。

我是C / C ++的新手,並且知道如何制作基本的控制台應用程序,並且已閱讀有關Win32 API的信息。

我一直在研究Win32應用程序中用於多媒體的MSDN,並且發現了很多MIDI功能: http : //msdn.microsoft.com/zh-cn/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的結果。 每次調用都使用第N個設備的信息填充MIDIINCAPS結構(在調用函數時將指針傳遞給該結構)。 打開設備並填充其他呼叫所需的HMIDIIN,請使用設備號(再次包括0到N-1)作為第二個參數來調用midiInOpen

相同的概念適用於輸出設備,除了名稱使用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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM