音楽スキル

端末から音楽を作成、確認、理解するためのスキル。エージェントは音楽を聴けないため、すべての処理をテキストと数値と画像で確認します。ハウスやテクノのトラック、ビート、ループ、動画や音声のBGM、指定の長さ・テンポ・キーの音楽、ステムやMIDIの作成、またはオーディオの解析(BPM、キー、ドロップの位置、ミックスの濁りの原因など)や、納品前のオーディオチェック(ラウドネス、トゥルーピーク、クリッピング、モノラル互換性)に使用します。

音楽スキル とは?

このスキルは、音を聴くことのできないAIエージェントが、コマンドラインから音楽制作、分析、チェックを実行できるように設計されています。`banger.py` はシード値からハウスやテクノのトラックを生成し、テンポやキー、長さなどを細かく指定できます。生成はルールベースの探索アルゴリズム(Banger Lab方式)に基づいており、各ノートの配置にはリズム知覚や音楽理論の研究結果が反映されています。`listen.py` は任意のオーディオファイルに対して、BPM、キー、ラウドネス(LUFS)、トゥルーピーク、ステレオ幅、帯域別エネルギーなどを数値化し、スペクトログラム画像(`sheet.png`)も生成します。`check` コマンドは指定された基準に合致しているかを検証し、条件を満たさない場合はエラー終了します。これにより、エージェントは「音を聴く」代わりにテキストと数値を読んで判断できます。主な利用ケースは、音楽生成、オーディオ解析、ミックスチェック、そして生成AIが作った音楽の品質確認です。対応プラットフォームは Claude Code、Cursor、Codex などのコマンドライン実行が可能なAIエージェントです。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/kylefritz/music-skill/tree/HEAD

Installed? Explore more 生産性&コラボレーション skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

音楽スキル は何をしますか?

スクリプトはこのファイルと同じディレクトリの scripts/ にあります。以下では $S と表記しますが、各コマンド内では絶対パスを直接記述してください。シェル変数はBash呼び出し間で引き継がれません。

あなたは音を聞けないので、すべてのステップで音楽を読み取れるものに変換します:パターンをテキストとして、確認する数値、そして見るための1枚の画像。 トラック制作は種(シード)→ スコアを読む → レンダリング → lookで確認 → 修正、という流れです。オーディオの理解は look → タイムラインとシートを読む → 判断、です。納品は check で、「適切なラウドネスでクリッピングしていない」ことを確認します。

uv と ffmpeg が必要です。すべてのコマンドは uv run --no-project --with numpy --with scipy --with pillow python -I <スクリプト> … として実行します。以下ではこれを RUN と表記します。

トラック制作: banger.py

RUN $S/banger.py --seed 4242 --out <scratch>/b4242

72小節のハウスまたはテクノトラックは約10秒で生成されます:track.wav(48kHz ステレオ、-14 LUFS)、track.mid、score.txt、score.json。同じシードとオプションからは常に同じファイルが生成されます。

設定項目オプション
スタイル--style deep-house(120-124 BPM)、tech-house(124-128)、peak-techno(130-136)、melodic-techno(122-126)
テンポ、キー--bpm 124、--key A、--mode minor(または dorian、phrygian)
長さ--bars 24(8以上の偶数)、または --seconds 30:小節数を選び、最後の小節が2.5秒早く終わりリバーブが時間通りに鳴り終わるようテンポを調整
ボーカル用BGM--lufs -22 --mute lead(clapのミュートも試す)
DAW用パーツまたはミックスチェック用--stems で stems/<レイヤー>.wav を書き出し;track.mid は常に書き出し

小節数で構造が決まります:8-10はループ、12-22はイントロ、ドロップ、アウトロ、24-46は2つのドロップの間にブレイクダウンとビルドアップを追加、48以上はグルーヴセクションと8小節パートを持つフルフォーム。

レンダリングする前にスコアを読んでください。 スコアはパターンをテキストで表示します:

seed 4242  Melodic techno  122 BPM  G minor  swing 1%  chords: pluck
       1...2...3...4...
kick   X...X...X.X.X...
clap   .o..X.......X...
hat    x.X...X.x.X...X.
bass   .....ORO.O.O3RRR
chords ...X............  i7 Gm7 | bVII7 F7 | bVI7 Ebmaj7 | iv7 Cm7
lead   47244.42.22..442 .3315.553.5.3557
perc   fit  74%   1293 patterns tried   weakest: Evenly spread 52%, Clear mix 20%

. は休符、o はソフト、x はミディアム、X はラウド。ベース:R はルート、5 は5度、O はオクターブ、3 は3度。リード:2小節にわたるスケール度数0-9。fit はそのパートがルールにどの程度適合しているか、weakest は満たせなかったルールを示します。

シードを選ぶには、まずテキストで試聴します:python3 $S/groove.py --seed N は探索のみを実行します(0.5秒、音声なし、依存関係なし)。いくつか試して、コードとリードを読み、自分が守れるものをレンダリングしてください。あなたは「いい音かどうか」を判断できません:その旨を伝え、ファイルを人に渡してください。

