切ない曲ってどんなものでしょうか。SunoなどのAI作曲ソフト・サービスで切ないバラードを生成したいときは、sentimental ballad, heart-aching, sorrowful, emotionalといった表現を使いますが、それが意味するところは?
中学生の頃、覚えはじめのフォークギターでAmを押さえたあとE7に行く曲が好きでした。Am→E7。Em→B7もそう。
それだけで初期の日本のフォーク、ニューミュージックっぽくなります。かぐや姫や井上陽水っぽくもなる。当時は理屈など知りませんが、AmのソがE7でソ#に半音持ち上がる、あの一瞬に「翳り」が宿ることだけは、指と耳が実感しました。
そこから半世紀。その「翳り」の正体を今度はヴァイブ・コーディングで検証してみることにしました。
テーマは初期ユーミン、荒井由実期の切ないバラードです。ビートルズっぽい楽曲ジェネレータを作ってわりと上手くいったので、その構造を活かせるだろうと。
Claude Fable 5との共同作業で、コード進行からメロディ、歌詞の設計、果ては自己採点による選曲まで行う「黄昏バラード・ジェネレータ」を作りました。本稿はその開発レポートであると同時に、「切なさとは何か」を音楽理論の言葉でほどいていく試みでもあります。


▲黄昏バラード・ジェネレータのスクリーンショット。コード譜の技法色分けが見える
切なさは気分ではなく構造である
まず出発点の仮説。切なさは、曲の上に漂う気分ではなく、楽譜の中に置かれた構造である……。これが本プロジェクトの前提です。
例えばCメジャーの曲で、Fの和音がFmに変わる瞬間があります。壮大なパイプオルガンで始まる「翳りゆく部屋」を思い浮かべてください。理論用語ではサブドミナントマイナーと呼びます。同主短調(Cメジャーに対するCマイナー)から和音を一時的に「借りて」くる技法で、長調の明るい空にすっと雲がかかるのです。ビートルズの楽曲でも出てきました。
中学生の私が「発見」したAm→E7も、実は同族です。マイナーキーの中に長三度を含むドミナントが差し込まれ、半音ひとつで景色が変わる。方向は逆ですが、どちらも「いまいる調の外から一音だけ借りる」ことで生まれる翳りです。
だとすれば、翳りは実装できます。ジェネレータの和声エンジンには、初期ユーミンの語法を6つの技法として組み込みました。
Ⅳ→Ⅳm(サブドミナントマイナー)、サビをⅣの和音から始めてトニックを回避する王道進行、「卒業写真」系のカノン風クリシェ下降、Ⅲ7やⅥ7のセカンダリドミナント、プロコル・ハルム由来の♭Ⅶ借用、そしてジャズ経由のツーファイブ。曲はテンプレートとシード値から決定的に生成され、画面上のコード譜には各和音がどの技法かが色分けで表示されます。切なさに「出どころ」のラベルが付くわけです。

メロディの切なさは「一音浮いている」こと
和声だけでは曲になりません。メロディ側の切なさをどう書くか。
鍵は9thでした。CM7の和音の上でレの音を長く伸ばすと、和音に溶けきらず一音ぶん宙に浮きます。この浮遊感を確率として実装しました。maj7系の和音の上では9thから歌い出す重みを最大にし、各セクションの終わりは一音上から降りて長く伸ばす「ため息音型」、そして曲の最終音は9thのまま解決せずに消えます。
もうひとつ、どうしても入れたかったのが跳躍です。「朝陽の中で微笑んで」の歌い出しのような、フレーズ頭でふわっと上へ大きく飛ぶあの音型です。順次進行(隣の音への移動)が主体の歌謡曲的メロディとの決定的な違いで、しかもユーミンの場合、跳躍の着地がコードトーンだけでなくテンションに乗ります。
実装では、フレーズ頭で6度前後(7~10半音)の上行跳躍を確率的に発生させ、サビ頭ではほぼ必ず飛ぶようにしました。着地候補にはコードトーンに加えて9thを含めます。跳躍のあとの2音は下降方向に強制します。クラシックの旋律法にいう「跳躍後の反行」を、テンション着地でやるわけです。
サビはⅣの和音でハーモニーが浮いている場所なので、そこへ大跳躍で入ると、和声とメロディの浮遊感が重なります。生成された曲を聴いて、いちばん「それっぽい」と感じるのはこの瞬間です。
「時の河転調」を検証してから実装する
初期に限定するつもりでしたが、どうしても入れたい後期の技法がひとつありました。1984年、薬師丸ひろ子に提供された「Woman "Wの悲劇"より」の転調です。
この曲の分析としてよく引かれるのが、本編Cマイナーからサビで色彩が変わるようにA♭メジャーへ移る、通称「時の河転調」です。
実装前にWebで裏を取ったところ、評論家のスージー鈴木氏がこの曲の名曲性を、9thを使った「一音分浮いている」サビのメロディと、この転調の2点に求めていることも確認できました。奇しくも、こちらが初期様式として実装済みだった9thの浮遊感と同じ設計思想が、後期の提供曲にも貫かれていたことになります。
転調の仕組みが美しいのです。行きは、Bメロ最後に置いた♭Ⅲ7(Cマイナーで言えばE♭7)が、そのまま新キーA♭のⅤ7として読み替わります。帰りは、サビ最後の新しいⅠ(A♭)が、旧キーの♭Ⅵとしてそのまま機能転換します。行きも帰りも共通和音を通るので、転調したことに気づかないほど滑らかなのです。実装ではこのピボットの一致をコードで検算しました。E♭7=新キーのⅤ7、旧♭Ⅵ=新Ⅰ。数式として一致することを確認してからテンプレートに落とす。音楽理論の検証がユニットテストになるという開発体験は、なかなか新鮮でした。
筆者はこの曲のカバーをバンドで何度か演奏していて、自分の担当であるシンセサイザーのパッドでサビに行く(転調)ところが非常に気持ちよかったのですが、改めてこうしてAIに解説してもらい、さらには自分でも作曲(ボタンを押すだけ)してもらうことでやっと実感できたというわけです。

