LoginSignup
1
1

More than 1 year has passed since last update.

osc.js で OSC Data Monitor に OSC over UDP でデータを送る(Node.js の keypress との組み合わせ)

Last updated at Posted at 2021-09-22

この記事は、最近書いていた記事の中で、以下の 2つに書かれている内容の続きです。

今回やること

今回は、osc.js を使った Node.js のプログラムから OSC Data Monitor に OSC over UDP でデータを送ってみます。

osc.js や OSC Data Monitor の情報は、冒頭に書いた記事の 2つ目をご参照ください。

通信を試す

OSC Data Monitor の準備

OSC Data Monitor の準備は、冒頭に書いた記事の 2つ目と全く同じです。

8000番ポートで OSC のデータを待ち受けます。

Node.js のプログラムの準備

受信側の用意はできたので、データの送信側を準備します。

動きとしては「特定のキーを押下したらデータを送信」という流れにしたかったので、osc.js と合わせて keypress を使います。

npmコマンドで osc.js と keypress をインストールしておいてください。

$ npm install osc keypress

それぞれの公式ページのサンプルや説明を見て、以下のプログラムを作っていきました。
ちなみに、OSC Data Monitor も以下のプログラムも同じノートPC内で動かしています。

const osc = require("osc");
const keypress = require("keypress");

var udpPort = new osc.UDPPort({
  localAddress: "0.0.0.0",
  localPort: 8001,
  remoteAddress: "0.0.0.0",
  remotePort: 8000,
  metadata: true,
});

udpPort.on("message", function (oscMsg, timeTag, info) {
  console.log("An OSC message just arrived!", oscMsg);
  console.log("Remote info is: ", info);
});

udpPort.on("ready", function () {
  console.log("ready");

  keypress(process.stdin);
  process.stdin.on("keypress", (ch, key) => {
    if ((key && key.ctrl && key.name === "c") || (key && key.name === "q")) {
      process.exit();
    }
    switch (key.name) {
      case "left":
        console.log("left");
        udpPort.send({
          address: "/carrier/frequency",
          args: [
            {
              type: "f",
              value: 420,
            },
          ],
        });
        break;
      case "right":
        console.log("right");
        udpPort.send({
          address: "/carrier/frequency",
          args: [
            {
              type: "f",
              value: 440,
            },
            {
              type: "f",
              value: 400,
            },
          ],
        });
        break;
    }
  });

  process.stdin.setRawMode(true);
  process.stdin.resume();
});

udpPort.on("error", function (err) {
  console.log(err);
});

udpPort.open();

内容としては、「ローカルの 8000番ポートに対してデータ送信をする設定をしていて、キーボードの右矢印キー・左矢印キーのどちらかを押すとメッセージを送信する」というものです。
今回は使わないですが、8001番ポートでの待ち受けの処理も含まれています。

動作確認

あとは、動作確認を行うだけです。

OSC Data Monitor を起動し、Node.js で作ったプログラムを実行します。
その後、キーボードの右矢印キー・左矢印キーを押して、OSC Data Monitor の表示を確認しましょう。

試してみると、以下のように受信側でメッセージを受けとることができていました。
OSC_Data_Monitorの出力.jpg

おわりに

前に書いた記事と今回の記事とで、osc.js を用いた OSC over UDP によるメッセージの送受信を試すことができました。

今後は、Node.js で作ったプログラムと何か別のプログラムを連動させてみたり、osc.js による OSC over WebSocket あたりの内容を試せればと思います。

【追記 】 OSC over WebSocket も試しました

その後、osc.js を用いた OSC over WebSocket も試して記事にしました。

●osc.js でブラウザから OSC Data Monitor に OSC over WebSocket でデータを送る(とりあえず片方向) - Qiita
 https://qiita.com/youtoy/items/0f170f4f86f6d7bf52ad

●p5.js Web Editor のプログラムから osc.js を使った OSC通信(OSC over WebSocket を利用) - Qiita
 https://qiita.com/youtoy/items/45bebdfb948b3f918c05

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1