-
Notifications
You must be signed in to change notification settings - Fork 0
Reference Remote Script
Daisuke Tsukada edited this page Sep 5, 2026
·
2 revisions
Live の Python インタプリタ内で動く検証用 Control Surface です。M4L の LiveAPI ホワイトリストを経由せず Live モジュールに直接触れるため、M4L で不可能な操作(ステータスバー通知、ブラウザからの読み込み、Undo のまとめ)を確かめるために作りました。本番の Remote Script 版 LiveMCP は Issue #4 で計画中です。
node scripts/install-remote-script.jsremote-script/LiveMCP_Probe/ が ~/Music/Ableton/User Library/Remote Scripts/LiveMCP_Probe/ へコピーされます。Live を再起動し、環境設定 → Link/Tempo/MIDI の Control Surface で LiveMCP_Probe を選ぶと有効になります。
- Live 12.4.5 の Remote Script は Python 3.11。外部パッケージは入れられません
-
コードを変えたら Live の再起動が必要です。Control Surface を入れ直しても Python モジュールが
sys.modulesに残ります - 有効になると
probe-report.json(Songのメンバー一覧、ブラウザの構造など)が Remote Script のフォルダに書き出されます
TCP 127.0.0.1:3361(3360 は M4L 版が使用)。1 リクエスト 1 接続、JSON 1 行。ソケットは Live のメインスレッドから約 100ms 間隔で呼ばれる update_display の中で非ブロッキングに受けるため、LiveAPI をワーカースレッドから触りません。応答は最大 100ms 程度遅れます。
node scripts/remote-probe.js ping
node scripts/remote-probe.js tracks
node scripts/remote-probe.js message '{"text":"hello"}'
node scripts/remote-probe.js dir '{"target":"track","index":0}'
node scripts/remote-probe.js browser_load '{"name":"Simpler"}'| op | 内容 |
|---|---|
ping |
生存確認。ポートとレポートのパスを返す |
api |
Song のメンバー一覧、can_be_saved、file_path
|
tracks |
トラックの index / name / is_grouped / is_foldable |
group |
song.group_tracks(*args) を渡されたとおりに呼ぶ(Live の Python API に無いことを確認済み) |
save |
song.save()(同じく無い) |
undo |
1 手戻す |
message |
ステータスバーへ 1 行出す。ControlSurface.show_message 経由(Application.show_message を直接呼ぶと Boost.Python の型が合わず ArgumentError) |
state |
トラック数、Undo / Redo 可否、開いているセットのパス |
dir |
song / app / track(index) / view のメンバーを覗く |
undo_step |
begin_undo_step / end_undo_step で 2 操作を 1 Undo にまとめる検証 |
browser_load |
ブラウザから名前でデバイスを探して Browser.load_item
|
| M4L(LOM) | Remote Script | |
|---|---|---|
| ブラウザからの読み込み | 不可 | Browser.load_item |
| 常駐 | トラックにデバイスが必要。セットを切り替えると死ぬ | Live 起動時から常駐 |
| Undo | 一括操作が件数ぶん積まれる |
begin_undo_step / end_undo_step で 1 手 |
deferlow |
必須 | 不要 |
| ステータスバー通知 | 不可 | ControlSurface.show_message |
Song.save / Song.group_tracks
|
無し | 無し(Python API 自体に無い) |
scripts/notify.js の liveMessage はこの Remote Script の message に投げています。Remote Script が動いていなければ何もせず、呼び出し側が標準出力に出します。