| name | daw-osc |
| description | DAW連携(OSC)の設定、AbletonOSC、Protokol、OSCプロトコル。DAW、Ableton、OSC、Open Sound Control関連の作業時に使用。 |
DAW OSC 連携 (MUEDnote)
概要
MUEDnoteはDAW(Ableton Live)からのパラメータ変更をOSC経由で受信し、セッションログとして保存する。
AbletonOSC
基本情報
インストール手順
- リポジトリをダウンロード
- フォルダ名を
AbletonOSC-master → AbletonOSC にリネーム
- 以下にコピー:
- macOS:
/Users/[username]/Music/Ableton/User Library/Remote Scripts/
- Windows:
\Users\[username]\Documents\Ableton\User Library\Remote Scripts
- Ableton Live を再起動
Preferences > Link / Tempo / MIDI → Control Surface で「AbletonOSC」を選択
- 成功時:
AbletonOSC: Listening for OSC on port 11000
重要なOSCアドレス
# クエリ系(レスポンスを返す)
/live/song/get/tempo # テンポ取得
/live/song/get/track_names # トラック名一覧
/live/track/get/name # 特定トラック名
# リスナー系(変更を監視)
/live/device/start_listen/parameter/value # パラメータ変更監視開始
/live/device/stop_listen/parameter/value # パラメータ変更監視停止
# レスポンス形式
/live/song/get/tempo → [120.0] # BPM値
/live/device/parameter/value → [track_id, device_id, param_id, value]
動作モード
AbletonOSCはパッシブ設計:
- 自動でイベントを送信しない
- クライアントからのリクエストに応答
- listener を開始すると変更時にイベント送信
Protokol(OSCモニター)
設定手順
- https://hexler.net/protokol からダウンロード
- OSCタブを選択
- Enabled: ON
- Port:
11001(AbletonOSCの送信ポート)
- Options:
代替ツール
Node.js での OSC 実装
ライブラリ選択
| ライブラリ |
特徴 |
osc-js |
ブラウザ/Node両対応、WebSocket対応 |
osc.js |
高機能、UDP/Serial/WebSocket |
node-osc |
シンプル、UDP特化 |
基本実装パターン
import OSC from 'osc-js';
// UDP受信設定
const osc = new OSC({
plugin: new OSC.DatagramPlugin({
open: { port: 11001 } // AbletonOSCからの受信
})
});
osc.on('*', (message) => {
console.log(message.address, message.args);
});
osc.open();
// コマンド送信(port 11000へ)
const sendOsc = new OSC({
plugin: new OSC.DatagramPlugin({
send: { host: '127.0.0.1', port: 11000 }
})
});
sendOsc.send(new OSC.Message('/live/song/get/tempo'));
デバウンス戦略
パラメータ変更は高頻度で発生するため、デバウンスが必須。
// キー: track_id + device_id + param_id
// 値: 最新の値 + タイムスタンプ
const debounceMap = new Map<string, { value: number; timer: NodeJS.Timeout }>();
function processParameterChange(trackId: number, deviceId: number, paramId: number, value: number) {
const key = `${trackId}:${deviceId}:${paramId}`;
const existing = debounceMap.get(key);
if (existing) {
clearTimeout(existing.timer);
}
const timer = setTimeout(() => {
// 500ms後に最終値を送信
sendToApi({ trackId, deviceId, paramId, value });
debounceMap.delete(key);
}, 500);
debounceMap.set(key, { value, timer });
}
関連ファイル
| ファイル |
用途 |
scripts/daw-hub/ |
OSC受信CLIツール |
app/api/muednote/daw-log/route.ts |
DAWログAPI |
db/schema/muednote-daw-logs.ts |
Drizzleスキーマ |
参考資料