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 を埋めるには 2 番目のパラメーターとしてデバイス番号 (ここでも 0 から N-1 が含まれます) を使用して midiInOpen を呼び出します。

同じ概念が出力デバイスにも適用されますが、名前の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 に答える