コンテンツにスキップ

アルゴリズミック作曲

「メロディは思いつかないけど、ルールは書ける」——そんな作曲スタイルに skulpton は向いています。スケール/ユークリッドリズム/確率分布/LFO といったプリミティブを組み合わせて、コードから音楽を生成 するワークフローを作ります。

アルゴリズミック作曲では、1 つの種コード を元に多数のバリエーションを派生させると効率的です。

  1. クリップに種となるコードを書く(例: スケール + ユークリッド + 適度な揺らぎ)
  2. クリップを Cmd/Ctrl + D で複製
  3. 複製先で シードや係数を 1 行だけ変える
  4. それぞれをタイムラインに並べて、構成を作る

複製は非破壊なので、ノートの差分を一切手動で書く必要がありません。

seed() で乱数を固定すれば、毎回同じ結果が返ります。シード文字列だけ変えれば違うバリエーションが手に入ります。

seed("verse-1"); // ← ここを "verse-2" や "chorus" に
const sc = scale("dorian", 60);
onBeat((b) => {
if (chance(0.5) && Math.abs((b * 2) % 1) < 1e-6) {
setNote({ pitch: pick(sc), startBeat: b, lengthBeats: 0.5 });
}
});

1 つのクリップを複製して "verse-1" / "verse-2" / "chorus" と書き換えるだけで、整合性のある別フレーズが 3 つできます。

例 2 — ユークリッドリズムでパートを分ける

Section titled “例 2 — ユークリッドリズムでパートを分ける”

3 トラック × 異なるユークリッド比で、対話的なリズムを組みます。

// Track 1(パーカッション)
const pat = euclid(5, 16);
onBeat((b) => {
const i = Math.floor(b * 4);
if (pat[i % pat.length]) noteOn(60, 0.25, 90, b);
});
// Track 2(ベース) ── euclid(3, 16) に変える
// Track 3(リード) ── euclid(7, 16) に変える

異なる比率(5/16, 3/16, 7/16)が 互いに少しずつズレながらループ することでリズムの重なりが生まれます。

例 3 — 時間方向に密度を変える(ビルドアップ)

Section titled “例 3 — 時間方向に密度を変える(ビルドアップ)”

1 クリップ内で「徐々に賑やかになる」を作るのは recipes に既出 ですが、ライブやアウトロでも便利です。

const sc = scale("pentaMinor", 60);
onBeat((b) => {
const density = b / CLIP_LENGTH; // 0..1
if (chance(density)) {
setNote({ pitch: pick(sc), startBeat: b, lengthBeats: 0.25 });
}
});

例 4 — 入力ノートを「素材」として使う

Section titled “例 4 — 入力ノートを「素材」として使う”

手で打ち込んだ短いリフを 素材 として、コードがそれを変形します。

// 入力: シンプルな 4 音メロディ
// 出力: 各ノートを min7 コードに展開 + 5 度上のハモリ
onNote((n) => {
chord("min7", n.pitch).forEach((p) => {
setNote({
pitch: p,
velocity: n.velocity,
startBeat: n.startBeat,
lengthBeats: n.lengthBeats,
});
});
setNote({ ...n, pitch: n.pitch + 7, velocity: Math.round(n.velocity * 0.6) });
});

「手作業の音楽性 + コードの広がり」 を組み合わせるパターン。

繰り返し使うパターン(4 つ打ちドラムや特定のスケール処理)は、{appData}/libs/codes/.js として置くと 全プロジェクト から呼べます。

  1. ファイルブラウザの App libs/codes+myhelpers.js
  2. function houseDrums(b) { ... } と関数を書いて保存
  3. App libs のチェックを ON
  4. クリップから houseDrums(b) を直接呼べる

詳しくは ファイルブラウザcoding Note Effect の概要 を参照。

1 つのプロジェクトを「役割別の小さなジェネレータの集合」として捉えるとスケールします。

トラック役割使うパターン
Drums基本リズムeuclidnoteOn
Bassルート進行chord + transpose
Pad和声背景chord("maj9", root) を保持
Lead旋律的揺らぎdrunk または urn(scale.length)
Mod音色変化setCc + lfo

各トラックを独立した小さなコードで動かし、組み合わせ全体で曲を作ります。

  • シード文字列をコメントに残す — 後で再現できる
  • 同じ曲に「実験用クリップ」を 1 つ置く — 本線に影響せずに試せる
  • クリップ名を「役割 + バリエーション番号」に — 「Bass A」「Bass B variant」など
  • 生成結果を確認するときは Render タブ — Code タブで書いて Render タブで結果を見る、を素早く往復