MaxでDMX機材を[Art-Netを経由して]制御する。

## はじめに
以前、TouchDesignerで照明を制御する際に[Art-Netを用いてDMXの通信を行うための記事](https://qiita.com/LUDO/items/25e2a27619a05fffeab9)を投稿しましたが、今回はそれをMaxにて行いたいと思います。

## そもそもMaxで照明？
サウンド系の処理に用いられることの多いMaxという言語で、わざわざ照明の制御するの？って思われる方も多いかと思います。

確かにサウンド系の作品等で使われている事例をよく聞きますが、音の処理以外の使用例もたくさんあります。具体例を上げたらキリがないですが、ぜひ[Maxアーティストパッチ](https://www.mi7.co.jp/products/cycling74/patch/)のサイトをご参照ください。

また、僕個人としては今年の夏に参加した「[Max Summer School 2019](http://maxsummer2019.geidai.ac.jp/)」にて[堀尾寛太さん](http://kanta.but.jp/)が授業で紹介されていた「MaxからArt-Net経由で照明を制御できる」という話に驚きました。
本当に、何でもできるんだな...と。
ということで、今回はそれを実際に実装し、記事を通してMAXのさらなるポテンシャルを感じて頂ければと思います。

ちなみに、MaxでDMXを出力する時に[ENTTECのDMXUSB PRO](https://www.enttec.com.au/product/controls/dmx-usb-interfaces/dmx-usb-pro-interface/)という機材を使用するには、[dmxusbpro](http://www.nullmedium.de/dev/dmxusbpro/)というオブジェクトをインストールして使用する必要があるのですが、こちらは有料のオブジェクトになります。(さらに、MAX4.5向けに作ったものなので、8以降は不具合等出る場面もあるようです。)
対して、Art-Netを出力するためのオブジェクト群である[imp.dmx](https://www.theimpersonalstereo.com/impdmx)は、無料でインストールすることができます。また、現状ではMAX8でも特に問題なく動作しています。

MAXで照明をやるのに"Art-Net"を用いるというのは良い選択肢のようですね。


## 準備1
では、さっそくやっていきましょう。
今回用意したものは

- PC(Macbook pro)
- USB Type-c変換
- LANケーブル
- ENTTEC OPENDMX ETHERNET(以下、ODE。今回使用したのはmk2ではないです)
- 5PIN(オス) - 3PIN(メス)変換 
- キャノンケーブル(DMXケーブルがなかったので、オーディオ用ケーブルを代用しました)
- moving head(DMX制御できる照明機材) * 2

です。
照明機材を2つにした以外は、前回と同じですね。
MAXのバージョンは 8.1.1　になります。

接続も前回と同様で、上記の順番で繋げば大丈夫です。

![IMG_5470 2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474709/538832f8-bb0a-9565-eb17-d89157a3249d.jpeg)
今回の記事では左側がmoving1、右側がmoving2になります。

ちなみに今回使用するmoving headのDMXチャンネルの仕様ですが、
1. Pan
2. Tilt
3. Dimming and strobe
4. Red
5. Green
6. Blue
7. White
8. motor speed
9. reset
です。


## 準備2
今回はパッチングをする前に、さらに2つ準備することがあります。

- ネットワーク設定
- エクスターナルオブジェクトのインストール

です。

### ネットワーク設定
ネットワークの設定は前回の記事と同じですので、省略します。
今回も

- PCのIPアドレス : 169.254.206.100
- サブネットマスク : 255.255.0.0
- ルーター : 169.254.206.1
- ODE : 169.254.206.200 (universe 0)

に設定しました。

### エクスターナルオブジェクトのインストール
上でも紹介しましたが[imp.dmx](https://www.theimpersonalstereo.com/impdmx)というオブジェクト群が必要になります。

以下、mac OSでのエクスターナルオブジェクトをMAXにインストールする方法を確認します。

まず、リンクで移動したサイトの"imp.dmx Version 0.5"というものをダウンロードしてください。
ダウンロードした"imp.dmx"というファイルを"書類 -> Max 8 -> Library"の中に入れます。

以上です。
Maxを立ち上げるとエクスターナルのオブジェクトが使える状態になっています。


## パッチング
あとはエクスターナルオブジェクトのヘルプを見て頂くと、だいたい使い方が分かるかと思います！
と言いたいところですが、これが意外とよく分からない...(僕には難しいです。)

ので、今回はODEへのシグナルの送り方と、MAXでの(僕個人にとって)テストしやすそうな照明制御のパッチの説明をしたいと思います。
自分の良いように作り変えて頂きたいです！

全体図は以下のようになります。
![スクリーンショット 2019-12-14 17.38.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474709/b3eae31c-2afa-0b32-829e-43d6fc2cfdda.png)
また、この中の"signal-for-address"のパッチの中身は以下のようになります。
<img width="212" alt="スクリーンショット 2019-12-16 16.37.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474709/7d59a0fd-bd93-81f5-854d-1bea5be9ad3d.png">


では、解説をしていきます。

### ODEへの送り方
見ての通り"imp.artnet.controller"というオブジェクトに信号を入れていきます。
このとき、AttributeとしてODEのipとuniverseを指定してあげます。
今回は上記の通り"@unicast_ip 169.254.206.200 @universe 0"と指定しました。
そして、このオブジェクトにmessageオブジェクトで"channnel (DMXのチャンネル) (値[0~255])"の順番でリストを作り、メッセージとして入力します。
例えばDMXアドレスの3chに255を送るときは(channel 3 255)と書いたmessageオブジェクトを作り、"imp.artnet.controller"に入力してあげます。
この部分の処理は上のパッチの"signal-for-address"内で行っています。

### 照明制御のパッチ

"signal-for-address"オブジェクトは
input1 DMXのチャンネルへ送る値(mc.inputの左側のout)
input2 各照明機材の対応ch(mc.inputの右側のout)
input3 各照明機材のstart address
と、入力しています。

今回、僕が使っている照明機材は9chモード(操るのにDMXチャンネルを9ch使用する)ムービングライトなので、mc.inputに9のinletを用意して、まとめています。
また、それに伴いmoving1のstart addressを1、moving2のstart addressを10(moving1の9chの次)に指定しています。
この辺は、事前に決定できるものなので、loadbangで毎回自動で呼び出せるようにしていて良いでしょう。

右上の方で、closebangにより閉じる際に0の値を全てのaddressへ送っているのも重要です。

↓MaxにてDMXを制御しているデモです。↓

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Test &quot;DMX&quot; via &quot;Art-Net&quot; (in Max)<a href="https://twitter.com/hashtag/Max?src=hash&amp;ref_src=twsrc%5Etfw">#Max</a> <a href="https://twitter.com/hashtag/DMX?src=hash&amp;ref_src=twsrc%5Etfw">#DMX</a> <a href="https://t.co/5rMYrIkqTR">pic.twitter.com/5rMYrIkqTR</a></p>&mdash; LUDO TAKEBE (@for_LUDO) <a href="https://twitter.com/for_LUDO/status/1205785308609925121?ref_src=twsrc%5Etfw">December 14, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

いやー、やっぱり光って動くと楽しいですね。


## 最後に
今回はMaxにてDMXをArt-Net経由にて制御しました。
いかがでしたか？
Maxのさらなる可能性を感じて頂けたのではないでしょうか。

今回は前回以上に上手く説明できなかった気がしますので、「ここ、もっと詳しく説明して！」とか「この辺の説明してなくない？」といったこともコメント頂けたらと思います。
よろこんで追記します。
また、「ここの説明は間違ってるよ。」などのご指摘も頂けると大変嬉しいです！
よろしくお願いします。

Max界隈、盛り上がっていきましょ〜〜。