終わらせない、という技法
エンディングにも切なさの技法があります。「旅立つ秋」は最後がsus4のまま終わります。sus4は和音の3度を4度に吊り上げた響きで、3度がないということは、長調とも短調とも確定しないということです。普通は直後に3度へ解決させて使うのですが、解決させずにそのまま曲を消すと、答えを出さないまま幕が下りることになります。
これをオプションとして実装したところ、面白い偶然がありました。通常モードのアウトロはⅣM7→Ⅳm6→Ⅰという流れなのですが、最後をⅠsus4に差し替えると、Ⅳm6に含まれる4度の音がそのままsus4の吊られた音として持ち越されるのです。サブドミナントマイナーの翳りが、解決しないまま宙吊りで残る。狙って設計した以上の効果が、技法同士の相性から勝手に生まれた瞬間でした。
歌詞にもアルゴリズムはある
音だけでなく、歌詞の切なさも構造化を試みました。初期ユーミンの詞法を分解すると、いくつかのはっきりしたルールが見えてきます。「悲しい」「寂しい」という感情の形容詞を使わず、濡れた道路や冷めた紅茶に感情を預ける情景転写。地名をひとつだけ置いて映像を固定する固有名詞の錨。使わなかった切符ひとつに関係の履歴を背負わせる小道具の圧縮。現在→回想→現在と往復する時制。
ジェネレータでは、場所・季節・光・小道具・出来事・関係の位相という6カテゴリの語彙バンクからシードで「情景セット」を抽選し、これらのルールとともに歌詞生成プロンプトへ織り込みます。さらにメロディとの接続があります。生成されたメロディを解析してロングトーンの位置を割り出し、「この音節にはア段・オ段の開いた母音を当てよ」という指示に変換するのです。「まま」「そら」は伸びますが、イ段・ウ段は詰まって歌いにくい。跳躍する音には核になる言葉の頭を置く。メロディの山と言葉の山を一致させる、職業作家が体でやっていることの明文化です。
ただ、情景セットは固定しがちなので、Gemini、ChatGPT、Claudeにプロンプトとして投げたほうが今のところは良さそうです。

揺れがなければ弾き語りにならない
「雨の街を」のような弾き語り感を出したい、という要求は、実装してみると音色ではなくタイミングの問題でした。ストリングスとベースを休符にしてピアノと歌だけにするのは簡単ですが、それだけでは打ち込みの伴奏が裸になるだけです。
必要だったのは揺れでした。全打鍵に±12ミリ秒のランダムなずれと強弱のばらつきを与え、アルペジオは小節の中で1音ごとにわずかに遅れていくようにします(8音目で約60ミリ秒後ろ)。急がず、少しずつ間が伸びていくアゴーギクです。そして歌は各音がピアノより12~32ミリ秒だけ遅れて入る後ノリにしました。自分で弾きながら歌うとき、伴奏が先に置かれて声が追いかける、あの関係の再現です。数十ミリ秒の話ですが、これを入れた途端に「ひとりで弾いている」音になります。切なさの一部は、正確さからの逸脱にも宿っているようです。

