Logic Pro X: JavaScript Eventオブジェクトを使う

JavaScript Eventオブジェクトを使う

HandleMIDI関数が呼び出されると、Eventオブジェクトは1つのMIDIイベントを表し、スクリプト内で呼び出せる複数のメソッドを実装します。

Eventオブジェクトから直接インスタンスが作成されることはなく、Eventオブジェクトはイベントに特有の以下のメソッド、プロパティ、およびタイプのプロトタイプになっています。

ヒント:JavaScriptの「new」キーワードを使用すると、任意のタイプのEventオブジェクトの新しいインスタンスを生成できます。

Eventのメソッド

  • Event.send(): イベントを送信します。

  • Event.sendAfterMilliseconds(number ms): 指定の値が経過するとイベントを送信します(整数または浮動小数点数を指定できます)。

  • Event.sendAtBeat(number beat): ホストのタイムライン上の指定の拍(浮動小数点数)でイベントを送信します。

  • Event.sendAfterBeats(number beat): 上記と同じですが、拍の値は現在位置からの拍単位のディレイとして使用されます。

  • Event.trace(): イベントをプラグインのコンソールに表示します。Traceオブジェクトを使うを参照してください。

  • Event.toString(): イベントを文字列で返します。

イベントのプロパティ

  • Event.toarticulationID(integer number): 0-254のアーティキュレーションIDを設定します。

  • Event.channel(number): MIDIチャンネル1-16を設定します。

  • Event.beatPos: イベントの拍の正確な位置を取得します。

イベントタイプ

Eventオブジェクトは以下のイベントタイプのプロトタイプになっています。すべてのイベントタイプが、上記のメソッドと、チャンネルのプロパティを継承します。

イベントタイプとそのプロパティは以下の通りにHandleMIDIに渡されます:

  • NoteOn.pitch(integer number): 1-127のピッチ。

  • NoteOn.velocity(integer number): 0-127のベロシティ。ベロシティ値0は、ノートオンではなくノート・オフ・イベントとして解釈されます。

  • NoteOff.pitch(integer number): 1-127のピッチ。

  • NoteOff.velocity(integer number): 0-127のベロシティ。

  • PolyPressure.pitch(integer number): 1-127のピッチ。

  • PolyPressure.value(integer number): 0-127のプレッシャー値を定義します。

  • ControlChange.number(integer number): 0-127のコントローラ番号。

  • ControlChange.value(integer number): 0-127のコントローラ値。

  • ProgramChange.number(integer number): 0-127のプログラムチェンジ番号。

  • ChannelPressure.value(integer number): 0-127のアフタータッチ値。

  • PitchBend.value(integer number): -8192-8191の14ビットのピッチベンド値。値0は中央です。

  • TargetEvent.target(string): ユーザによる定義が可能なMIDI CCメッセージを作成します。またはプラグインのパラメータを制御します。

  • TargetEvent.value(float): ターゲットの値を設定します。

対応するチュートリアル設定を読み込んで、スクリプトエディタにスクリプトを表示してください。コードおよびコメントの構文構造とレイアウトの理解に役立ちます。スクリプトエディタを使うを参照してください。

チュートリアルスクリプト7: イベントの作成

この例では、受信した各MIDIイベントをモジュレーション・コントロール・チェンジ・メッセージに置き換えます。

  • 「/*」の後ろのテキストは、JavaScriptコードについて説明するコメントを示します。

    ヒント:JavaScriptの「new」キーワードを使用すると、任意のタイプのEventオブジェクトの新しいインスタンスを生成できます。

    function HandleMIDI() { var cc = new ControlChange; /* make a new control change message */ cc.number = 1; /* set it to controller 1 (modulation) */ cc.value = 100; /* set the value */ cc.send(); /* send the event */ cc.trace(); /* print the event to the console */ }

チュートリアルスクリプト8: イベントの変更

この例では、受信した各MIDIイベントをC3ノートのオン/オフに置き換えます。NeedsTimingInfo変数も使用します。JavaScript TimingInfoオブジェクトを使うを参照してください。

  • 「/*」の後ろのテキストは、JavaScriptコードについて説明するコメントを示します。

    ヒント:JavaScriptの「new」キーワードを使用すると、任意のタイプのEventオブジェクトの新しいインスタンスを生成できます。

    var NeedsTimingInfo = true; /* needed for .sendAfterBeats() to work */ function HandleMIDI() { var on = new NoteOn; /* make a new note on */ on.pitch = 60; /* set its pitch to C3 */ on.send(); /* send the note */ var off = new NoteOff(on); /* make a note off using the note on to initialize its pitch value (to C3) */ off.sendAfterBeats(1); /* send a note off one beat later */ }

チュートリアルスクリプト15: プラグインの制御

ユーザによる定義が可能なMIDI CCメッセージを作成したり、プラグインのパラメータを制御したりできます。TargetEventは、メニューから変更されるパラメータを読み取ります。ユーザは割り当て先のMIDI CCを選択できます。または、「Learn Plug-In Parameter」機能を使い、Scripterと同じチャンネルストリップにあってScripterよりも後(下)に挿入されているプラグインのパラメータを割り当てることもできます。選択した割り当て先はプラグインの設定と共に保存されます。

  • 「/*」の後ろのテキストは、JavaScriptコードについて説明するコメントを示します。

    ヒント:JavaScriptの「new」キーワードを使用すると、任意のタイプのEventオブジェクトの新しいインスタンスを生成できます。

    TargetEvent properties: TargetEvent.target(string) /* Name of target menu entry */ TargetEvent.value(float) /* Value of set Target from 0.0 to 1.0 */

    以下のコードではモジュレーションホイールでプラグインのパラメータを制御します。チュートリアルスクリプト15の機能をテストするには、同じチャンネルにプラグインまたはソフトウェア音源を挿入し、スクリプトを実行します。メニューから「Learn Plug-In Parameter」を選択します。続いて、プラグインの任意のパラメータをクリックし、モジュレーションホイールで制御します。

    モジュレーションホイールによる制御対象についてのメニューを作成するには、メニュー項目に名前を付け、この項目を「target」タイプに設定します。

    var PluginParameters = [ /* parameter 0 */ { name:"Modwheel Target", type:"target" }];

    チュートリアルスクリプト15では、ScripterがMIDIイベントを受信するたびにHandleMIDIを呼び出します。以下のコードでは、メニューで選択されたターゲットにモジュレーションホイールをマップし直します。

    function HandleMIDI(incomingEvent) { /* remap modulation to target selected in menu and check for incoming CC event with number 1 (Modwheel) */ if ((incomingEvent instanceof ControlChange) && (incomingEvent.number == 1)) { var newEvent = new TargetEvent(); /* create new Target event */ newEvent.target = "Modwheel Target"; /* name the menu entry to be used by this event */ newEvent.value = incomingEvent.value / 127; /* rescale from 0..127 to 0.0...1.0 */ newEvent.send(); /* send the event */ } else { /* send all other events */ incomingEvent.send(); }; };
公開日: 2019/09/13
役に立ちましたか?