codingNoteEffect 概要
PianoRoll クリップの Code タブで書く JavaScript(codingNoteEffect)は、ノート・CC をプログラム的に生成するためのミニ DSL です。
メンタルモデル
Section titled “メンタルモデル”クリップは 3 つのタブを持ちます。
PianoRoll タブ ──(元ノート / 元 CC として渡される)──> Code タブ ──(生成)──> Render タブ ↑ 編集可能 ↑ 編集可能 ↑ 読み取り専用 / 再生される- PianoRoll タブ に置いたノート・CC は「素材」。直接は鳴らない
- Code タブ の JS が
events(元ノート)・ccLanes(元 CC)を入力に、setNote/setCcで新しいノート・CC を出力 - Render タブ が出力結果。再生中はこの Render が鳴る
この分離のおかげで、Code を書き換えても元素材は壊れず、何度でも別パターンを試せます。
最小の動作例
Section titled “最小の動作例”新規クリップを作って、Code タブに以下を貼り、▶ Render を押してみてください。
// 1 拍ごとに C メジャートライアドを 1 音ずつ置くconst ch = chord("maj", 60); // [60, 64, 67]onBeat((b) => { if (Number.isInteger(b)) { setNote({ pitch: ch[b % ch.length], startBeat: b, lengthBeats: 0.5 }); }});これで 4 拍クリップなら C → E → G → C のアルペジオが Render タブに現れます。Space キーで再生。
できること / できないこと
Section titled “できること / できないこと”| できる | できない |
|---|---|
| 元ノートを書き換えて出力(オクターブダブリング、ハモリ等) | DOM / fetch / setTimeout |
| ビートグリッドを駆動してパターンを生成(ユークリッド・アルペジオ等) | 非同期処理(async/await も意味なし) |
| スケール・コードから音列を構築 | 無限ループの中断(実行時間に上限がない) |
| LFO / envelope / drunk walk 等で連続値を CC 化 | import / export(自動剥離されてグローバル化) |
| 既存 CC を変換(半分の値・平滑化・置換) | console.warn / console.error(console.log のみ) |
いつ実行されるか
Section titled “いつ実行されるか”ユーザコードは ▶ Render ボタンを押した時にだけ走ります。
- Code を編集しても、再生中でも、自動再実行はされません
- 元ノート・コード・lib のいずれかが変わると Render タブにスタールバナーが出るので、押し直してください
- エラー時は前回の Render 結果がそのまま残るので、安全に書き直せます
詳しくは ライフサイクル を参照。
このセクションの読み方
Section titled “このセクションの読み方”| ページ | 内容 |
|---|---|
| ライフサイクル | 4 フェーズ(onInit → onBeat → onNote → onCc)の実行順序と CLIP_BEAT の動き |
| ホスト API | setNote / setCc / on* / events / グローバル変数 / seed 等 |
| ヘルパー:リズム | euclid / every / sometimes / degrade |
| ヘルパー:音楽理論 | scale / chord / degree / transpose |
| ヘルパー:数値・乱数・モジュレーション | 数値・配列・乱数・LFO・envelope・チューニング・Max 系ジェネレータ |
| パターン集(レシピ) | コピーして使えるサンプルコード集 |
| トラブルシュート | よくあるエラーと対処 |
入門目線では チュートリアル:コードでノートを生成する入門 からどうぞ。