Device 33 Jitterの行列演算で制御するビート・ルーパー

基礎的な機能ブロックをつなぎ合わせることで独自のソフトウェアを構築できるCYCLING '74 Max。現在ネット上では数え切れないほどのパッチがシェアされており、それらのプレーヤーとしても活用が可能です。ここでは最先端のプロフェッショナルが作成したクールなパッチを紹介。パッチのサウンドを試聴できるほかファイルをWebよりダウンロードして、新しい音楽の制作に役立ててください

Device 33 Jitterの行列演算で制御するビート・ルーパー

▲プレゼンテーション・モード ▲プレゼンテーション・モード
▲jit.generation ▲jit.generation
▲メイン・パッチのエンジン部分 ▲メイン・パッチのエンジン部分

ファイルをダウンロードする→jit_generation_Grain-like_Looper

舞台上で鳴る音の長さを伸び縮みさせる

みなさま、はじめまして。神田川雙陽と申します。普段は劇団粋雅堂という劇団を主宰して、CYCLING '74 Maxを使った舞台音響のお仕事をしているほか、この春までは大学でアンドロイドの研究者をしていました。Maxとロボットというとつながりがイメージしにくいかもしれませんが、細やかな制御をユーザー・インターフェース付きで高速に実装できること、音響/照明などショウの各要素との連携が取りやすいことなど利点が多く、3月に行われたアンドロイド・オペラ『Scary Beauty』でもアンドロイドの制御にMaxを使いました。

演劇の音響の現場では予想外のことがよく起こります。その日の俳優の演技によって内容は多かれ少なかれ変わりますし、時間ドメインの表現でもないので尺も伸び縮みするのです。生で上演しているのでトラブルもよくあります。そういった時間の調整も音響の仕事の一つですが、特定の音が舞台上のキューになっていることも多く、“とりあえず何か鳴らしておけばなんとかなる”ともいかないのが難しいところ。舞台上で鳴っている音の長さを伸び縮みできればいいのですが……。

そこで今回は、1つのオーディオ・ファイルから無制限にフレーズを作り出すパッチを作りました。オーディオ・ファイルを読み込むか、外部から音声を録音すれば、あとは自動で4chの[groove~]が、設定したBPMにシンクするフレーズを出力し続けます。Max内部のトランスポートを用いてすべてのチャンネルがオングリッドのタイミングで再生開始するほか、再生回数とループ長も2の累乗でループの終端が必ずグリッドと一致するようになっているため、ランダマイズされたルーパーにありがちな“どんどんビートがずれていく”という問題が起こりません。元音源と同じテンポを設定すればDJソフトで定番のビート・ルーパーのように使えますし、異常に速いテンポにすればサンプル・ベースのオシレーターとしても使用できるでしょう。出力が単調にならないように、順再生/逆再生、ピッチ・シフト、再生回数に応じてかかりが深くなるビット・クラッシャーのオプションを用意しました。これらはすべてランダムに使用されますが、ユーザー・インターフェースのトグルでオフにすることができます。チャンネルごとのミュートと併せて好みで切り替えてみてください。

jit.matrixを行列演算として使う

ここまで紹介した要素だけだと[groove~]と[poly~]を用いたパフォーマンス・ルーパーのお手本のようなパッチで、この連載で紹介するには少し味気ないため、乱数生成部に少し変わった仕組みを導入しています。jit.generation.maxpatで切り出した部分です。[jit.noise]で4プレーン、8×1のマトリックスを生成してプレーンごとに分割するだけのシンプルなパッチですが、前回の結果と重畳することで出力が緩やかに遷移していくようにしています。画面左側の帯状のウィンドウを見ると、列ごとにグラデーションを描いていることが確認できるでしょう。この出力を[poly~]の各ボイスに入力して変数を制御しています。

ただの乱数生成にはちょっと複雑で取っ付きにくい書き方ですが、今回使用したのには見た目以外にも理由があります。昨今のAIのはやりでクリエイティブ・コーディング界隈もGPGPU(GPUを画像処理以外に応用)や機械学習に強い環境の人気があるようです。Maxはそれらのイメージが弱く、行列演算のために他環境と併用する場合も少なくありません。しかし、実はMaxにも立派な行列演算の機能が標準で備わっています。そう、Jitterです! 基本単位が“matrix”という名前の通り、Jitterは本来“行列”を扱うライブラリーです。アップデートのたびに華やかな機能が追加されるほかのライブラリーに対し、すっかり地味な存在になりつつあるJitterですが、本来のポテンシャルはなかなかあなどれません。要素数100万以上の行列を秒間数十回演算できるパフォーマンスは、ムービーのプレイバックやエフェクトだけに使うにはもったいないくらいです。さすがにネイティブ・コードで書かれた機械学習系の言語にはかないませんが、ちょっとした工夫でJitterとGenだけでも簡単な人工知能が作れるでしょう。

今回のパッチでやっていることは8×4個の[random]を並べたときとほとんど同じですが、この方法を導入することで数値1つの書き換えにより生成する乱数の個数を簡単に変えられ、Jitterのオブジェクト群を利用した一括の操作ができるようになるほか、1つの[send]と[receive]で多くの数値を送ることができるため、変数やメッセージングの数に応じて負荷が増しがちなMaxパッチの簡潔化と軽量化も期待できるなど、さまざまな応用の道が開けます。また、固定長のリストを必要とする形式、例えばマイコンとのシリアル通信や照明でよく用いられるDMXなどと相性が良いので、それらを使用する際に思い出していただければと思います。

シンプルなオーディオの合成から巨大なショウのシステム、そして人型ロボットの制御まで、規模や目的を問わずセオリーに縛られない書き方ができるのがMaxの最大の魅力です。ぜひ自分なりの“必殺技”を見つけて、新しい表現の扉を開いてみてください。

神田川雙陽

nd-72honban-2163 【Profile】劇作家/舞台音響家/ロボット操演師。東京工業大学大学院を修了し、劇団粋雅堂を主宰している。この4月まで大阪大学特任研究員として人型ロボットと、それを用いた舞台表現の研究/システム開発に従事。開発に携わった『アンドロイド・オルタ』が第20回文化庁メディア芸術祭とアルス・エレクトロニカ賞2018で優秀賞を受賞した。

max_logo CYCLING '74 MaxはMI7 STOREでオーダー可能

問合せ:エムアイセブンジャパン
http://www.mi7.co.jp/