コンテンツにスキップ

codingNoteEffect 概要

PianoRoll クリップの Code タブで書く JavaScript(codingNoteEffect)は、ノート・CC をプログラム的に生成するためのミニ DSL です。

クリップは 3 つのタブを持ちます。

PianoRoll タブ ──(元ノート / 元 CC として渡される)──> Code タブ ──(生成)──> Render タブ
↑ 編集可能 ↑ 編集可能 ↑ 読み取り専用 / 再生される
  • PianoRoll タブ に置いたノート・CC は「素材」。直接は鳴らない
  • Code タブ の JS が events(元ノート)・ccLanes(元 CC)を入力に、setNote / setCc で新しいノート・CC を出力
  • Render タブ が出力結果。再生中はこの Render が鳴る

この分離のおかげで、Code を書き換えても元素材は壊れず、何度でも別パターンを試せます。

新規クリップを作って、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 キーで再生。

できるできない
元ノートを書き換えて出力(オクターブダブリング、ハモリ等)DOM / fetch / setTimeout
ビートグリッドを駆動してパターンを生成(ユークリッド・アルペジオ等)非同期処理(async/await も意味なし)
スケール・コードから音列を構築無限ループの中断(実行時間に上限がない)
LFO / envelope / drunk walk 等で連続値を CC 化import / export(自動剥離されてグローバル化)
既存 CC を変換(半分の値・平滑化・置換)console.warn / console.errorconsole.log のみ)

ユーザコードは ▶ Render ボタンを押した時にだけ走ります

  • Code を編集しても、再生中でも、自動再実行はされません
  • 元ノート・コード・lib のいずれかが変わると Render タブにスタールバナーが出るので、押し直してください
  • エラー時は前回の Render 結果がそのまま残るので、安全に書き直せます

詳しくは ライフサイクル を参照。

ページ内容
ライフサイクル4 フェーズ(onInit → onBeat → onNote → onCc)の実行順序と CLIP_BEAT の動き
ホスト APIsetNote / setCc / on* / events / グローバル変数 / seed
ヘルパー:リズムeuclid / every / sometimes / degrade
ヘルパー:音楽理論scale / chord / degree / transpose
ヘルパー:数値・乱数・モジュレーション数値・配列・乱数・LFO・envelope・チューニング・Max 系ジェネレータ
パターン集(レシピ)コピーして使えるサンプルコード集
トラブルシュートよくあるエラーと対処

入門目線では チュートリアル:コードでノートを生成する入門 からどうぞ。