前回の記事では、曲を聴かせるとコード進行を推定してギター TAB にしてくれる Web ツール(耳コピ ギター TAB メーカー)を作って、「曲を歌・ドラム・ベースなどに分けてから読むと、コードがよく当たる」という話を書きました。
今回はその続きで、曲のセクション、つまり「ここはイントロ、ここから Aメロ、ここがサビ」という区切りを自動で推定してみました。さらに、その構成を手がかりにコードを直してみました。
結論から言うと、セクションの分かれ方は、聴いていて「たしかにここからサビだな」と思えるくらい、わりと納得感のあるものになりました。そして、構成をもとに直したコードで鳴らすギターが、一番しっくりきます。
まずは聴いてみてください
フリー音楽素材の魔王魂「シャイニングスター」と「Burning Heart」のサビを、元の曲と、ツールが作った TAB を弾く合成音のギターで一緒に流せます。ギターのコードは、次の 3 種類から選べます。
- 速い解析:曲の音をそのまま読んだコード
- パートに分けてからの解析:前回の方法。歌とドラムを抜いた音で読み直したコード
- 曲の構成で直した結果:今回の方法(推定したセクションを手がかりに直したコード)
再生中に別のボタンを押すと、同じ位置のままギターのコードだけが切り替わるので、「同じところを 1 で聴いて、すぐ 3 で聴く」ができます。
自分で聴き比べてみると、3 が一番しっくりきました。サビのところで「あれ、今のギター変じゃない?」と引っかかる小節が減って、ギターのバッキングを気持ちよく聴いていられます。ぜひ曲と合わせて聴いてみてください。
ページの下のほうでは、曲全体のセクションの推定結果や、パートごとの音(歌だけ、伴奏だけなど)も聴けます。
何をしたのか
1. セクションを推定する
セクションの推定では、3 つのやり方を試しました。
- 規則だけ:「歌が入る前はイントロ」「一番高い音域で何度も繰り返すのがサビ」のような決まりを、プログラムで書く方法。1 曲目ではうまくいったのですが、その曲に合わせて調整しすぎて、別の曲に当てると「4 小節だけのサビ」が続くような、変な分け方になりました。
- AI だけ:小節ごとの数字を AI(Claude の小型モデルの Haiku)に渡して、分けてもらう方法。それっぽい形にはなるのですが、回ごとに結果がぶれますし、イントロを消してしまったり、転調した所をサビと呼んだりしました。
- 規則+AI:規則で確かな事実と下書きを作り、AI がセクション名(Aメロ・サビなど)を決め、最後に規則で事実に反する所を直す方法。これが一番安定しました。
規則も AI も、それぞれ得意なことが違ったので、分担させた形です。
2. 手がかりは「分けた歌」
規則で使った手がかりは、どれも、曲を歌・ドラム・ベース・その他の楽器に分けた音(前回の記事の音源分離)から取っています。
- 歌が入っているか:分けた歌の音量。歌が入る前ならイントロ、歌が途切れていれば間奏、と分かります
- 歌の高さ:分けた歌の音の高さ。Aメロより、サビの方が高く歌われていることが多いです
- その付近の調(キー):前後数小節の響きから推定した調。転調の手がかりになります
- 同じ歌詞の繰り返し:分けた歌に音声認識(Whisper)をかけて、前に出てきた歌詞と同じ行を歌っている所を探します
一番効いたのは、最後の歌詞の繰り返しでした。Aメロとサビは、コード進行が似ていることがよくあるので、コードだけでは区別しにくいです。でも、サビは同じ歌詞を繰り返すのに対して、Aメロは 1 番と 2 番で歌詞が変わります。シャイニングスターで試すと、歌詞の文字が似ていたのはサビどうしだけで、ほかの組み合わせはまったく似ていませんでした。
ちなみに、歌詞は著作物なので、文字そのものは AI に渡していません。手元で「この行は、何行目と同じ」という番号にしてから渡しています。
3. セクションを手がかりに、コードを直す
セクションが分かると、「何度も出てくるサビは、同じ位置で同じコードのはず」という考えが使えます。そこで、サビを全部重ねて、同じ位置の小節どうしを比べました。
- 規則で、怪しい小節を探す。たとえば、何回か出てくるサビのうち 1 回だけコードが違う小節や、長調か短調か決めきれていないコード(sus2 と読んだもの)
- 規則で、直す候補を出す。ほかの回で読まれたコードや、それを素直な形にしたもの。それぞれ、その小節の音にどれくらい合うかの点数も付ける
- AI が、候補の中から選ぶ。新しいコードは作らせません
- 最後に規則で、音に合わない直しを取り消す
AI が勝手にコードを作り替えないように、選べる範囲を規則で絞っているのがポイントです。試しに、AI に曲全体のコードを自由に直させてもみたのですが、回ごとに直す場所が大きくぶれてしまい、使いものになりませんでした。
どれくらい良くなったか
シャイニングスターは、ChordWiki に投稿されたコード譜(どなたかの耳コピで、正解ではありません)と比べてみました。最初の歌の部分の 32 か所で、ルート音(コードの土台になる音)が合っていたのが 25 → 26 か所、長調・短調まで合っていたのが 18 → 20 か所です。
数字の上では 1〜2 か所の差ですが、聴くと差は数字以上に大きく感じます。直ったのは、サビの繰り返しの中で 1 回だけ違う読みになっていた所などで、そこがちょうど「聴いていて引っかかる」所だったからだと思います。
セクションのほうは、自分で聴いてみて、サビなどの区切りはほとんど合っていると感じました。
まだ足りないところ
- 正解のコード譜と比べられたのは、シャイニングスターの 1 曲だけです。Burning Heart には比べられる譜面がないので、ぜひ耳で確かめてみてください
- 規則の数値には、シャイニングスターを見て決めたものがあります。いろいろな曲で試して、合わせすぎていないかを確かめるのが次の課題です
使った規則は、ページの下の「しくみ」に、数値まで全部載せています。
- 音楽:魔王魂「シャイニングスター」(歌:詩歩、作詞・作曲:森田交一)https://maou.audio/14_shining_star/ 、魔王魂「Burning Heart」(ボーカル:KEI、作詞作曲:森田交一)https://maou.audio/08_burning_heart/ 。ページのパートごとの音は、魔王魂の楽曲を改変(パート分け)したもの
- 比べた投稿譜:ChordWiki「シャイニングスター」 https://ja.chordwiki.org/wiki/%E3%82%B7%E3%83%A3%E3%82%A4%E3%83%8B%E3%83%B3%E3%82%B0%E3%82%B9%E3%82%BF%E3%83%BC
- 音源分離:SCNet Small(Tong ほか)、ZFTurbo/Music-Source-Separation-Training(コードは MIT)
- 音声認識:Whisper(MIT)、mlx-whisper
- AI:Claude Haiku


