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は複雑なリズムを簡潔に表現できますshuffleとdegradeでランダム性を加えられます- 変換はエフェクトと組み合わせて使えます:
[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 使い方
- ターミナルで
kickstart watchを起動 - エディタでファイルを編集
- 保存すると、次のループから新しいパターンに切り替わる
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" | プレビューパネルを開く |