kickstartとは

kickstartは、ビートプログラミングのためのドメイン固有言語(DSL)です。 テキストベースの直感的な記法で、ドラムパターンやリズムシーケンスを記述できます。

特徴

  • 直感的な記法 - xでヒット、 .で休符という シンプルなルール
  • テキストベース - Gitでバージョン管理可能、差分の確認も容易
  • クロスプラットフォーム - ブラウザ、CLI、VSCodeで動作
  • 高い拡張性 - カスタムサンプルキット、パターンの組み合わせに対応

サンプルコード

bpm 120
swing 0.1

pattern main {
  kick:  [x . . . x . . . | x . . . x . . .]
  snare: [. . . . x . . . | . . . . x . . .]
  hihat: [x . x . x . x . | x . x . x . x .]
}

play main * 4
試す

クイックスタート

ブラウザで試す

最も簡単な方法は、Playgroundを使うことです。インストール不要で、すぐにビートを作り始められます。

CLIをインストール

ローカル環境で使用する場合は、CLIをインストールします:

# Bunを使用
bun add -g @kickstart-beats/cli

# または npm
npm install -g @kickstart-beats/cli

最初のビートを作成

.kickファイルを作成します:

bpm 120

pattern main {
  kick:  [x . . . x . . .]
  snare: [. . . . x . . .]
  hihat: [x . x . x . x .]
}

play main * 4
試す

再生する

kickstart play my-beat.kick

WAVにエクスポート

kickstart export my-beat.kick -o my-beat.wav

シンタックス

基本構文

BPM(テンポ)

曲のテンポを設定します。40〜300の範囲で指定できます。

bpm 120    // BPM 120に設定

スウィング

スウィング量を設定します。0.0(なし)〜1.0(最大)の範囲で指定できます。

swing 0.1  // 軽いスウィング

ステップ記法

シーケンスは角括弧[ ]の中に記述します。各ステップは16分音符を表します。

記号 意味
x ヒット(音量: 0.8) [x . . . x . . .]
X アクセント(音量: 1.0) [. . . . X . . .]
. 休符 [x . . . . . . .]
x[0.5] カスタム音量 [x . x[0.5] . x . . .]
| 小節区切り(視覚的のみ) [x . . . | x . . .]
x? 確率的ヒット(50%) [x x? x x?]
x?[0.3] 確率指定(30%) [x x?[0.7] x x?[0.3]]

確率的ステップ

?を付けると、そのステップが確率で発生します。 再生するたびに異なるパターンになり、ビートに「人間味」を加えられます。

記法 意味
x? 50%の確率でヒット
x?[0.3] 30%の確率でヒット
X? 50%の確率でアクセント
x[0.6]? ベロシティ0.6のヒットが50%で発生
x[0.6]?[0.3] ベロシティ0.6のヒットが30%で発生

コメント

//以降は行末までコメントとして扱われます。

// これはコメントです
bpm 120  // BPMを設定

変数

変数を使うと、シーケンスや数値を再利用できます。同じパターンを複数のトラックで使い回したり、 テンポやスウィングを一箇所で管理することができます。

変数の宣言

let 変数名 = 値で変数を宣言します。 変数名は英字・アンダースコアで始まり、英数字・アンダースコアを含むことができます。

数値変数

BPMやスウィングの値を変数に保存できます。

// 数値変数
let myTempo = 120
let mySwing = 0.15

bpm $myTempo
swing $mySwing

pattern main {
  kick:  [x . . . x . . .]
  snare: [. . . . x . . .]
}

play main * 4
試す

シーケンス変数

シーケンス(ビートパターン)を変数に保存し、複数のトラックで再利用できます。

// シーケンス変数
let basicKick = [x . . . x . . .]
let basicSnare = [. . . . x . . .]
let fastHihat = [x . x . x . x .]

pattern verse {
  kick: $basicKick
  snare: $basicSnare
  hihat: $fastHihat
}

pattern hook {
  kick: $basicKick
  snare: $basicKick  // 同じ変数を再利用
  hihat: $fastHihat
}

play verse * 4
play hook * 2
試す

変数の参照

変数を使用するには、変数名の前に$を付けます。

