SKIN FREQUENCY 制作の備忘録(2)失敗と対策編 — 雛形から紛れ込んだ60秒フェード、DistroKid の3回のエラー、取り直せなかった Suno の素材

自分用の備忘録。制作の流れは(1)制作編に書いた。ここには次回同じ所で転ばないための記録だけを置く。 反省会は 10/24〜10/25。対策は album-pipeline の道具・手順書・骨子の雛形に入れてある。効いたかどうかは、次作(008)で確かめる。

4作目のアルバム「SKIN FREQUENCY」は、2000年前後の日本のアーティストによるダンスリミックス集の路線で、男性ハイトーンの歌もの10曲を 128 BPM 固定のノンストップミックスにしたものです。cc-bridge で工程をジョブに分けて回した最初のアルバムで、実装は Claude Code のジョブ、ブリーフは claude.ai、聴くことと選ぶことは自分、という分担でした。

この記事はその反省会の記録です。前作 SLOW ORBIT の失敗と対策編と同じく件ごとに書きましたが、今作は「起きたこと → 気づき方 → 対策」に、効いたかの確かめ方を足しました。対策を入れただけで「直った」と書くと、次作で同じ所を踏んでも気づけないからです。制作の流れと前作からの変化は、姉妹記事の制作編にあります。


今作の失敗は「黙って引き継いだ」と「後で知った」

前作の手戻りは、原因や前提を取り違えたものが中心でした。推測を事実として書いた4回が一番の反省で、「推測は推測と書く」という書き方の決まりで塞ぎました。今作では、その型の失敗はほとんど出ていません。

代わりに目立ったのは、2つの型です。

  • 黙って引き継いだ: 前作のために決めた値が、雛形を経由して、理由の無いまま今作に入っていた(失敗1)
  • 後で知った: 配信先の決まりや、素材が指示どおりに来ないことを、もう引き返せない段階で知った(失敗2・3)

反省会で拾った失敗は10件です。主なものを表にしました。

# 失敗 何が起きたか 手戻り
1 動画の終わりの60秒フェード 前作(睡眠用)の値が雛形経由で入り、動画の最後の60秒が暗くなっていた 合成のやり直し 約3時間
2 DistroKid の3回のエラー 配信先の決まりを入稿の画面で初めて知った。曲名と歌詞の表記を入稿の直前に変えた 入稿の当日
3 Suno の素材を取り直せなかった 10本中9本が指示どおりに来なかったのに、月の枠を使い切っていた 全部を手元の加工で逃げた
4 最初の通しが「乱暴に繋げただけ」 繋ぎの作りと拍の格子のずれ 繋ぎの道具の作り直し
5 繋ぎを版ごとに何度も聴いた 作りが同じ繋ぎも毎回聴いていた 自分の耳の時間
6〜10 小さめの失敗 骨子の YAML を壊した、ジョブの権限、vault が開けない、アップロードの道具、同期歌詞の根拠 —

1件ずつ振り返ります。


失敗1: 動画の終わりが60秒かけて暗くなっていた

起きたこと: 本番の動画は、背景を最後の60秒かけて真っ暗に落としていました。今作で意図した終わり方は、NEON DRIVE と同じ「背景3秒で落として、黒3秒」です。

動画の終わりの5秒前(38:55.80)。左が60秒フェードの版で、背景はもう真っ暗。右が直した版

※ 左は、初回の本番が合成のやり直しで置き換わって残っていないため、同じ設定で同じ区間を作り直した再現です。

原因: 60秒は、前作 SLOW ORBIT(睡眠用)の反省会で決めた値でした。前作の反省会で「終端は背景60秒・星180秒」を次作の既定にしていて、それが骨子の雛形(bg_fade_sec: 60)に入っていました。今作の骨子はその雛形から作ったので、60秒は「今作のために決めた値」ではなく、「雛形のまま残った値」です。

もう1つ、気づく機会はありました。動画のジョブ(011)の報告の未解決点には「終端は骨子の値(60秒)」と書いてありました。ただ、それが意図した値かどうかを、誰も確かめていません。ジョブは骨子にあるから使い、自分は報告にあるから知っている、という状態で、どちらも理由を持っていませんでした。

