2009-12-26 92 views
0

我是一名音樂家和程序員,並且希望創建自己的音樂製作程序。 我將在製作GUI之前以C++中的控制檯應用程序開始。從C++的MIDI設備中獲取ID

我對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功能都使用此參數。

我知道這不是最明顯的話題,但如果有人能幫助我,這將是非常棒的。

謝謝:)

回答

4

來獲取信息,你循環中調用midiInGetDevCaps,從0變化的第一個參數包括到midiInGetNumDevs排除的結果。每次調用都會填充MIDIINCAPS結構體(您在調用函數時傳遞指向結構體的指針)和有關第N個設備的信息。至打開一個設備,並填寫其他呼叫所需的HMIDIIN,您呼叫midiInOpen與設備號碼(再次,從0到N-1)作爲第二個參數。

同樣的概念也適用於輸出裝置,除了名稱具有Out代替In(和用於結構OUT代替IN)。

+0

我在一個新的答案中回覆了你,因爲我不能在這裏標記我的代碼。 – Midas

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

並感謝您的幫助!