用途 説明
BPM設定 bpm $myTempo 数値変数をBPMに使用
スウィング設定 swing $mySwing 数値変数をスウィングに使用
トラックのシーケンス kick: $basicKick シーケンス変数をトラックに使用

変数とエフェクト

シーケンス変数を使用したトラックにもエフェクトを適用できます。

let mainBeat = [x . . . x . . .]

pattern main {
  // 変数にエフェクトを適用
  kick: $mainBeat > reverb(0.2)
  snare: $mainBeat > delay(0.25, 0.3)
}

play main * 4
試す

変数活用のメリット

  • 同じパターンを複数のトラックで再利用できる
  • BPMやスウィングを一箇所で管理できる
  • コードが読みやすくなる
  • パターンの変更が簡単になる

パターン

パターンの定義

patternキーワードでパターンを定義します。パターン内には複数のトラックを含めることができます。

bpm 120

pattern main {
  kick:  [x . . . x . . .]
  snare: [. . . . x . . .]
  hihat: [x . x . x . x .]
}

play main * 4
試す

パターンの再生

playコマンドでパターンを再生します。 * 回数で繰り返し回数を指定できます。

play main * 4  // mainパターンを4回繰り返す

複数パターンの組み合わせ

複数のパターンを定義し、順番に再生することで曲の構成を作れます。

bpm 120

pattern intro {
  kick:  [x . . . . . . .]
  hihat: [x . x . x . x .]
}

pattern main {
  kick:  [x . . . x . . . | x . . . x . . .]
  snare: [. . . . x . . . | . . . . x . . .]
  hihat: [x . x . x . x . | x . x . x . x .]
}

pattern outro {
  kick:  [x . . . . . . . | . . . . . . . .]
  snare: [. . . . x . . . | . . . . x . . .]
}

// 曲の構成
play intro * 2
play main * 4
play outro * 1
試す

トラックの長さ

同じパターン内のトラックは、異なる長さを持つことができます。短いトラックは自動的にループします。

bpm 120

pattern groove {
  kick:  [x . . . x . . . | x . . . x . . .]
  hihat: [x . x . x . x .]
}

play groove * 4
試す

パターンの継承(extends)

extendsキーワードで既存のパターンを継承し、新しいトラックを追加したり、既存のトラックを上書きできます。

pattern base {
  kick:  [x . . . x . . .]
  snare: [. . . . x . . .]
}

// baseを継承してhihatを追加
pattern verse extends base {
  hihat: [x . x . x . x .]
}

// baseを継承してkickを上書き
pattern drop extends base {
  kick: [x . x . x . x .]  // より激しいキックに変更
  hihat: [x x x x]*2
}

play verse * 4
play drop * 4
試す

パターンの合成(+)

+演算子で複数のパターンを結合できます。 既存のパターン名を使うか、インラインでトラックを定義できます。

pattern drums {
  kick:  [x . . . x . . .]
  snare: [. . . . x . . .]
}

pattern percussion {
  hihat: [x . x . x . x .]
}

// 2つのパターンを結合
pattern full = drums + percussion

// インラインでトラックを追加
pattern with_clap = drums + { clap: [. . x . . . x .] }

play full * 4
試す

パターンの差分(-)

-演算子で特定のトラックを除外した新しいパターンを作成できます。 曲のブレイクセクションを作るのに便利です。

pattern full {
  kick:  [x . . . x . . .]
  snare: [. . . . x . . .]
  hihat: [x x x x]*2
}

// hihatを除外
pattern no_hihat = full - { hihat }

// 複数のトラックを除外
pattern kick_only = full - { snare, hihat }

play full * 4
play no_hihat * 2  // ブレイクセクション
play full * 4
試す

パターン合成の活用例

パターンの継承と合成を使うことで、共通部分を再利用しながら曲の各セクションを効率的に定義できます。 変更があった場合も、ベースパターンを修正するだけで全てに反映されます。

ポリリズム

異なる長さのトラックを組み合わせると、ポリリズム(複合リズム)を作ることができます。 各トラックは独立したサイクルで繰り返され、全トラックの最小公倍数(LCM)でパターンが完結します。

bpm 120

// ポリリズム: 異なる長さのトラックが独立してループ
pattern poly {
  a: [x . .]      // 3ステップ (4回繰り返し)
  b: [x . . .]    // 4ステップ (3回繰り返し)
}
// LCM(3,4)=12ステップでパターンが完結

