- Max for Live(以下m4l)のmax Midi effectを作成する。
- maxからudpsednオブジェクトを使って、Oscを出す。
- processingでoscP5というライブラリとその関連オブジェクトを使って、Oscを受信する。
- 受信したOSCを元に映像をトリガーする。
OSCを使ったmaxとprocessingの連携に関しては次の記事をまず読んでください。
(1〜2) M4Lの中のパッチ
noteinオブジェクトを使ってnote numberを抜き取る
noteinオブジェクトにMIDIを入力すると、3つの要素に分解して各outletから出力します。このoutletのうち、一番左からnote numberがでます。これを使用します。
この出力を、numberオブジェクトに入力すると数字が見えるのでわかりやすいでしょう。さらにこれを以下のように見た目(Appearance)の中のformatからMIDIに設定するとよりわかりやすくみえます。これは単に見た目が変わっただけで、あくまでデータの内容は数字であって(G#3)といった文字列になっているわけではありません。
LIVEの指定のトラックにMIDIクリップを作成して、MIDIを出す
M4LをさしているトラックにMIDIクリップを作成してMIDIを出力してください。いつもどおりの作曲の時にやっている方法でやるだけです。
udpsendオブジェクトを使ってデーター送る
「udpsend IPアドレス ポート番号」をつくり、データを送ります。ここでは同じパソコン内の通信ですのでIPアドレスの場所には「localhost」とし、ポート番号はなんでもいいのですが「12000」としました。
ちゃんと送れているかUDP TesterでReceiverのPortを12000にして確認してください。出し方は以下画像。ここではしっかり68が受信できています。
識別しやすいようにメッセージを加える
processing側で受信した際に、一体どんなデータが来たのかわかるように、識別用のラベル(メッセージ)を加えます。OSCにおいては「/任意の文字列」というものを加えることでメッセージとして認識されます。
そのために、データの冒頭に文字列を加えるにはprependオブジェクトを使用します。「prepend 文字列」という形式で作成します。またこの追加する文字列は「set 文字列」というメッセージをinletに入力することで、変更できます。「set anymessage」というメッセージオブジェクトがそれです。
これで「/midi1 60」という形式のデータを送れるようになりました。
3〜4 Processing側で受信し描写
次のコードをプロセシング側に作成。これで受信したMIDI note numberを画面に表示してくれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import oscP5.*;//OSC受信用のライブラリをインポート OscP5 oscP5;//受信用、OscP5クラスのoscP5と名前を持つ変数を作る。 String filter="/midi1";//フィルタリングするmessageをここで指定 String word="NO";//画面に出力する文字の初期値 void setup() { size(400,400); frameRate(25); //受信用のオブジェクト。ポート番号12000で受ける。 oscP5 = new OscP5(this,12000); // filterで設定したラベルを持つoscがきた場合にdrawTextという名前を持つファンクションを起動する //(this[定型文] , "test"[という名前のファンクションを起動する],"/test"[/testのラベルがきたときに]) oscP5.plug(this,"drawText",filter); } //〜.plugで指定したdrawTextという名前を持つ関数 public void drawText(int noteNum) {// int noteNumにデータの値を受ける println("### plug event method. received a message "+filter); println("received noteNum: "+noteNum);//theAを画面に出力する word="note_num "+str(noteNum);//画面に出力する文字列wordに受信したNumを文字列に変換していれる } void draw() { background(0); textSize(50); textAlign(CENTER);//中心揃え text(word,width/2,height/2);//wordを画面に出力 } |
今後の発展
m4lのからのデータをOSCを介してprocessingで受け取ることができるようになったので、あとはMIDIデータのうち、どのデータをどのように抽出するか、そしてprocessing側でどう映像に活用するか、という処理だけになります。
ではまた!
One comment