気づき方: 試しの動画を自分で見ていて、最後が真っ暗だったので気づきました。人の目で偶然気づいたもので、検査や報告の仕組みでは気づけませんでした。しかも気づいたのは、本番の合成(約3時間)が終わった後でした。

対策:

  • 3秒に戻して、合成をやり直した(約3時間)。背景と終端の秒数をレイヤーの指紋に入れていなかったので、レイヤー(約78分)は焼き直さずに済んだ。フェードは背景だけにするか画面全体にするかを見比べて、背景だけ(NEON DRIVE と同じ)にした
  • album-diff を作った。前作と雛形を今作の設定と並べ、理由を骨子のコメント・changelog・決裁メモから拾って印を付ける道具です。★★ は「前作のために決めた値を、理由なく引き継いだ」、★ は「理由の無い変更、または雛形のまま」です。アルバムごとの設定の一覧が今まで無かったので、その一覧にもなります
  • 雛形の bg_fade_sec を null にした。null は album-diff で「未記入」に出るので、制作の最初のジョブで決めることになる。ほかの 006 由来の値(アルバム終端のフェード、文字の重ね方、選別のしきい値、クロスフェードの秒数など)も null か空にして、006 の値は例としてコメントに残した

album-diff を直す前の版に流した「まず見る」の表。黄色が60秒フェードの2行

効いたかの確かめ方: album-diff を直す前の版に流して、60秒フェードの2行が ★ に出ることは確かめました(上の表)。本当に効くかは次作で見ます。次作の制作の最初のジョブで album-diff の表を報告に出し、★・★★ の行が理由のないまま残っていないことを確かめます。

前作からの変化: 前作の反省会の対策が、そのまま今作の失敗の原因になりました。前作では「次作の既定」にするのが正しい判断でしたが、それは「次の睡眠系のアルバム」の既定のつもりで、今作のようなダンスものにまで効くことは考えていませんでした。対策を雛形に入れるときは、どのアルバムに向けた値かまで書かないと、雛形が前作の値の運び屋になります。


失敗2: DistroKid の入稿で3回エラーが出た

起きたこと: 入稿の送信と歌詞の保存で、合わせて3回エラーが出ました。

  1. 送信時: 第二ジャンルのサブジャンルが選ばれていない、Apple 向けのクレジット(演奏者・プロデューサー)が足りない、の2つを同時に指摘された → Electronic のサブジャンルに Trance、演奏者に「シンセサイザー / Tadanobu」、プロデューサーに「プロデューサー / Tadanobu」を入れた
  2. 歌詞の保存時: 「100%大文字」→ 全大文字の英語フックを、先頭だけ大文字に直した(HEAT SIGNAL → Heat Signal)
  3. 2語の曲名のフックがある曲: 「大文字の比率が高すぎる」→ 2語目を小文字にして通った(Heat signal)

ほかにも、AI ペルソナの質問(歌詞・作曲・音声のそれぞれについて、Tadanobu は人間のアーティストか AI ペルソナか)が増えていました。登録下書きのレーベル欄の既定(「なし」)も、実際と違っていました。

原因: 配信先の決まり(サブジャンル必須、Apple 向けクレジット必須、AI の申告、歌詞の大文字の規則)を、入稿の画面で初めて知りました。英語フックの全大文字については、骨子を作った最初のジョブ(002)から「登録時に確かめる」と書いてありました。ただ、「登録時」が入稿の当日だったので、知った時にはもう曲名も歌詞も直すしかありませんでした。

気づき方: 入稿の当日(10/24)、DistroKid の送信と保存のエラーで。

対策:

  • 登録シートの検査(015): 入稿の前に分かる不足は、【要記入】で通さず、その場で止める。曲名の括弧の外の全大文字(Title Case の案を出す)、サブジャンル、Apple 向けクレジット、AI の申告の4つです
  • release-lint(016): 骨子だけで、登録シートと同じ関数を使って配信先の決まりを検査する。「止まる」と「警告」の2段。制作の最初のジョブで流すので、歌詞を書く前に決まりにぶつかれる
  • 曲名をストア用(title_store)と動画用(title_video)で別に持てるようにした。DistroKid に入れる歌詞の txt は、DistroKid の大文字の規則に直して書く
  • 配信先の決まりを入稿のたびに足していく文書(learnings_distrokid.md)を作った