play poly * 2
試す

ポリリズムの仕組み

上の例では、3ステップのトラックと4ステップのトラックを組み合わせています。

トラック ステップ数 繰り返し回数 ヒット位置
a 3 4回 (12÷3) 0, 3, 6, 9
b 4 3回 (12÷4) 0, 4, 8

LCM(3, 4) = 12 → 12ステップでパターンが完結

アフリカン・ポリリズム

アフリカ音楽やラテン音楽では、異なる長さのリズムを重ねる技法が伝統的に使われています。

bpm 120

// 3:4 アフリカン・ポリリズム
pattern african {
  djembe: [x . x . x .]     // 6ステップ
  shaker: [x . x . x . x .] // 8ステップ
}
// LCM(6,8)=24ステップでパターンが完結

play african
試す

ポリリズムの活用例

  • 3:4 - アフリカン、ラテン音楽の基本
  • 3:2(ヘミオラ) - ジャズ、クラシックで多用
  • 5:4 - プログレッシブロック、実験音楽
  • 7:4 - 複雑なグルーヴを生み出す

条件分岐

kickstartでは、条件分岐やループを使って動的な曲構成を記述できます。 ifで条件分岐、 repeatで繰り返し、 everyで周期的なパターン挿入ができます。

if / else 条件分岐

条件によって再生するパターンを変えることができます。

bpm 120

pattern a { kick: [x . . .] }
pattern b { snare: [. . x .] }

// 条件によって再生するパターンを変える
if 1 > 0 {
  play a * 2
} else {
  play b * 2
}
試す

比較演算子

演算子 意味
> より大きい if 5 > 3
< より小さい if 2 < 5
>= 以上 if 5 >= 5
<= 以下 if 3 <= 5
== 等しい if 5 == 5

repeat / every ループ

repeatで指定回数繰り返し、 everyで周期的にパターンを挿入できます。

bpm 120

pattern main { kick: [x . . . x . . .] }
pattern fill { snare: [x x x x] }

// 8回繰り返し、2回ごとにフィルを挿入
repeat 8 {
  play main
  every 2 {
    play fill
  }
}
試す

repeat

指定した回数だけブロック内の内容を繰り返します。

repeat 4 {
  play main
}

every

N回ごとにブロック内の内容を実行します。repeatと組み合わせて使用します。

repeat 8 {
  play main
  every 4 {
    play fill  // 4回ごと(0, 4)に実行
  }
}

every 2の場合、0, 2, 4, 6...回目に実行されます。

random() ランダム

random()は0.0〜1.0のランダムな値を返します。条件分岐と組み合わせることで、曲にランダム性を加えられます。

bpm 120

pattern a { kick: [x . . . x . . .] }
pattern b { snare: [. . . . x . . .] }

// ランダムに再生
if random() > 0.5 {
  play a * 2
} else {
  play b * 2
}
試す

ヒント:ランダムの活用

  • random() > 0.5 - 50%の確率で実行
  • random() > 0.7 - 30%の確率で実行
  • random() > 0.9 - 10%の確率で実行(レア)

ネストした条件

条件分岐やループはネストすることができます。

repeat 4 {
  play main
  every 2 {
    if random() > 0.5 {
      play fill_a
    } else {
      play fill_b
    }
  }
}

変換関数(Transformations)

変換関数を使うと、シーケンスを動的に変更できます。 パイプ演算子|を使って、シーケンスに変換を適用します。 複数の変換をチェーンすることも可能です。

基本的な使い方

シーケンスの後に| 変換関数名または| 変換関数名(引数)を追加します。

bpm 120

pattern main {
  kick:  [x . . . x . . .] | reverse
  snare: [. . . . x . . .] | fast(2)
  hihat: [x . x . x . x .] | rotate(2)
}

play main * 4
試す

変換関数一覧

reverse リバース

シーケンスを逆順にします。

| reverse

例: [x . . x] | reverse[x . . x]

fast ファスト

シーケンスをn倍速にします(n回繰り返す)。

| fast(n)
n 繰り返し回数(2以上の整数)

例: [x .] | fast(2)[x . x .]

slow スロー

