SOLUNA Sound は会場の音響を置き換えない。卓から1本もらい、制御卓の cue を聞き、灯体に同じ時計を渡す。ディレイタワーを1台足すのと同じ感覚で。
下の3問に答えると、あなたの現場に当たるカードだけが光る。
いちばん普通の現場。ディレイタワーに送るのと同じ matrix/aux を、スマホと Pi スピーカーに送る。
source.py --input + server.py/admin を開くsource.py --input を起動(--lead 0.08)ゾーン を作る(m を入れれば遅延は自動)ALIGN の ±ms でフラム(二重打ち)が消えるまで追い込む# FOH laptop SOLUNA_ADMIN=<secret> PORT=8900 python3 server.py python3 -c "import sounddevice;print(sounddevice.query_devices())" # find the interface python3 source.py --input "Scarlett 2i2" --lead 0.08 --server ws://127.0.0.1:8900 --ch festival
Dante の独自プロトコルは受けない(ライセンス品)。代わりに3つの入口がある。多くの Dante 機器(2016年以降)は AES67 モードを持つ。
--input / --aes67--sap: 流れているストリームが名前付きで一覧に出る--aes67 auto(1本なら)か名前の一部で選ぶ# (a) DVS / (b) AVIO — just an input device python3 source.py --input "Dante Virtual Soundcard" --lead 0.08 # (c) AES67 mode — no Dante license, no Dante software python3 source.py --sap # list announced streams python3 source.py --aes67 auto --lead 0.08 # or --aes67 "Stagebox" / --aes67 239.69.x.x:5004
Lawo・Merging・Genelec・Neumann など放送系。SAP で告知されているマルチキャストにそのまま乗る。
--aes67 --map--iface)--sap で一覧(名前・アドレス・ch数・形式)--map で L/R/C を選ぶ(+ は平均=モノ)python3 source.py --sap --sap-seconds 6
python3 source.py --aes67 239.69.10.2:5004 --map "L=3,R=4,C=3+4" --iface 192.168.10.5 --lead 0.08
# --aes67-fmt L16 / --aes67-ch 8 when the sender has no SAP
OS が入力デバイスとして見えるものは全部そのまま。Mac は AVB エンティティを標準で持つ(Thunderbolt/USB-C Ethernet)。
source.py --input--input "名前" で起動、8ch 以上なら --mappython3 -c "import sounddevice;print(sounddevice.query_devices())" python3 source.py --input "RME MADIface" --map "L=1,R=2,C=1+2" --lead 0.08 # playback-only stage? no live feed needed: python3 source.py --file show.wav # or pre-distribute as a CUE (no streaming at all)
/admin でアップロード → PRELOAD → FIRE。QLab / Ableton / grandMA / Eos が UDP で送る OSC を、SOLUNA が聞く。HTTP API と同じ内部処理なので、/admin の FIRE と挙動は同一。
SOLUNA_OSC_PORT=9000/soluna/cue /soluna/go …SOLUNA_OSC_PORT(既定 OFF)SOLUNA_OSC_PORT=9000 で起動/soluna/preload、GO に /soluna/cue か /soluna/go| アドレス | 引数 | 同じ意味の HTTP |
|---|---|---|
| /soluna/cue | url:s [lead:f] [gain:f] | POST /api/cue |
| /soluna/preload | url:s | POST /api/cue {preload} |
| /soluna/stop | — | POST /api/cue {stop} |
| /soluna/go | — | POST /api/show {next} (セットリスト次へ) |
| /soluna/show/goto | i:i | POST /api/show {goto} |
| /soluna/light | pattern:s [c1:s] [c2:s] [bpm:f] | POST /api/light |
| /soluna/light/stop | — | POST /api/light {stop} |
| /soluna/align | ms:f | POST /api/align |
| /soluna/zone | name:s delay_ms:f | POST /api/zones |
| /soluna/tc | "HH:MM:SS:FF":s [fps:f] | POST /api/timecode |
# QLab 5: Network cue → OSC, destination <server ip>:9000 /soluna/preload "/assets/open.mp3" /soluna/cue "/assets/open.mp3" 3.0 1.0 /soluna/light "wave" "#d4af37" "#7fc9a2" 96.0 # grandMA3 macro SendOSC "/soluna/light" "pulse" "#ff2a00" "#0a0a40" 128 # ETC Eos: Show Control → OSC TX → cue External Links /soluna/cue "/assets/drop.mp3" 2.0 # another channel: append "ch=stage2"
「今この瞬間の番組 TC は X」を一度教えると、以降の cue とセットリストは tc で発火時刻を書ける。再生卓の空き出力の LTC からでも。
ltc.py · /soluna/tc · /api/timecode/soluna/tcltc.py --list で入力を探し、--device N で起動(毎秒アンカーを POST)GET /api/timecode の推定 TC と卓の表示を目で合わせるtc を書く/api/align で一度だけ追い込むpython3 ltc.py --list
python3 ltc.py --device 3 --channel 0 --server http://192.168.1.10:8900 --token "$SOLUNA_ADMIN" --ch festival
# or anchor by hand / from the console
curl -X POST http://192.168.1.10:8900/api/timecode -H "x-soluna-admin: $SOLUNA_ADMIN" -d '{"tc":"01:00:00:00","fps":30}'
curl -X POST http://192.168.1.10:8900/api/cue -H "x-soluna-admin: $SOLUNA_ADMIN" -d '{"url":"/assets/a.mp3","tc":"01:00:10:00"}'
ltc.py はレベル変化・DC・ノイズに耐え、24/25/30/29.97DF でラウンドトリップ検証済み。実機の LTC 源では未検証。進行中のライトパターンを 40Hz で DMX に落として灯体へ。灯体 i の位置は会場横断 0..1 — スマホの海と同じ向き・同じ速さで wave が渡る。
SOLUNA_ARTNET=<ip>[:universe] か SOLUNA_SACN= 付きで起動SOLUNA_DMX_FIXTURES(既定 8)と SOLUNA_DMX_START(既定 1)を合わせる/admin でライトを走らせる → 灯体が追従。停止で消灯1回送って沈黙SOLUNA_ARTNET=192.168.1.255:0 SOLUNA_DMX_FIXTURES=12 python3 server.py # broadcast, universe 0 SOLUNA_SACN=239.255.0.1:1 python3 server.py # E1.31 multicast, universe 1
audio パターンは端末側解析が要るので DMX では pulse に落ちる。strobe は 3Hz 上限のまま。MacBook + HDMI が、同じ時計に乗ったステージスクリーンになる。
/screenhttp://<server>:8900/screen を開いて1クリック(UI が消え、全画面)/admin の VIDEO URL に mp4、AUDIO URL に mp3 → PRELOAD → FIREFOH のノートがサーバなら、Pi の箱は「見つけたサーバに従う」だけ。有線が最良。
SERVER=auto / SERVER=ws://…tools/pi-flash.sh で SD を焼く(設定不要)、電源を入れるSERVER=ws://<ip>:8900 で固定(PINNED)/admin → NODES で箱にゾーン・L/C/R・ゲインを ASSIGN(箱に保存、再接続で再送)http://<箱名>.local:8900/setup# flash (zero-config; joins whatever server it finds) tools/pi-flash.sh raspios.img /dev/disk4 HOSTNAME=soluna-box-1 # or install on a running Pi and pin it to the FOH laptop curl -fsSL https://raw.githubusercontent.com/yukihamada/soluna-surround/master/tools/pi-setup.sh | SERVER=ws://192.168.1.10:8900 ZONE=B bash
source.py)の再接続が要る(.local 名で起動していれば自動)。ここに書いた接続は、コード・テスト・合成信号(AES67 送信機、OSC、LTC 生成、Art-Net 受信ソケット)で end-to-end に検証している。実機の Dante 機器、LTC 源、照明卓、DMX ノード・灯体にはまだ繋いでいない。最初の実機は必ずクリックで ALIGN を追い込み、余裕のある lead で始めること。
詳細: docs/integration.md · docs/show-control.md · docs/pi-box.md · README