Maxの生命線UDPで問題が・・・
センシングや3D(Unity / UE / Arduino) 等とのコミュニケーション時に重宝するudprecieve ですが、udpを受信する場合に、メッセージが4bytesに揃っていなかったり長すぎた場合にアトリビュートなどの設定やOSC-routeを利用しても上手く受信できない事があります。
Max内にどうにかする方法としてNode for Maxが利用できます。
Node for Max で UDP receive
node.script objectjs をHelpからコピペし、ダブルクリックするとテキストエディターが開くので書き換えます。Maxのテキストエディタはクソなので、VS Code使ってます。
udpreceive.js
const dgram = require('dgram'); const IP = '192.168.1.1'; const PORT = 8888; const socket = dgram.createSocket('udp4'); socket.on('listening', () => { const address = socket.address(); console.log('UDP socket listening on ' + address.address + ":" + address.port); }); socket.on('message', (message, remote) => { console.log(remote.address + ':' + remote.port +' - ' + message); /* 処理 */ }); socket.bind(PORT, IP);
とくに外部ライブラリを入れる事なくできました!JS的に正しい書き方なのかは謎。外部ライブラリのOSC-routeなどを使わなくても、テキスト処理はスクリプト言語の十八番でしょうから楽ちんです。
感想
昔、VJソフトのあのタグをつくるためにMaxのjs objectを触っていた頃は、jsの文法を読んで型なしでプロトタイプ継承とか難しいなと思い、深入りしませんでした。時は経ち最近のjsは今どきな文法が色々あって使いやすくなってそうです。
Node.jsやnpmエコシステムなどでは当たり前の事が、Maxおじさんからすると凄いみたいな事は非常に沢山ありそうです。(Blogを適当に放置してる事から分かるように)今までネットワーク / スクリプト言語は触れないように生きてきましたが、そろそろNode.jsから色々触ってみようかなと思いました。
Reference
- Node for Max Api Reference https://docs.cycling74.com/nodeformax/api/
- 【Node.js 2021(2つ目)】 Node.js での UDP・TCP通信をシンプルに試す(2021年12月) https://qiita.com/youtoy/items/385feead64ff905e9f76