シーケンスを1/n速にします(nステップごとに1つ取る)。

| slow(n)
n 間引き間隔(2以上の整数)

例: [x . x .] | slow(2)[x x]

rotate ローテート

シーケンスをnステップ回転させます。

| rotate(n)
n 回転ステップ数(正:右、負:左)

例: [x . . .] | rotate(1)[. . . x]

shuffle シャッフル

シーケンスをランダムにシャッフルします。毎回異なるパターンになります。

| shuffle

例: [x . x .] | shuffle[. x . x](ランダム)

invert インバート

ヒットとレストを反転させます。

| invert

例: [x . . x] | invert[. x x .]

degrade デグレード

確率pでヒットをレストに変換します。ランダム性を加えたい時に便利です。

| degrade(p)
p 変換確率 (0.0〜1.0)

例: [x x x x] | degrade(0.5) → 50%の確率で各ヒットがレストに

every エブリー

n回ごとに指定した変換を適用します。周期的なバリエーションを作れます。

| every(n, transform)
n 適用間隔(例: 2なら2回に1回)
transform 適用する変換関数

例: [x . . .] | every(2, reverse) → 2回に1回reverseを適用

ユークリッドリズム

euclidean(k, n)は、Bjorklundアルゴリズムを使って n個のステップにk個のヒットを均等に配置したリズムを生成します。 世界中の伝統音楽のリズムパターンを数学的に表現できます。

euclidean ユークリッド

ユークリッドリズムを生成します。シーケンスの代わりに使用できます。

euclidean(k, n)
k ヒット数
n 総ステップ数

代表的なユークリッドリズム

  • E(3,8) = [x . . x . . x .] - キューバのトレシージョ
  • E(5,8) = [x . x x . x x .] - シンコペーション
  • E(2,5) = [x . x . .] - シンキット(ペルシャ)
  • E(4,12) = [x . . x . . x . . x . .] - 12/8拍子
bpm 120

pattern euclidean_groove {
  // ユークリッドリズム E(3,8) - アフリカンなグルーヴ
  kick:  euclidean(3, 8)
  // ユークリッドリズム E(5,8) - シンコペーション
  snare: euclidean(5, 8)
  hihat: [x . x . x . x .]
}

play euclidean_groove * 4
試す

変換のチェーン

複数の変換を|で繋げることで、順番に適用できます。

bpm 120

pattern complex {
  // 複数の変換をチェーン
  kick:  [x . . . x . . .] | fast(2) | rotate(1)
  // every で周期的に変換
  snare: [. . . . x . . .] | every(2, reverse)
  hihat: [x . x . x . x .] | shuffle
}

play complex * 4
試す

変換関数のヒント

  • everyを使うと、繰り返しの中で変化を加えられます
  • euclideanは複雑なリズムを簡潔に表現できます
  • shuffledegradeでランダム性を加えられます
  • 変換はエフェクトと組み合わせて使えます: [x . x .] | fast(2) > reverb(0.3)

ピッチ・音階

kickstartでは、サンプルにピッチ(音高)情報を付加して、メロディやベースラインを記述できます。 スケール(音階)を設定することで、調性のある音楽を作成できます。

ノート記法

