読者です 読者をやめる 読者になる 読者になる

Traktor + Max/Jitterで楽曲に合わせた映像のポン出しを自動化する

要約

[背景]

  • クラブでは楽曲に合わせてVJさんが映像を出してくれる

[目的]

  • 一人でおうちDJをする際にもアニソンにはOP動画やミュージッククリップといった映像を出したい

[提案]

  • Traktorのbroadcast経由で楽曲情報を持ってきてMax/Jitterで映像を出す

[結論]

  • 出来たけど,再生中の楽曲情報の精度が良くない

詳細

Traktorには直接に再生中の楽曲情報や再生時間を取れる開発者向けのAPIや,プラグインを書くためのSDKが今のところない.しかし,broadcasting機能があり,楽曲名やアーティスト名などかなり限定的な情報のみであればjson形式で取得出来るようなのでこれを用いる.

Traktorのbroadcastingはicecast streaming protocolで配信されるので,icecastのサーバを立てる. Macであればbrewを使えば簡単に入る.

$ brew install icecast

configファイル内のhackmeとなっている初期パスワードを変更する.

$ vim /usr/local/etc/icecast.xml

サーバの立ち上げ

$ icecast -c /usr/local/etc/icecast.xml

Traktorのbroadcasting設定を行う.下記は設定例.Passwordは先程設定したものを入力する.

f:id:fimbul:20160818053857p:plain

設定後,Broadcastingを有効にするには画面右上のアンテナマークを押す.アンテナマークが点滅する場合,icecastサーバが立ち上がっていないか設定に誤りがある.

f:id:fimbul:20160818054009p:plain

アンテナが点灯した状態で楽曲を再生すると,127.0.0.1:8000/status-json.xslにアクセスすることでjson形式で楽曲情報を取得出来る.

最後にMaxパッチの実装.ローカルサーバからjsonファイルを取得して,楽曲情報をパースし適切な映像を再生するパッチを作成する.

おおまかな解説をすると,Maxでは標準でmaxurlというcurlのラッパオブジェクトが使えるのでデータの取得は非常に簡単に出来る.jsonのパースはjsオブジェクトを使えばjavascriptを使えるのでJSON.parseで済む.楽曲タイトルと再生すべき動画のパスの対応表を用意しておき,一定間隔でjsonファイルのポーリングを行い,再生中の楽曲に変更があればjit.qt.movieに読み込むべき動画ファイルのパスを渡し映像を切り替える.

maxpatソースコード (ファイルのパスなどは適宜修正が必要) autovj.js · GitHub

f:id:fimbul:20160818054913p:plain

再生判定の調整

Mixのために次の曲を裏で再生していると,そちらが再生されているとみなされて意に反して動画が切り替わってしまうことがある. Traktorの再生判定は,Preferences -> Transport内のPlay Countの値を再生時間が上回ったら再生とみなす,という仕組みらしく10秒など短く設定しているとこのようなことが起きやすい.

次の記事などを参考にPlay Countを大きめに設定すると少しマシになる. Traktor 再生済みチェックの条件を設定 | Ambient Music for Life

とはいえやはり再生判定の問題は根本的には解決しないし,今度は映像の切り替わりタイミングが遅くなりがちに….

所詮おうちで遊ぶためなのでこれでも良いけれど,真面目に自動化するなら再生中の音データを直接取ってきて直接手元で楽曲判定をする方が良さそう.