第4話 作業物語 「歌詞は合ってるのに、なぜか曲が盛り上がらない話」
困ったこと
AIに曲を作ってもらうようになって、ある違和感がぬぐえなくなった。
歌詞のチェックはちゃんとしている。音の数(音節)がメロディに収まっているか、力強い言葉が入っているか、行ごとの長さに波があるか——全部、文字を見て機械的に数えて合格にしている。それなのに、いざ鳴らしてみるとモノトーンな曲がときどき混じる。「高音で歌って」と指示したはずなのに、低いまま歌っている。文字の点数は満点なのに、耳は不合格と言う。
どう解決したか
原因は、文字しか見ていなかったことだった。
歌詞に「胸を張れ」という力強い言葉があれば合格にしていたけれど、実際にその音が高いところで歌われているかは、誰も確かめていなかった。そこで音源そのものを解析することにした。音の高さの平均位置を測れば「本当に中高音を使っているか」が分かるし、音程のゆれ幅を測れば「本当に抑揚があるか」が分かる。さらに面白いのは、文字の点数と音の実測を半々で混ぜて評価するようにしたこと。言葉の設計と、実際に鳴った音——両方で初めて「良い曲」だと判定できるようになった。
何が変わったか
「文字で合っているのに曲が微妙」という手詰まりが消えた。
満点でも、耳が不合格なら音源側の実測が教えてくれる。逆に、文字では地味でも鳴らしてみたらよく響く曲が見つかることもある。チェックの軸を「設計」と「実測」の二枚にしたことで、AIとの曲作りが作って終わりから鳴らして確かめるに変わった。何事も、計画の点数と成果物の実測、両方を見ないと分からない——音楽でも。
<details><summary>▶ 技術的にどう作ったか</summary>
- 背景: Phase 1で歌詞文字列ベースの3軸評価(音節密度・中高音使用率・抑揚幅)を実装していたが、文字面の指標は「歌詞のデザイン」しか担保せず「実測の音響」を保証していなかった(AI音楽生成のモデリング不確実性で音高がブレる)
- Phase 2の実測化: 生成音源(wav)を Python の音声解析ライブラリ(librosa)で解析
- 軸B(中高音使用率): スペクトル重心(spectral_centroid)の頻度分布から A4(440Hz) 以上の比率を実測
- 軸C(抑揚幅): pYIN 音程推定で音高時系列を取得 → 標準偏差を実測値に採用
- 評価融合: 各軸 = 実測値と文字列ベース値の加重平均(初期は各50%・1-2ヶ月の運用統計で重みを再調整予定)
- 品質ゲート: check_song_quality.py を拡張しテーブル+CSVで各セクションの数値を出力
- 開発方式: TDD先行・既存17テストを参照に新テスト設計
- 所在: SSOT の音楽制作プロジェクト記録(2026-07-12付・Phase 2記録)・原文URL非公開(内部到達経路遮断)
</details>