いるかアイス日記

いるかアイスの日記

Traktor Pro 2とProcessingの連携(2)

前回の記事:Traktor Pro 2とProcessingの連携 - いるかアイス日記

はじめに

前回は「TraktorのツマミをいじったらProcessingでインタラクティブになにか描画してくれるような事」をやりました。つまりTraktor→Processingでしたが、今回はその逆で、Processing側でなにか操作したらTraktorが反応するみたいな事をやってみたいと思います。

協力:id:mactkg (/ ̄ー ̄)/

実際にやってみる

Traktor のI/O設定

※ここは前回と同じですが一応書いておきます。

  1. Traktor画面でPreferencesを開く(⌘+,)。
  2. Device を addして Generic MIDI を選択
  3. In portとOut portをTraktor Virtualに選択

f:id:irucaice:20151222125344p:plain

Traktor マッピングの設定

  1. 再びTraktor画面でPreferencesを開く(⌘+,)。
  2. Assignment TableでAdd inを押してcontrolを追加。今回はPlay/Pause(Deck/Common)をマッピングします。
  3. Device Mappingでこの操作をどの信号に割り当てるか指定します。今回はCh01.CC.000にマッピング

前回はNoteにマッピングしたのですが、値の変化のみであるCC(Controll Change)の方がパラメタだけやり取りするのに向いているっぽいのでこっちを使います。

f:id:irucaice:20160103222722p:plain

Processingの設定

  1. promidi というProcessingのライブラリの準備 ここのライブラリを落としておきます。(前回と同じです) http://creativecomputing.cc/p5libs/promidi/

  2. 次のコードを書く

import processing.opengl.*;
import promidi.*;

MidiIO midiIO;
MidiOut midiOut;

int sw = 0;//オンオフスイッチ

void setup() {
  size(300, 300);
  background(0);
  smooth();

  //get an instance of MidiIO
  midiIO = MidiIO.getInstance(this);
  //print a list with all available devices
  midiIO.printDevices();

  //getMidiOut(midiChannel, outDeviceNumber);
  midiOut = midiIO.getMidiOut(0, "Traktor Virtual Input"); //ch1
}

void draw() {
  background(0);
  if (sw==1)fill(100, 190, 255);
  else fill(255);
  ellipse(width/2, height/2, 100, 100);
}

//ここでMIDIを送信!!!!!
void sendMIDI(int value) {
  Controller c = new Controller(0, value);//000, 127(スイッチON)
  //↑トラクタ側でも000にマッピングしておくこと!!!
  midiOut.sendController(c);
}

void mousePressed() {
  if (dist(mouseX, mouseY, width/2, height/2)<50) {
    sw = 1-sw;//押す度にオンオフ切り替え
    println("sw="+sw);
    sendMIDI(0<sw ? 127 : 0);//←if(0<sw) { //true } else { //false }
  }
}

これで円をクリックすると、A Deckの曲が再生され、もう一回押すと止まる、といったインタラクションが実現できます!

f:id:irucaice:20160103223403p:plain

おわり。