FLStudio20.7からの新機能でMIDIスクリプトを利用してして任意のMIDIコントローラーでFL Studioの動作を細かくカスタマイズできるようになりました。今回はMIDIコントローラーの好きなボタンやパッドに再生/一時停止、録音の開始/停止などの基本的な機能を割り当てていこうと思います。
スクリプトファイルの準備
まず初めにスクリプトファイルを作成するHardwareフォルダに移動します。デフォルトでFLStudioをインストールされている方は次の場所になると思います。
C: \ ユーザー \ ユーザー名 \ Documents \ Image-Line \ FL Studio \ Settings \ Hardware
Hardwareフォルダに移動したらスクリプトファイルを置くフォルダを作成します。フォルダ名は任意の名前を付けることができますが使用しているデバイスの名前を付けることをお勧めします。次に作成したフォルダに移りフォルダ内に新しい.txtファイルを作成し(右クリック->新規->テキストドキュメント)、メモ帳などのテキストエディタで開きます。一行目に次のコードを書いてください。
#name=devicename
コードを書き込みましたらdevice_name.pyという名前を付けて保存します。ファイル名はdevice_で始まり、.pyで終わることが重要です。間にあるnameは好きな名前にすることができますが、使用しているデバイスの名前を使用することを再度お勧めします。
注:ファイルを保存する際はファイルの種類をテキスト文章からすべてのファイルに変えて保存してください。
スクリプトファイルが正しく設定されているかどうかを確認するため。FL Studioを起動し、F10を押してMIDI設定に移動し、ドロップダウンメニューのController typeをクリックします。
先程作成したスクリプトファイルのファイル名(device_name.pyのnameの部分が表示されています)があるか確認してください、一番右の列にあると思います。ファイルがあれば成功です。
FLStudioの準備
MIDIコントローラを繋ぎFL Studioを起動し、F10を押してMIDI設定に移動してドロップダウンメニューのController typeの中から作成したスクリプトファイルを選択します。
次にFL StudioのVIEWメニューからScript outputを選択します。
Script outputウィンドウにはMIDIコントローラーから送られてきたメッセージを表示させることが出来ます。
スクリプトファイル作成
それではメッセージを表示させるためにスプリクトファイルにコードを書き込んでいきます。Edit scriptボタンをクリックし、テキストエディタを開き次のコードを追記して下さい(コピーアンドペーストで構いません)。
1 2 3 |
def OnNoteOn(event): event.handled = False print(event.status, event.data1) |
最初の行は関数を定義しいます。これは基本的に、MIDIキーが押されたときに実行されるスクリプトのラッパーです。eventという言葉は、MIDIイベントのすべての情報(特にどのキーが押されたか)を含むパラメーターです。2行目は、イベントを認識しない場合は何もしないようにFL Studioに指示をしています。3行目は、Script outputウィンドウにテキストを出力します。ここまで出来たらテキストエディタを閉じ、Reload scriptボタンをクリックしスクリプトの再読み込みを行います(スクリプトを書き換えたり追加した際にはReload scriptボタンをクリックすることを忘れないでください)。
先ほどのコードを記述したことによってMIDIコントローラ―の鍵盤やパッド、ボタンなどを押すとScript outputウィンドウに数字が2種類表示されるはずです。左の数値はどのチャンネルからNote onを受け取ったか表す数値です。右の数値はNote Numberを表しています。この2つの値を使いどのボタンがが押されたかをFLStudioに知らせ指示します。
ではこの2つの数値を使い再生/一時停止ボタンのクリックをシミュレートしていきます。スクリプトファイルに以下のコードを追記します。
1 2 3 4 5 6 7 8 9 10 |
import transport play = 91 def OnNoteOn(event): event.handled = False if event.status == 144: if event.data1 == play: transport.start() event.handled = True |
最初の行でトランスポートモジュールがインポートされ、このモジュールによって提供されるすべての機能(再生/一時停止、録音の開始/停止など)を使用できます。次の変数play = 91
の数値を再生/一時停止ボタンにしたい鍵盤やボタンのNote Number(Script outputウィンドウに表示された右側の数値)に書き換えてください。
同じくevent.status == 144
をScript outputウィンドウに表示された左側の数値に書き換えます。
最初のif文if event.status == 144:
でどのチャンネルからNote onが送られてきたか判別し、(この場合の数値144はチャンネル1からのNote onです。数値からどの情報が送られているか判別するにはこちらのサイトExpanded MIDI 1.0 Messages ListからSTATUS BYTEを参照してください。)チャンネルがあっていれば次のif文if event.data1 == play:
で送られてきたNote Numberが変数playと同じかを確認し、意図した数値であればtransport.start()
(再生/一時停止コマンド)が実行されます。最後の行event.handled = True
でイベントが処理されたことをFLStudioに通知しています。この行を省略すると鍵盤を割り当てた場合は再生/一時停止に続けて鍵盤の音も鳴ります。
最後にまとめ
今回紹介したコードの書き方はあくまで一例です、もし参考になれば幸いです。もっと詳しく知りたい方やほかの機能も割り当てたい方は公式サイトのリファレンスをお読みください。最後に再生/一時停止、録音の開始/停止を実装したAKAI APC KEY 25向けのコードを置いておきます。数値をお使いのMIDIコントローラーに置き換えれば他の機器でも使用できると思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#name=APCKEY25 import transport play = 91 #再生/一時停止 stop = 81 #停止 record = 93 #録音の開始/停止 def OnNoteOn(event): event.handled = False print(event.status, event.data1) if event.status == 144: #チャンネル設定 if event.data1 == play: transport.start() event.handled = True elif event.data1 == stop: transport.stop() event.handled = True elif event.data1 == record: transport.record() event.handled = True |