ただ、アルペジオならうまくいくのですが、ブロックコード(4つ打ち)だと、塊になりすぎていて、不自然さを感じるようになってしまいました。この辺は改良の余地ありです。まあ、そこにこだわるならSunoに持っていくなり、Logic ProのPlayers機能を使うとか、いくらでもやりようがあります。
200曲を0.1秒で作り、AIが自分で選ぶ
やってみてわかったのは、出来上がったメロディーには出来・不出来がけっこうあるのです。不自然なメロディーラインはプログラムで防げないか。
しかし、このソフトは作曲が一瞬で終わります。それならばたくさん作って選べばいい。そこで、生成した曲をプログラム自身が採点して最良を選ぶ機能を付けました。
評価基準は、ここまで積み上げてきたルール。サビ頭で跳躍しているか。跳躍は2~5回に収まっているか。順次進行の割合は50~80%か。最高音はサビの中に置かれているか。ロングトーンはどれだけ9thに乗っているか。フレーズは4~8音で歌いやすいか。呼吸(休符)はあるか。全9基準、66点満点です。
実測では、200曲の生成と採点が102ミリ秒で終わりました。興味深いのは分布で、最高56点、中央値36点、最低17点。同じアルゴリズムから出てくる曲に3倍以上の開きがあるのです。ランダムの海から構造の整った個体を釣り上げる、小さなbest-of-Nサンプリングと言えます。上位5候補はワンタップで聴き比べられるので、最終判断は人間の耳に返ってきます。AIが作り、AIが選び、人が決める。この分業は今後いろいろな創作に敷衍できる気がしています。

サンプラーが鳴っていなかった、という落とし穴
実装の裏話をひとつ。ピアノ音源には定番のSalamander Grand Pianoのサンプラーを使っていました、。そのつもりでした。どうも音がリアルでないと調べてみると、Claudeのartifact環境はセキュリティポリシー(CSP)で外部への通信が制限されており、サンプル音源のmp3が最初から一度もダウンロードされていなかったのです。読み込み失敗時にシンセ音源へフォールバックする作りにしていたため、ずっと代替音を聴いていたことになります。
対処として、どちらの音源が鳴っているかを示すバッジを画面に付け(緑ならSalamander、赤なら代替)、代替シンセも三角波からピアノらしいFM合成に作り直しました。そして本命の解決はローカル実行です。
Viteプロジェクト(Webアプリケーションをローカル環境で動かすために必要な、プログラムのコードや設定ファイルがすべて揃ったフォルダセット)一式に書き出せば、CSPの制約なくC2からD#5まで14ポイントのサンプルがフルに読み込まれます。
曲はシードから決定的に生成されるので、ブラウザ上で選んだ曲のシードをローカル版に入れれば、同じ曲が本物っぽいピアノ音源で鳴ります。ブラウザで作曲し、ローカルで書き出す。AIツール開発ではこの手の「静かな失敗」が本当に多く、システムに自己申告させる設計の大切さを改めて思い知りました。
プロンプトで書ける切なさ、書けない切なさ
最終出力はSunoでの歌唱を想定しています。
様式や編成、歌詞の技法はプロンプトで指定できます。和声も「borrowed minor-iv chords darkening the major key」のような性質記述なら寄せられます。しかしメロディの音型——6度跳躍も、9thのロングトーンも、ため息音型も——はプロンプトの語彙には期待できません。だからこのツールはWAVを書き出します。プロンプトで指定できない層を、参照音源として音で強制するためです。
ちなみに歌声のほうは案外プロンプトが効きます。少し鼻にかかった、押し潰したような声は「pressed and slightly squeezed female vocals, flattened reedy timbre, minimal vibrato」あたりの記述で驚くほど寄ります。逆に「clear voice」「breathy whisper」を除外指定しないと、AIはすぐ声を綺麗に整えてしまいます。切なさは、整えないことの中にもあるのです。
ただ、やりすぎると投げやりな感じに。
むすび——Am→E7の続き
開発を終えて、中学生の頃の疑問に一応の答えが出た気がしています。あのAm→E7の胸のすく感じは、半音ひとつの借用が生む構造でした。Ⅳ→Ⅳmも、9thの浮遊も、解決しないsus4も、みな同じ族の構造です。切なさはかなりの部分までアルゴリズムで書けます。200曲を0.1秒で作って採点までできてしまいます。
このジェネレータが吐き出す曲に情景セットの歌詞を載せてSunoに歌わせたとき、聴き手それぞれの記憶に結びつける余地があります。そこの想像力まではAIは補完できません。それができるのは人間なのです。
今回の作例で、ジェネレーターが提案した歌詞には、「高輪の坂で」というフレーズが含まれていました。絵画の個展に行くために妻と二人で登っていった高輪の坂。翌年のその画家の個展は共通の友人がFaceTimeでベッドに中継してくれました。そんなことを思い出させてくれただけでも、このプログラムをヴァイブ・コーディングした価値はあるような、そんな気がしています。
※この記事は、Claude Fable 5とのコーディングのやりとりを元に記事を生成し、筆者が整理・追記したものです。









