4

私はデルファイでアプリケーションを扱っています。アプリケーションから別のアプリケーションに出力を送信するには、 MIDIYOKEを使用する必要があります。2 つ目のアプリケーションは、バーチャル ピアノ キーボードです。

ここに画像の説明を入力

すべてのパッケージをインストールし、delphi で MIDI コンポーネントを取得しました。

MidiOutputPort1 および MidiInput1 コンポーネントを使用してみました。MIDIを弾いてみました。コードは以下の通りです。

procedure TForm3.Button1Click(Sender: TObject);
var
outputPort : TMidiOutputPort;
begin
 outputPort := TMidiOutputPort.Create (Nil);
   try
    outputPort.PortId := -1;
    outputPort.Active := True;
    outputPort.PatchChange(0, 127, 0); // Gunshot
    outputPort.NoteOn (1, 20, 127);    // Play note at full volume


    Sleep (1000);
    outputPort.NoteOff (0, 60, 0);
finally
outputPort.Free
end
end;

アプリケーションとバーチャル ピアノ キーボード間の接続を確立したいと考えていました。2 つの間の接続に MidiOutputPort1 と MidiInput1 を使用する方法。

4

2 に答える 2

2

両方のアプリケーションが MIDI 同期をサポートしている場合は、MIDI 同期を使用できます。その場合、MIDIYOKE がマスターで、Vpk がスレーブです。同期は、次のコマンドによって処理されます。

mc_MIDI_Timing_Clock           = $F8;
mc_MIDI_Start                  = $FA;
mc_MIDI_Continue               = $FB;
mc_MIDI_Stop                   = $FC;

遠い昔に使っていたので、知識が少しさびています。コードから収集できるのは、次のように機能することです。スレーブをスレーブ/同期受信/モードと呼ばれるものに設定します。次に、選択したチャネルに $FA を送信します。一部の (すべてではない) スレーブでは、特定のチャンネルをリッスンする必要があります。

各クロック ティックで、最初に $F8 を送信します。次に、$FB メッセージ (両方のデータ バイトがゼロ) が前にあるメッセージを送信します。準備ができたら、$FC を送ってください。

于 2012-05-12T13:20:08.057 に答える
2

ヨーク ポートの 1 つのポート番号を portid プロパティに入力する必要があると思います。

使用する ID を知るには、使用可能なポートを列挙する必要があります。これは、ハードウェアを追加したり、MIDI ヨークの構成を変更したりすると、ID が変わる可能性があるためです。

したがって、ユーザーが選択したポートを記憶するには、デバイス名を保存する必要があり、ユーザーがデバイスの名前を変更しないことを願っています:)

これがあなたの仕事を続けるのに十分に役立つかどうか教えてください。それ以外の場合は、あなたがしようとしていることを行う古いコードを掘り下げます。

于 2012-05-11T15:21:06.953 に答える