release-lint を入稿前の骨子に流した出力。「止まる」の2件(サブジャンル・AI の申告)が黄色

効いたかの確かめ方: 登録シートの検査は、今作の骨子での試し(dry-run)が実際の登録の記録と一致し、試験用の骨子で4つとも止まりました。release-lint は、入稿前の版の骨子に流すと、サブジャンルと AI の申告の2件で止まります(上の図)。本当に効いたかは、次作の入稿で送信時のエラーが0回かで見ます。

前作からの変化: NEON DRIVE でも、歌詞の大文字の手直しで一晩張り付いていました。そのときの対策は「登録前に表記をチェックする」でしたが、チェックするのは入稿の直前でした。今作は全大文字を意図して使ったので、直前のチェックでは手遅れでした。決まりを確かめる時点を、入稿の直前から制作の最初へ動かしたのが今回の対策です。


失敗3: Suno の素材が指示どおりに来ず、取り直せなかった

起きたこと: Suno には全曲に [Intro: drums only, DJ-friendly, 16 bars](頭16小節はドラムだけ)を指示していましたが、10本中9本が守らず、頭から上物と声が鳴っていました。テンポも、9本が曲の中で 129〜140 BPM へ速くなっていました(NEON DRIVE の素材の倍ほど)。それなのに、10本を一晩で落として、その月のダウンロードの枠を使い切っていました。次の更新は 11/3 で、取り直せません。

原因: ダウンロードの決まりは「ブラウザで耳で選ぶ → 1曲1本だけ落とす → 計測で落ちた曲だけ2本目」でした。でも実際には、計測をする前に10本を落とし切っています。耳で選ぶときの基準(ドラム主体のイントロが8小節以上)も、取り直せない状況では使えませんでした。

気づき方: ダウンロード直後の計測(10/18 の深夜)。

対策(今作の中): 全部、手元の加工で逃げました。

  • 通しでは、頭の上物を飛ばしてドラムが入る所から曲を入れる
  • 128 への伸縮は、最大9% 遅くするところまで許した
  • ストア版は元の速さで出し、128 固定は「通しの中だけの約束」に縮めた

対策(次作から): ダウンロードの枠を2〜3本残し、落とした直後に計測(clip-measure と track-extend info)を流してから次を落とす。最初の数本を測った時点で「ドラムだけのイントロを守らない」と分かっていれば、残りの生成の指示を変えられました。

効いたかの確かめ方: 次作で、最初の数本の計測の後に指示を変えたか、枠を残したまま10本そろったか。「指示を守っていない」とするしきい値は、次作の最初の数本を見て決めます。

前作からの変化: 前作では、17本を先に測ってから残りの本数を決め、補充日の分を20本から10本に減らせました。その「少数を先に測る」を、今作は守れていません。前作で効いた段取りを、次作の手順書(schedule_template)に工程として書いています。


失敗4: 最初の通しが「乱暴に繋げただけ」だった

起きたこと: 本番の10本で最初に作った通しを聴いて、「9か所すべて途切れて、乱暴に繋げただけ」と返しました。

原因: 原因は3つ重なっていました。

  • 繋ぎの曲線が、窓の真ん中で前後の曲とも中高域を 0 にしていた。B は最後の1小節で薄くなり、D のハイパスの上昇がキックを消していた
  • 拍の格子が、曲の途中で半拍ずれていた。全帯域のオンセットで合わせていたので、裏拍のハイハットに引っ張られた
  • 繋ぎの道具の試作は前々作・前作の素材で作っていた。今作の素材では、繋げる窓が4小節まで縮んでいた

気づき方: 自分の聴取(下書き 40:55.98)。

対策: 繋ぎの道具を作り直しました(album-mix v3)。キックを切らさない、低域は小節の頭で片方の曲だけにする、拍の格子の位相はドラムの 150Hz 未満で合わせる、の3つです。確かめの項目に「消えたキック」「−30 dBFS 以下の拍」「声と上物の重なり」を足しました。

効いたかの確かめ方: v2 以降、消えたキックは全版で0拍、繋ぎの中の −30 dBFS 以下の拍も0でした。ただし、数値で言えるのは「途切れていない」までです。「自然に聞こえるか」は言えず、その後も v2b〜v2f の5版を聴いています。


