質問
私はミュージシャンでありプログラマーであり、音楽を作るための独自のプログラムを作成したいと考えています。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 関数がこのパラメータを使用するためです。
これが最も明白なトピックではないことは承知していますが、誰かが私を助けてくれれば幸いです。
ありがとう :)
解決
情報を取得するには、呼び出しをループします midiInGetDevCaps, 、最初のパラメータは 0 から次の結果まで変化します。 midiInGetNumDevs
除外されます。通話ごとに、 MIDIINCAPS N 番目のデバイスに関する情報を含む struct (関数を呼び出すときに構造体へのポインタを渡します)。に 開ける デバイスを指定し、他の呼び出しに必要な HMIDIIN を入力して呼び出します。 ミディインオープン 2 番目のパラメータとしてデバイス番号 (ここでも 0 ~ N-1 が含まれます) を使用します。
同じ概念が出力デバイスにも当てはまりますが、名前が異なります。 Out
の代わりに In
(そして構造については OUT
の代わりに IN
).
他のヒント
[OK]を私はそれを考え出しました。私は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;
}
}
そして、あなたの助けに感謝します!