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(); }; };
公開日: 2018/08/17
役に立ちましたか?