失敗5: 繋ぎ9か所を版ごとに何度も聴いた

起きたこと: 通しを作り直すたびに、9か所すべての繋ぎを聴取キットに入れて聴いていました。

原因: 作りが同じ繋ぎを見分ける仕組みがありませんでした。1か所を直しただけの版でも、残り8か所をもう一度聴くことになります。

気づき方: 反省会で、「自分の耳が一番の資源」という前提から聴いた回数を数え直して。

最初に考えた対策と、やめた理由: まず、繋ぎを計測して、聴かなくても良し悪しが分かる項目が無いかを探しました。段差・低域の重なり・層のずれ・声の重なりなどを並べたところ、「気になる」と「良い」で分かれたのはキー距離の列だけでした(気になる5件はすべて2以上、良い5件はすべて1)。ただ、1作10件で判定に使うのは早すぎます。

繋ぎの計測と自分の聴き取りの表。分かれたのはキー距離の列だけ

対策: 計測で判定するのはやめ、作りが同じで OK だった繋ぎは、版ごとのキットから外すことにしました。繋ぎの作り(種別・窓・素材)から指紋を作り、聴取の記録を json に残します。今作の分も遡って20件入れました。キー距離は、並び順と表の列に出すだけにして、次作で並べてから見直します。

効いたかの確かめ方: 今作の記録で遡ると、版ごとのキットで聴く回数は54回から約16回に減る計算です。最終版の v2f の版ごとのキットは空で、マスタリング後に聴き直すのは繋ぎ2・8 だけになりました。本当に減るかは、次作で実際に聴いた回数で見ます。

前作からの変化: 前作の反省会では「聴き比べは最初からブラインドで、同じ版を1組混ぜる」を決めました。聴き方の質の対策です。今作は、聴く量の対策になりました。


小さめの失敗

失敗6: 骨子の YAML を changelog の1行で2回壊した

起きたこと: 骨子の changelog の行の中に書いた「: 」が、YAML の区切りと解釈されて、骨子が読めなくなりました。2回目は、骨子を読む道具(曲の一覧の生成・登録シート・歌詞の照合など)が全部止まる状態がしばらく続きました。

対策: 骨子をコミットする前に、lyrics_check --text-only か release-lint を流して、読み込めることを確かめる(CLAUDE.md に入れた)。

効いたかの確かめ方: 次作で、骨子を読む道具が YAML のエラーで止まった回数が0回か。

失敗7: ジョブの権限で止まった・自分の手作業が増えた

起きたこと: ダウンロードのフォルダが読めない、別のリポジトリ(music-visualizer)の読み取りや実行、文字起こしとボーカル分離の道具、vault への写し、実行ビットの付与、ファイルの改名などで、ジョブが権限に拒否されて止まりました。

対策: cc-bridge 側で権限を足しました。寄り道のコマンドが拒否されたら別の手段で進め、必須の操作なら止まる、という決まりも作っています。vault への写しと実行ビットは、ジョブが報告にコマンドを書き、自分が流します。

効いたかの確かめ方: 動画と同期歌詞のジョブは、2回目以降は止まらずに進みました。ジョブで実行ビットを付けられないことは、今も残っています。

失敗8: 入稿の途中で vault の写しを開けずに止まった

起きたこと: 登録下書きを、MacBook Air で vault の写しを開いて読む前提でした。入稿の途中で Air が応答しなくなり、止まりました。

対策: 自分が入力に使う文字の成果物は、報告の末尾に全文を貼る(報告は Claude in Chrome から確実に読める)。

効いたかの確かめ方: 対策の後の報告(015 以降)に付録が付いているか。次作の入稿で止まらないか。

失敗9: YouTube のアップロードの道具が使えなかった

起きたこと: NEON DRIVE のときに作った、YouTube に API で上げる道具が、今作の設定と下書きを読めませんでした。設定の読み先が NEON DRIVE のもので固定されていて、合成コンテンツの申告や中断からの再開にも対応していません。4K 版は YouTube Studio から手で上げました。

原因: この道具は、NEON DRIVE の試験で1回使っただけで、NEON DRIVE と SLOW ORBIT の本番では一度も使っていませんでした。

