ゴール
ノブ 2 本+ボタン で 詩 ↔ 映像 ↔ 声 ↔ BGM が同時に切り替わる様子を 45 秒キャプチャ。
その動画+スライド 2 枚で 3 分ピッチが成立するところまでやり切る。
proj/
├─ assets/
│ ├─ txt/ (A01.txt …)
│ ├─ wav/ (A01_h.wav , A01_o.wav …)
│ └─ mp4/ (A01.mp4 …)
├─ data.json
├─ player.py
└─ td_comp.toe (空ファイルでOK)
効果: あとで迷子にならない/自動リロードが楽
資産 | 数 | 方法 | 制限時間 |
---|---|---|---|
詩フレーズ | 8 行だけ | ChatGPTで発散→自分で5分推敲 | 20 min |
肉声 | 8 wav | スマホ録音 → AirDrop | 15 min |
AI声 | 8 wav | macOS “say” コマンド / ElevenLabs | 15 min |
映像 | 8 clip × 3 s | ❶ Pixabay/GIF拾う ❷ TouchDesigner Noise TOP録画 | 40 min |
コツ: 命名は A01…A08 に即統一。AI 声は品質より名前一致を優先。
data.json(手打ちで充分)
[{"id":"A01","txt":"青い輪郭が…"},
… (計8行)]
player.py(テンプレ最短)
import json, random, mido
from pythonosc.udp_client import SimpleUDPClient
osc = SimpleUDPClient("127.0.0.1", 9000)
data = json.load(open("data.json"))
idx, hue, pad = 0, 0.5, 0.5 # 初期値
port = mido.open_input() # 1 本目 CC1, 2本目 CC2, ボタン note60
while True:
for msg in port:
if msg.type=='control_change':
if msg.control==1: idx = int(msg.value/127*7); # 0–7
if msg.control==2: hue = msg.value/127; # 0–1
if msg.type=='note_on' and msg.note==60: pad = random.random()
row = data[idx]
osc.send_message('/text', row['txt'])
osc.send_message('/hue', hue)
osc.send_message('/pad', pad)
osc.send_message('/id', row['id'])
効果: ノブを動かすたび /id /text /hue /pad が出るだけで十分。
アプリ | 手順 | タイムリミット |
---|---|---|
TD | OSC In DAT → Select id → Moviefile In TOP (“mp4/$ID.mp4 ”)ColorCorrect TOP (Hue= /hue)Text TOP (txt= /text)→ Composite |
1 h |
PD | [udpreceive 9000] → route /pad /id/pad → [*~] で Pad volume/id で [open assets/wav/$1_h.wav( → [readsf~] |
2 h |
検証: 1) ノブで映像色が回る 2) ボタンで音声が切り替わる