トラックの生成方法

この手法は Banger Lab に基づいています。モデルではなく探索であり、すべてのルールはリズムまたはピッチ知覚の研究に基づいています。

  1. ロール決定。 シードがスタイル、テンポ、キー、スケール、およびターゲット(1小節あたりのハット数、シンコペーションの量、異なるコードの数)を決定します。
  2. 初期生成。 各楽器はランダムな16ステップパターンで開始します。
  3. テスト。 1ステップずつの変更(追加、削除、スライド、強く、弱く)すべてを、その楽器のルールに基づいてスコアリングし、さらにランダムな2ステップジャンプもいくつか試します。最高スコアのものが採用されます。
  4. ロック。 変更によってスコアが上がらなくなったら、そのパートは完了し、次の楽器をその上に書き込みます。順序:キック、クラップ、ハット、オープンハット、パーカッション、ベース、コード、リード。各レイヤーは4回ランダムに開始し、最良のものを保持します。
  5. リスニング。 banger.py が各楽器を単独でレンダリングし、そのエネルギーが6つの帯域のどこにあるかを計測します。次に、ハット、パーカッション、ベース、コード、リードを再調整し、複数のパートが同じステップで同じ帯域を占有しないようにします。
  6. アレンジ。 パートがセクションになり、4小節と8小節ごとにフィルイン、ブレイクダウンで開くローパスフィルター、ビルドアップでのスネアロールとライザー、1拍の無音、そしてドロップ、という構成になります。

グルーヴを生むもの:ルール

これらのルールは、手書きパターン、MIDI、または音楽モデルへのプロンプトなど、あらゆる方法で音楽を作成または編集する際に使用してください。score.json には、トラックの各ルールのスコアと出典が含まれています。

パートルール出典
キック各拍に配置;0-2個の追加音まで、拍の直前に配置;決して2つ連続しないButler 2006
クラップ拍2と4でラウド、拍1と3ではオフ;追加音は小さく弱い16分音符にButler 2006; Witek 2014
ハットオフビートに、キックの間に配置;均等に分散;小節の前半と後半で同じパターン;ラウドとソフトが交互にButler 2006; Toussaint 2005
オープンハット2つのキックの中間、キックやクラップと同じタイミングには決して配置しないButler 2006
パーカッションキックとクラップが鳴っていないところに均等に分散し、25-50%は小さなゴーストノートToussaint 2005; Witek 2014
ベースキックが鳴っていないところで演奏;ルート(またはそのオクターブ)を60-90%の確率で、5度または3度をアクセントとして使用Plomp & Levelt 1965; Krumhansl & Kessler 1982
コード1小節目はホームコード;ルートは順次進行、3度または4度で移動;各声部は次のコードへ最短距離で移動Krumhansl & Kessler 1982; Tymoczko 2011
リード強拍ではコードトーン;コードトーンの半音上は禁止;小さなステップ;小節1は疑問形(ホームノートで終わらない)、小節2は類似リズムで応答(ホームノートで終わる);コードヒットの隙間で演奏Plomp & Levelt 1965; Huron 2001; Caplin 1998
全体中程度のシンコペーション:強い拍をスキップする弱いステップにいくつかの音符。少なすぎると硬く、多すぎるとビートが不明瞭になるWitek et al. 2014
タイミングスイングとプッシュ/プルは楽器ごとに12ms未満に抑える(ハットは遅め、クラップは早め)。より大きなずれはグルーヴ評価を下げるDavies et al. 2013
ミックス同じステップで同じ帯域の2つのパートは互いをぼやけさせる;1ステップに4パート以上ヒットさせないPlomp & Levelt 1965
フォームブレイクダウン、ビルドアップ、ドロップ:キックとベースを外し、テンションを上げ、それらを戻すSolberg & Dibben 2019; Butler 2006

すべての音符は1つのスケールから生成され、キックはホームノートにチューニングされるため、どのシードでもキーは維持されます。ルール間の重みは簡略化されたものであり、聴取データに適合させたものではありません。そのため fit はトラック内でパターンをランク付けするものであり、トラック間の品質スコアではありません。

聴く: look

RUN $S/listen.py look TRACK --sheet <scratch>/sheet.png

ffmpegがデコードできるあらゆるもの(動画の音声や生成モデルからの音楽を含む)で動作します。テンポ、キー、ラウドネス、トゥルーピーク、バランス、ステレオ幅、警告、およびタイムラインを表示します:

track.wav  2:24.1  122.0 BPM (strength 7.9)  G minor (score 1.62; next Eb major 1.61)
  loudness -14.0 LUFS  true peak -1.3 dBTP  range 9.3 LU  peak-to-loudness 12.7 dB
  balance, dB under the loudest band  sub -2  bass 0  low mid -8  mid -17  high -24  air -27
  timeline, 15.7 s windows (8 bars): loudness, then each band in dB against its level over the whole track
    start     LUFS        sub    bass low mid     mid    high     air
     0:47.2   -12.6         +2      +2      +1      +2      +1      -2
     1:03.0   -21.1        -29     -12      +1      -7      -7      -6
     1:18.7   -20.5        -33     -12      +1      -1      +3      +6
     1:34.4   -12.6         +2      +2      +1      +2      +1      -0