ノート名+オクターブ(例:C4, F#3, Bb5)で音程を指定できます。

bpm 120
scale C4 major

pattern melody {
  synth: [C4 . E4 . G4 . E4 .]
}

play melody * 4
試す
記法 意味
C4 ノート名(C〜B)+ オクターブ(0〜9) 中央のド
F#3 シャープ(#)付きノート ファのシャープ
Bb5 フラット(b)付きノート シのフラット

ピッチ付きヒット

x:ノートの形式で、ヒットにピッチを付加できます。 ベースラインなど、サンプルをピッチシフトして再生したい場合に便利です。

bpm 90

pattern bass {
  bass: [x:C2 . . . x:G1 . . .]
}

play bass * 4
試す

ベロシティとピッチの組み合わせ

ベロシティとピッチを組み合わせて、より表現力豊かなフレーズを作成できます。

bpm 120

pattern expressiveMelody {
  synth: [C4 . x[0.6]:E4 . X:G4 . x[0.5]:E4 .]
}

play expressiveMelody * 4
試す
記法 説明
C4 ノートのみ(ベロシティ: 0.8)
x:C4 ヒット+ピッチ(ベロシティ: 0.8)
x[0.5]:C4 カスタムベロシティ+ピッチ
X:C4 アクセント+ピッチ(ベロシティ: 1.0)

スケール設定

scaleキーワードでスケール(音階)を設定できます。 スケール設定により、曲の調性を明確にできます。

// メジャースケール
scale C4 major

// マイナースケール
scale A4 minor

// その他のスケール
scale D4 dorian
scale G4 mixolydian
scale C4 pentatonic
scale A4 blues

利用可能なスケール

major

メジャースケール

minor

マイナースケール

dorian

ドリアンスケール

mixolydian

ミクソリディアンスケール

pentatonic

ペンタトニックスケール

blues

ブルーススケール

ヒント

  • ベースラインにはオクターブ1〜3(C1〜C3)を使用
  • メロディにはオクターブ4〜5(C4〜C5)を使用
  • 高いメロディにはオクターブ5〜6を使用

エフェクト

kickstartでは、トラックにエフェクトを適用して音に変化を加えることができます。 >記号でエフェクトチェーンを繋げて、複数のエフェクトを組み合わせることも可能です。

基本的な使い方

シーケンスの後に> エフェクト名(パラメータ)を追加します。

bpm 120

pattern main {
  kick:  [x . . . x . . .] > reverb(0.3, 0.5)
  snare: [. . . . x . . .] > delay(0.25, 0.4) > reverb(0.2)
  hihat: [x . x . x . x .] > hpf(3000) > pan(0.5)
}

play main * 4
試す

エフェクト一覧

reverb リバーブ

空間の残響を加えます。部屋やホールで音が反響するような効果です。

> reverb(mix, size)
mix ウェット量 (0.0〜1.0) デフォルト: 0.5
size 空間の大きさ (0.0〜1.0) デフォルト: 0.5

例: > reverb(0.3, 0.7) - 控えめな量で大きめの空間

delay ディレイ

やまびこのように音を繰り返します。フィードバックで繰り返しの回数をコントロールできます。

> delay(time, feedback)
time 遅延時間(秒) デフォルト: 0.3
feedback フィードバック量 (0.0〜1.0) デフォルト: 0.5

例: > delay(0.25, 0.4) - 1/4拍のディレイ

lpf ローパスフィルター

指定した周波数より高い音をカットします。音をこもらせたり、暖かみを出したりできます。

> lpf(freq, q)
freq カットオフ周波数(Hz) デフォルト: 1000
q レゾナンス(共鳴) デフォルト: 1

例: > lpf(800) - 800Hz以上をカット

hpf ハイパスフィルター

指定した周波数より低い音をカットします。低音を削って明るくシャープな音にできます。

> hpf(freq, q)
freq カットオフ周波数(Hz) デフォルト: 1000
q レゾナンス(共鳴) デフォルト: 1

例: > hpf(3000) - ハイハットの低音をカット

bpf バンドパスフィルター

指定した周波数帯域だけを通します。ラジオや電話のような効果を作れます。

> bpf(freq, q)
freq 中心周波数(Hz) デフォルト: 1000
q 帯域幅(大きいほど狭い) デフォルト: 1

例: > bpf(2000, 5) - ラジオ風の音

distort ディストーション

音を歪ませて、荒々しさや攻撃性を加えます。キックやスネアに使うと迫力が出ます。

> distort(amount)
amount 歪みの量 (0.0〜1.0) デフォルト: 0.5

例: > distort(0.3) - 軽い歪み

bitcrush ビットクラッシャー

音のビット深度を下げて、レトロなローファイサウンドを作ります。ヒップホップやチップチューンに最適です。

> bitcrush(bits)
bits ビット深度 (1〜16) デフォルト: 4

例: > bitcrush(6) - 軽いローファイ感

pan パン

音の左右の位置を調整します。ステレオ空間で音を配置できます。

> pan(value)
value 左右位置 (-1.0=左, 0=中央, 1.0=右) デフォルト: 0

例: > pan(0.5) - やや右に配置

gain ゲイン

音量を調整します。1.0が元の音量で、1.0より大きいと音量アップ、小さいと音量ダウンです。

> gain(value)
value ゲイン値 (0.0〜) デフォルト: 1

例: > gain(1.2) - 20%音量アップ

chorus コーラス

音に厚みと広がりを加えます。複数の楽器が同時に鳴っているような効果が得られます。

> chorus(freq, delay, depth)
freq LFO周波数(Hz) デフォルト: 1.5
delay ディレイ時間(ms) デフォルト: 3.5
depth 深さ (0.0〜1.0) デフォルト: 0.7

例: > chorus(1.5, 3.5, 0.7) - 標準的なコーラス

phaser フェイザー

音にうねりのある揺れを加えます。サイケデリックな効果やスペーシーな雰囲気を演出できます。

> phaser(freq, octaves, baseFreq)
freq LFO周波数(Hz) デフォルト: 0.5
octaves オクターブ範囲 デフォルト: 3
baseFreq ベース周波数(Hz) デフォルト: 350

例: > phaser(0.3) - ゆっくりとしたフェイザー

tremolo トレモロ

音量を周期的に上下させます。振動するような効果や、古いアンプのような雰囲気が出せます。

> tremolo(freq, depth)
freq 揺れの速さ(Hz) デフォルト: 10
depth 深さ (0.0〜1.0) デフォルト: 0.5

例: > tremolo(8, 0.6) - 速めのトレモロ

compressor コンプレッサー

音の強弱を圧縮して、パンチのある音にします。ドラムには必須のエフェクトです。

> compressor(threshold, ratio, attack, release)
threshold 閾値(dB) デフォルト: 24
ratio 圧縮比 デフォルト: 4
attack アタック時間(秒) デフォルト: 0.003
release リリース時間(秒) デフォルト: 0.25

例: > compressor(20, 4) - ドラム向けコンプ

エフェクトチェーン

複数のエフェクトを>で繋げることで、順番に適用できます。 エフェクトは記述した順序で処理されます。

// distort → lpf → reverb の順番で処理
kick: [x . . . x . . .] > distort(0.2) > lpf(500) > reverb(0.3)

ヒント:エフェクトの順番

  • フィルター(lpf/hpf/bpf)はエフェクトチェーンの最初の方に
  • 空間系(reverb/delay)は最後の方に
  • panはチェーンの最後に置くのがおすすめ

モジュール

kickstartでは、複数のファイルに分割したコードをインポートして再利用できます。 キット定義、共通パターン、ユーティリティを別ファイルに分離することで、コードの整理と再利用が可能になります。

基本的なインポート

importキーワードで別のファイルを読み込みます。

// main.kick
import "kits/808.kick"
import "patterns/common.kick" as common

bpm 128

pattern main {
  kick: [x . . . x . . .]
  snare: [. . . . x . . .]
}

play main * 4

インポート構文

構文 説明
import "path" ファイル全体をインポート(エクスポートされた要素がマージされる)
import "path" as name 名前空間付きでインポート
from "path" import { a, b } 特定の要素だけをインポート

エクスポート

exportキーワードで、パターンやキットを公開します。 exportをつけない要素はプライベートとなり、他のファイルからアクセスできません。

// patterns/common.kick

export pattern fourOnTheFloor {
  kick: [x . . . x . . . | x . . . x . . .]
}

export kit "808" {
  kick: "samples/808/kick.wav"
  snare: "samples/808/snare.wav"
}

// プライベート(exportなし)
pattern _internal {
  kick: [x . . .]
}

名前付きインポート

必要な要素だけを選択的にインポートできます。

// 特定の要素だけインポート
from "patterns/common.kick" import { fourOnTheFloor, breakbeat }

pattern main {
  kick: [x . . . x . . .]
}

play main * 4

推奨ディレクトリ構成

大きなプロジェクトでは、以下のようなディレクトリ構成を推奨します:

my-project/
├── main.kick           # メインファイル
├── kits/
│   ├── 808.kick        # TR-808 キット
│   ├── 909.kick        # TR-909 キット
│   └── acoustic.kick   # アコースティックキット
├── patterns/
│   ├── common.kick     # 共通パターン
│   ├── house.kick      # ハウス系パターン
│   └── hiphop.kick     # ヒップホップ系パターン
└── samples/
    └── ...

ヒント:モジュール設計のベストプラクティス

  • キット定義はkits/ディレクトリにまとめる
  • ジャンル別パターンはpatterns/ディレクトリに分類
  • プライベートなヘルパーパターンには_プレフィックスをつける
  • 循環参照を避けるため、依存関係を一方向に保つ

オートメーション

オートメーションを使用すると、時間経過に伴ってパラメータ(BPM、エフェクト、ボリュームなど)を自動的に変化させることができます。 ビルドアップ、ドロップ、フェードイン/アウトなど、曲に展開をつけるために重要な機能です。

BPM オートメーション

->記号を使って、BPMを徐々に変化させることができます。

// BPM を 120 から 140 へ 8 小節かけて変化
bpm 120 -> 140 over 8 bars

pattern buildup {
  kick:  [x . . . x . . . | x . . . x . . .]
  snare: [. . . . x . . . | . . . . x . . .]
  hihat: [x . x . x . x . | x . x . x . x .]
}

play buildup * 8
試す

automation ブロック

より詳細な制御が必要な場合は、automationブロックを使用します。 複数のポイントを指定して、複雑な変化を記述できます。

// automation ブロックで詳細な制御
automation bpm {
  0 bars: 120
  8 bars: 140
  16 bars: 140
  24 bars: 120
}

pattern main {
  kick:  [x . . . x . . .]
  snare: [. . . . x . . .]
}

play main * 24
試す

エフェクトパラメータのオートメーション

エフェクトのパラメータにもオートメーションを適用できます。 フィルターを徐々に開いたり、リバーブの量を変化させたりできます。

// エフェクトパラメータのオートメーション
bpm 120

pattern buildup {
  synth: [x . x . x . x .]*4 > lpf(200 -> 8000 over 4 bars)
}

play buildup * 4
試す

カーブタイプ

変化の仕方を指定するカーブタイプを使用できます。

カーブ 説明 用途
linear 一定の速度で変化(デフォルト) 通常のテンポ変化
exponential 指数的に変化(ゆっくり→速く) ビルドアップ
easeIn ゆっくり始まる フェードイン
easeOut ゆっくり終わる フェードアウト
easeInOut ゆっくり始まりゆっくり終わる 自然な変化
// 様々なカーブタイプ
bpm 120 -> 180 over 8 bars exponential

pattern accel {
  kick:  [x . . . x . . .]
  hihat: [x . x . x . x .]
}

play accel * 8
試す

構文まとめ

// インライン構文
bpm <開始値> -> <終了値> over <小節数> bars [カーブタイプ]

// automation ブロック構文
automation <パラメータ名> {
  <時間> bars: <値>
  <時間> bars: <値>
  ...
}

// エフェクトパラメータ
> エフェクト(<開始値> -> <終了値> over <小節数> bars [カーブタイプ])

活用のヒント

  • ビルドアップではexponentialカーブが効果的
  • フィルターを開く場合は低い値から高い値へ変化させる
  • テンポ変化は聴いている人を驚かせないよう、適切な長さで変化させる
  • ドロップ前にBPMを上げて、ドロップで元に戻すと効果的

サンプル

デフォルトサンプル

Playgroundでは、以下のサンプル名がデフォルトで使用できます:

kick
snare
hihat
openhat
clap
rim
tom
cowbell

カスタムキット

kitキーワードで独自のサンプルキットを定義できます。

kit "808" {
  kick: "samples/808/kick.wav"
  snare: "samples/808/snare.wav"
  hihat: "samples/808/hihat.wav"
  openhat: "samples/808/openhat.wav"
  clap: "samples/808/clap.wav"
}

サンプルパス

サンプルのパスは、相対パスまたは絶対パスで指定できます。CLIでは、ファイルシステム上のパスを使用します。

kit "custom" {
  // 相対パス
  kick: "samples/my-kick.wav"

  // 絶対パス
  snare: "/Users/user/samples/snare.wav"
}

ヒント

Playgroundでは、808サンプルキットがプリロードされています。カスタムサンプルを使用する場合は、CLIまたはVSCode拡張を使用してください。

ライブコーディング

kickstartには、コードを編集しながらリアルタイムで音楽を演奏できるライブコーディング機能があります。 Sonic PiやTidalCyclesのように、音楽を「書きながら演奏」できます。

Watchモード

ファイルを監視し、保存するたびに自動的に新しいパターンに切り替わります。 お好みのエディタを使いながら、リアルタイムで結果を確認できます。

# ファイル監視モードで起動
kickstart watch my-beat.kick

# BPMを指定して起動
kickstart watch my-beat.kick --bpm 140

使い方

  1. ターミナルでkickstart watchを起動
  2. エディタでファイルを編集
  3. 保存すると、次のループから新しいパターンに切り替わる
  4. Ctrl+Cで終了

REPLモード

対話的にコードを入力して、すぐに結果を聴けるモードです。 実験やスケッチに最適です。

# REPLモードで起動
kickstart repl

# BPMを指定して起動
kickstart repl --bpm 120

REPLコマンド

コマンド 説明
help ヘルプを表示
stop 再生を停止
mute <track> トラックをミュート
unmute [track] ミュートを解除(全部または指定トラック)
solo <track> トラックをソロ
unsolo [track] ソロを解除
status 現在の状態を表示
patterns 定義済みパターンを一覧
clear 全パターンをクリア
exit REPLを終了

REPLセッションの例

kickstart> bpm 120
🎚️  BPM set to 120

kickstart> pattern main { kick: [x . . . x . . .] }
✨ Pattern 'main' created

kickstart> play main * 4
▶️  Playing (4 events, 2.00s loop)

kickstart> pattern main { kick: [x . x . x . x .] }
📝 Pattern 'main' updated
[次のループから新パターン]

kickstart> mute kick
🔇 Muted: kick

kickstart> stop
⏹️  Stopped

ライブコーディングのTips

  • 同じ名前のパターンを再定義すると、自動的に上書きされる
  • 変更は次のループの頭から適用される(音が途切れない)
  • mute/soloでトラックを分離してデバッグ
  • パースエラーが発生しても、再生は継続される

CLI

インストール

# Bunを使用(推奨)
bun add -g @kickstart-beats/cli

# npm を使用
npm install -g @kickstart-beats/cli

コマンド

play

.kickファイルをリアルタイムで再生します。

# 基本的な再生
kickstart play my-beat.kick

# BPMを上書き
kickstart play my-beat.kick --bpm 140

# スウィングを上書き
kickstart play my-beat.kick --swing 0.2

export

.kickファイルをWAVファイルとしてエクスポートします。

# WAVファイルにエクスポート
kickstart export my-beat.kick -o output.wav

# サンプルレートを指定
kickstart export my-beat.kick -o output.wav --sample-rate 48000

watch

ファイルを監視し、変更を検知すると自動的に再読み込みして再生します。 ライブコーディングに最適です。

# ファイル監視モードで起動
kickstart watch my-beat.kick

# BPMを指定
kickstart watch my-beat.kick --bpm 140

repl

対話的なREPLモードを起動します。コードを1行ずつ入力して、 リアルタイムで結果を確認できます。

# REPLモードで起動
kickstart repl

# BPMを指定して起動
kickstart repl --bpm 120

オプション一覧

オプション 説明 デフォルト
--bpm テンポを上書き ファイル設定
--swing スウィング量を上書き ファイル設定
-o, --output 出力ファイルパス -
--sample-rate 出力サンプルレート 44100

VSCode拡張

インストール

VSCode Marketplaceから「kickstart」を検索してインストールします。

code --install-extension kickstart.kickstart-vscode

機能

シンタックスハイライト

.kickファイルのシンタックスハイライトを提供します。キーワード、ステップ記号、数値などが色分けされます。

リアルタイムプレビュー

コードを編集しながら、リアルタイムでコンパイル結果を確認できます。

エラー診断

シンタックスエラーやセマンティックエラーをリアルタイムで検出し、エディタ上に表示します。

オートコンプリート

キーワード、パターン名、サンプル名の入力補完を提供します。

ホバー情報

キーワードやパターン名にカーソルを合わせると、ドキュメントが表示されます。

キーボードショートカット

ショートカット 機能
Cmd/Ctrl + Shift + P → "Kickstart: Play" 現在のファイルを再生
Cmd/Ctrl + Shift + P → "Kickstart: Stop" 再生を停止
Cmd/Ctrl + Shift + P → "Kickstart: Preview" プレビューパネルを開く