対策: 下書きの md 1本から上げる作りに改修しました。上げる前に検査し、常に非公開で上げ、段ごとの状態を残して途中から再開できます。資格情報はリポジトリの外です。

効いたかの確かめ方: 10秒の動画で本物の試験を通しました(非公開)。AI の申告は API で入りますが、読み戻しでは値が返らない(Studio では「はい」になっていた)ので、返らないときは注意だけにしています。本物の YouTube での中断からの再開と、再生リストへの追加はまだ確かめていません。次作の本番を launch の youtube-upload で上げられるかで見ます。

失敗10: 同期歌詞の補正の根拠を取り違えた

起きたこと: 手で直した行のうち、#5 の4行の根拠の取り方が誤っていました。無音の手前の確率の低い語の頭や、文字起こしの時刻を根拠にしていたためです。また、直した行だけを切り出した確認動画は前後の流れが無く、自分では判断できませんでした。

対策: 根拠を「無音からの立ち上がり」に変え、確認動画を通しで流れる形(前・今・次の3行)に作り替えました。3回目の確認で確定しています(10曲 343行、手で直したのは33行)。

効いたかの確かめ方: 次作で、確認動画の往復が何回になるか。

前作からの変化: NEON DRIVE の反省会で「確認ツールに本番と違う条件を入れない」と決めました。今作の切り出しの確認動画は、条件ではなく見せ方が本番と違っていて、判断に要る前後の流れが抜けていました。


失敗ではないが、迷ったもの

  • 繋ぎの後の段差: 繋ぎの後の曲が 3〜4 dB 小さく聞こえる。直す案は 0.2〜0.3 dB しか効かず、曲の作りの落差として受け入れた。次作でも同じなら、繋ぎの窓の選び方の側で考える
  • 当初の D 2・B 2 が全部 L になった: D・B の作りが悪いのではなく、素材(B はブレイクの声と重なる、D は前触れの素材が無い)で成り立たなかった
  • 本番の合成の時点で、背景は作業ファイルのまま、描画のリポジトリは未コミットのままだった: 背景は確定画像と中身が一致し、演出の設定の中身は記録に残っていたので実害は無い

残っていること

  • 配信開始の日(11/6)に、Spotify・YouTube Music での確認、概要欄を「配信中」に直す、チャプターが10個出ているかの確認
  • YouTube の AI の申告を、NEON DRIVE・SLOW ORBIT も「はい」にそろえるか(配信開始の日に決める)
  • 英語フックを全大文字で書く表記そのものを、次作でも続けるか
  • 繋ぎのキー距離を判定に使えるか(次作で並べてから見直す)
  • 同期歌詞の自動補正の直し(裏付けの語が無いときは寄せない)は、公開作業の後に回したまま

次回やることチェックリスト

次のアルバムを始める前に見返すリストです。

  • 制作の最初のジョブで album-diff を流し、★・★★ の行を全部「理由あり」にしてから進む
  • 雛形の null の欄(終端のフェードなど)は、このアルバムのために決めて埋める。前作の値をそのまま写さない
  • 制作の最初のジョブで release-lint を流す。歌詞を書く前に、配信先の決まり(大文字・サブジャンル・Apple 向けクレジット・AI の申告)にぶつかっておく
  • Suno のダウンロードは枠を2〜3本残す。落とした直後に計測して、指示を守っているかを見てから次を落とす
  • 繋ぎの聴取は、作りが同じで OK だった繋ぎを外す。キー距離は列に出すだけ
  • 骨子をコミットする前に、読み込めることを確かめる
  • 自分が入力に使う文字は、報告の付録で読む
  • YouTube は launch の youtube-upload で上げる
  • 入稿のたびに、SNS パック(Content ID)のオフと Pre-Save のページを確かめる
  • 報告の未解決点にある値は、「意図した値か」を確かめてから先に進む

前作は「取り違えた」失敗が中心で、書き方の決まりで減らしました。今作は「黙って引き継いだ」「後で知った」失敗が中心で、どちらも確かめる時点を前に動かす対策になりました。album-diff と release-lint を、制作の最初のジョブで流すことです。それが本当に効いたかは、次のアルバムの入稿の日に、エラーが0回かどうかで分かります。

制作の流れと、前作からの変化は制作編へ。