タイムラインから構造を読み取ります。サブとベースが20-30 dB低下しているのはブレイクダウン(キックとベースが抜けている)です。ハイとエアが上昇しサブが抜けたままなのはビルドアップ。すべてが同時に戻るのがドロップです。次にシート(波形、スペクトログラム、6つの帯域レーン、ラウドネスカーブ)を読みます:ライザーは斜めの線、キックは下部の明るい点の縦の列、隙間のない平らな色のブロックはダイナミクスのないミックスです。瞬間を説明するときはシートの軸から時間を引用してください。

信頼性(既知の正解を持つ24トラックで測定):

  • テンポ:24/24で0.2 BPM以内。70-190 BPMを優先するため、他のマテリアルでは倍または半分のテンポが可能性あり。強度2未満は安定したビートがないことを意味する:BPMは推測であると伝える。
  • キー:ホームノートは24/19で正解、短いまたはまばらなオーディオでは信頼性が低下。メジャー/マイナーの判断はより弱く、モードの区別は不可。上位2スコアが近い場合はその旨を表示し、両方を報告する。
  • ラウドネスとトゥルーピーク:ffmpeg -af ebur128=peak=true と同じ数値を0.1の精度で。

ステム同士の比較: mix

RUN $S/listen.py mix <scratch>/b4242/stems

各ステム:ラウドネスとそのエネルギーの位置。次に、最も重複しているペア(同じ帯域、同じ瞬間)と、最大音量のステムと比較して非常に静かなステムを表示。ペアが60%を超える場合、2つのパートが1つの空間を争っていることになります:時間、ピッチ、またはレベルでいずれかを移動してください。

目標数値とチェック

目標数値
単体のトラック(ストリーミングはこの付近でノーマライズ)統合**-14 LUFS**
Web動画またはポッドキャストの完成ミックス-16 LUFS
ボーカル用BGM約-22 LUFS
トゥルーピーク、常に-1 dBTP以下:ロスレスエンコードはオーバーシュートする
ピーク対ラウドネス比7 dB未満リミッターかけすぎ:フラットで疲れる
120Hz以下のステレオ相関が0.6未満ベースがモノラルで消える可能性あり(電話、クラブ)
RUN $S/listen.py check TRACK --lufs -14 --peak -1 --seconds 30 --bpm 124

ファイルを渡す前には check が成功しなければなりません。失敗した場合は終了コード1で終了します。クリッピングや開始時の無音も検出します。生成モデルからの音楽はこれが最も重要です:ある生成BGMは+3.2 dBTPで2,121のクリップサンプルがありました。ffmpegで修正し(loudnorm=I=-14:TP=-1.5:LRA=11)、再度チェックしてください。

納品

  • 小さなコピー:ffmpeg -i track.wav -c:a aac -b:a 160k track.m4a(または -c:a libmp3lame -q:a 2)。コピーに対しても check を実行してください:エンコードによりトゥルーピークが変化します。
  • 映像の下に:--seconds <映像の長さ> と --lufs -22 でレンダリングし、video-skill に渡します。video-skillが最終ミックスをチェックします。
  • ループ:--bars 8 でレンダリングし、2.5秒のテールをカット(-t <8小節の秒数>)してクリーンに繰り返すようにします。
  • score.txt をファイルと一緒に保持してください:その最終行はそれを生成した正確なコマンドです。

このツールが適さない場合

banger.py はオシレーターとノイズからフォー・オン・ザ・フロアのエレクトロニックミュージックを生成します。サンプル、ボーカル、他のジャンルはなく、そのミックスはマスタリングされたリリースよりも暗く狭いです(デモのミッドはベースの17 dB下にあります)。アコースティック楽器、歌、または名前付きのムードには、音楽モデルまたはライブラリトラックを使用し、その後 look と check を実行してください。このツールが提供するもの:正確なテンポ、キー、長さ、同じシードからの同一結果、ステム、MIDI、ライセンス不要、そしてすべての音符に対する理由。

よくある間違い

間違い修正
トラックが「素晴らしい音」と言うあなたはそれを聞いていません。数値とシートが示すものを報告してください;人が音を判断します
選択するために20個のシードをレンダリングするgroove.py --seed N で0.5秒でスコアが表示されます;選んだものをレンダリング
トラック間で fit を比較するこれは1つのトラック内でのみパターンをランク付けします
10秒のクリップのキーを信頼する上位2候補を両方提示
WAVを check なしで渡すcheck し、エンコードされたコピーもチェック
モデルからの音楽をそのまま使用するまず look:クリッピングと+dBTPピークが一般的
BGMがボーカルと競合する--lufs -22 --mute lead を使用し、1-4 kHzをクリアに保つ

関連スキル