Sonic PiのOSC制御

Sonic PiにOSC制御のインターフェースがMIDIと一緒に併記されていて、OSCって何のことと思いましたが、Open Sound Controlの略でUDP(速度大事だろうから)で送られる定義された制御インターフェースです

例えばSonic Pi側で以下のように待ち受けしておいて、

live_loop :osc_trigger do
  use_real_time
  note = sync "/osc:127.0.0.1:8001/trigger/synth"
  synth :prophet, note: note[0], release: 1.0
end

Node.jsから以下のようなコードでA~Kのキーを叩いで電文を送信すれば、Sonic Piで一オクターブ(半音なし)の合成をします、値はMIDIに相当する値ですが他のルールに則っても良いらしい

同じパソコンからなのでループバックアドレスになってますが、これは無論ネットワーク次第、ポートの4560は固定になってます

// original https://qiita.com/youtoy/items/a158b847b142f0a134a6
//
const osc = require("osc");
const keypress = require("keypress");

var udpPort = new osc.UDPPort({
  localAddress: "0.0.0.0",
  localPort: 8001,
  remoteAddress: "127.0.0.1",
  remotePort: 4560,
  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 "a":
        sendValue(60, key.name);
        break;
      case "s":
        sendValue(62, key.name);
        break;
      case "d":
        sendValue(64, key.name);
        break;
      case "f":
        sendValue(65, key.name);
        break;
      case "g":
        sendValue(67, key.name);
        break;
      case "h":
        sendValue(69, key.name);
        break;
      case "j":
        sendValue(71, key.name);
        break;
      case "k":
        sendValue(72, key.name);
        break;
      default:
        break;
    }
  });

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

function sendValue(inputValue, inputText) {
  udpPort.send({
    address: "/trigger/synth",
    args: [
      {
        type: "f",
        value: inputValue,
      },
    ],
  });
  console.log(`key.name: ${inputText}`);
}

udpPort.open();

キーボードは演奏家にとって大事だろうから、シンセサイザーとは別に色々なデバイスが選択できるのは良さそうです、MIDIとは共存する立ち位置のようですが

 

admi

Sonic Pi — operation not permitted

Sonic Piで外部ファイルのアクセス時に、ディレクトリが例えばDesktopのファイルアクセスだと弾かれて、Applicationsディレクトリに変更してやると、問題なくアクセス可能。

これはRubyの制限なのか?

 

admin

Sonic Pi

Raspberry PIプロジェクトの作曲アプリ。Ruby類似のscriptで作曲できる優れもの。作成した楽曲ファイルの拡張子も.rbだし、アプリ自体がRubyでできてるそうです。

Mac 16でなぜかGPUがアクティブになるけれども、外部GPUは無くとも動作は出来るでしょう。

音楽クリエーターには相当使えそうです。

 

admin