本文へスキップ
503 bad gateway ロゴ
X YouTube
BadAutoAlign
音楽制作ツール

BadAutoAlign

ボーカルのタイミングとピッチを一括自動補正

対応環境
Windows(スタンドアローンGUI)
価格
無料(ベータ版)

BadAutoAlign は、手本となるガイド(Synthesizer V などで作ったガイドボーカルのWAV)を基準に、実際に歌ったボーカルWAVのタイミングとピッチをオフラインで一括自動補正するツールです。

設計の根っこにあるのは「迷ったら触らない」という原則。誤った補正はかえって復旧に手間がかかるため、最大移動量・信頼度・ピッチ照合など多層のガードを通り、さらに「動かすと実際に一致が良くなる」ことを確認できた箇所だけを動かします。ずれのない入力を渡せば、出力は入力とビット単位で一致します。

GUI版では、ガイド・補正対象・補正結果・オケの4トラックを並べて表示し、ノートごとに「合っている/まだズレあり/自動では判断不能」を色分けしたマーカーで示します。自動で追い込めなかった箇所はマーカーの長押し試聴とドラッグで人間が確定し、再補正へ。「自動で大部分を片付け、要確認箇所だけを人間が仕上げる」という分業のためのワークフローを備えています。

楽曲制作からミックスまでを一人で続けてきた作り手・伊達五十嵐が、自身のレコーディングの必要に迫られて開発したツールです。市販の自動アライメントツールの誤検知の多さと手作業の煩雑さを、構造から避けることを目指しました。

使い方・パラメータ

補正の種類(タイミング/ピッチ/両方)
実行する補正を選びます。処理はフレーズ(無音で区切られた歌唱区間)ごとに独立して行われ、ガイドのノートが無い区間や無音区間はいっさい触らずに素通しします。
pitch strength(既定 0.85)
ピッチ補正の強さ。1.0で完全一致ですが、少し下げることでビブラートやしゃくりなど元の歌の揺らぎを残したまま、音程の芯だけを合わせられます。
max shift(既定 120ms)
タイミング補正の最大移動量。これを超える移動は「誤対応の可能性が高い」とみなして補正せず、要確認としてレポートします。
マーカー操作と再補正
黄(まだズレあり)・赤(自動では判断不能)のマーカーは補正の基準点そのもの。長押しでその位置を試聴し、ドラッグ中はスクラブ再生が鳴るので、見た目ではなく耳で確かめながら補正基準を微調整できます。確定した手動アンカーはガード免除で最優先適用され、「再補正」で反映されます。

タイミング補正のロジック・理論

BadAutoAlign のタイミング補正は、「どう動かすか」よりも「いつ動かさないか」に多くの設計を割いています。ここでは、その考え方を理屈のレベルで詳しく紹介します。開発の途中で試して捨てた方式も含めて書いているのは、この分野の設計は「何が失敗するか」の知見にこそ価値があると考えているためです。

問題の定義——「同じ歌」を同じ時刻に

ボーカルとガイドは、同じ歌詞・同じ旋律を歌った2つの音声です。求めたいのは、ボーカルの時間軸を伸び縮みさせる単調増加の時刻写像——つまり「ボーカルのこの瞬間を、ガイドのこの瞬間に対応させる」という滑らかな対応関係です。これが得られれば、ボーカルを局所的に伸縮して、ガイドと同期して聞こえるように作り直せます。

ただし制約があります。フレーズの境界(無音部分)では写像を恒等に保ち、フレーズ全体の長さは変えないこと。局所的なテンポの歪み(再生速度が1.0から離れること)は音質劣化として聴こえるため、小さく保つこと。そして何より、誤った補正をするくらいなら補正しないこと。この最後の制約が、以下で述べるすべての仕組みの出発点です。

負の知見(1)——ノート単位アンカーの失敗

最初に実装したのは、いちばん素直な方式でした。ボーカルの発声開始点をガイドの各ノートの開始位置に1つずつ対応付け、その対応点(アンカー)ごとにボーカルを動かす方式です。これは実際の歌素材で2つの致命的な問題を起こしました。

ひとつは「掛け違い」です。ピッチと有声・無声の情報だけで対応を決めると、同じ高さの音節が続く箇所や細かいノートが密集する箇所で、1音節ずれた対応が生まれます。誤ったアンカーは音をまるごと隣の音節の位置へ動かしてしまうため、結果は破壊的です。

もうひとつは「計測ジッタがそのまま音になる」問題です。短いノートが密集するレガートな区間では、発声の頭を検出する処理自体に±50〜100ms程度の誤差が避けられません。アンカーごとに独立して動かすと、隣のノートに+99ms、その次に-110msといった、物理的にあり得ない交互のシフトが適用されて「ガタつき」になります。ここで得た教訓——歌声は連続体であり、隣り合うノートのズレが交互に±100msも振れることは現実にはない——が、のちの平滑カーブ方式の根拠になりました。

負の知見(2)——フレームDTWと「にじみ」

次に試したのが、音声認識などで使われる DTW(動的時間伸縮法)でフレーズ全体をフレーム単位で対応付ける方式です。特徴量を話者に依存しない音素的なものへ強化していくと、極端な異常値は消えましたが、対応の「にじみ」が残りました。DTWは1つの音節が複数のノートへ連続的に流れていくことを妨げないため、長く伸ばす音や息継ぎのまわりで対応が滑ってしまい、ノート単位の精密なアンカーには不向きでした。

負の知見(3)——繰り返しフレーズの罠

3つ目は、無音で区切られた区間を伸縮せずまるごと平行移動する方式です。人間がエディタで行うカット&スライドに相当し、合成テストでは機能しました。しかし実際の楽曲で「繰り返しフレーズ問題」に直面します。ポピュラー音楽は同じ形の楽節を繰り返すため、ちょうど1拍分ずれた位置に、音量の形もピッチも高い相関を持つ「偽の一致」が存在するのです。検定を厳しくして誤爆をゼロにすると、有効なスライドもゼロになりました。局所的な音響情報だけでは、繰り返しの曖昧さは原理的に解消できない——これがこの実験の結論であり、後述する「人間との分業」の設計につながっています。

対応付けとラグ推定の分離

失敗から得た方針は、「どの音がどのノートか(対応付け)」と「どれだけずれているか(ラグ推定)」を分けて扱うことでした。

対応付けには、音節(モーラ)単位の離散アライメントを使います。日本語の歌唱は「1ノート≒1モーラ」という構造を持つため、ボーカルを音節単位に分割し、ガイドのノート列と順序を保ったまま対応付けます。対応のコストには、ピッチの差(オクターブ非依存)、位置の差(近い候補を弱く優先する=迷ったら動かさない方向に働く)、長さの比、母音の音色の距離を使います。フレーム単位のDTWと違って「1音節=1ノート」という構造制約を強制できるため、音数が合えば自然に先頭からの1対1対応に収束し、合わなければ明示的な「挿入」「欠落」として扱えます。

ただし重要なのは、この対応付けの結果を最終的なワープの駆動には使わないことです。ノートごとの個別計測はジッタが大きいため、対応表はレポートとGUI表示、そして後述の照合の「証拠の一つ」に格下げしました。

芯(P-center)——何をもって「合っている」とするか

そもそも「タイミングが合っている」とは何でしょうか。音声学の知見では、物理的な発声開始と、人間が知覚する「音の頭」は一致しません。この知覚上の頭は P-center(知覚的中心)と呼ばれ、歌声のような立ち上がりの緩やかな音では物理的な開始より平均で数十ミリ秒遅れ、人間同士でも±40ms程度ばらつくことが知られています。

ここから2つの帰結を得ました。第一に、アンカーの定義は両側対称でなければならないこと。ボーカル側だけ発声開始点(しゃくりの起点)を使い、ガイド側は音程が安定した点を使う——といった非対称な定義は、しゃくりの長さ分だけ系統的に後ろへずれた補正を生みます(実測で確認しました)。そこで芯の推定はガイドとボーカルに同じ検出器を適用し、検出の癖を両側で相殺します。

第二に、最終的なラグ推定の主役は次に述べるエネルギー包絡の相互相関に置くこと。これは「エネルギーの形どうしの最良一致」という意味で対称な照合の連続版であり、ユーザーがDAWの波形比較で見る「合っている」と同じ定義を最適化することになります。

ラグの計測——中帯域エネルギー包絡の相互相関

母音のエネルギーが支配的な中帯域(300〜3000Hz)のエネルギー包絡を滑らかにしたもの同士を、フレーズ内で0.2秒刻みに局所的に照合します。各時刻でボーカル側の短い窓をガイド側にスライドさせ、正規化相関が最大になるズレを「その時刻のラグ」として標本化する方式です。

ここにも「測らない」判断が組み込まれています。窓の中の包絡がほぼ平坦(無音や伸ばしっぱなし)な場所や、最大相関が低い場所のサンプルは捨てます。ラグが定義できない場所で無理に測った値は、ノイズでしかないからです。この計測はノート単位の芯計測よりはるかにノイズが少なく、レガートな区間でも密にサンプルが取れます。

平滑ラグカーブ——点ではなく曲線で動かす

得られたラグのサンプル列から、滑らかなラグカーブを頑健に推定します。加重メディアンによる局所回帰でカーブを引き、カーブから大きく離れた外れ値を除いてもう一度だけ推定し直す。ラグの絶対値は最大移動量でクリップし、隣接区間でのラグの変化率には上限を設けて局所的なテンポ歪みを抑える——という段階を踏みます。

さらに2つの仕上げが効いています。ひとつは不感帯。ラグがごく小さい区間はゼロ(恒等写像)に落とします。フレーズの一部だけがずれている場合に、すでに合っている区間へカーブの微小なノイズが乗るのを防ぐ、「合っている所は触らない」の曲線版です。もうひとつは閉ループ検証。カーブの各点について「この量だけ動かすと包絡の一致が実際に改善する」ことを確認し、改善しない点はゼロに落とします。大きなミスマッチの近くで計測が汚染され、良好な隣の区間まで引きずられる事故への最終防衛線です。

こうして得たカーブをアンカー列に変換し(フレーズ両端は固定)、タイムストレッチエンジンで可変レートの伸縮として適用します。カーブ全体が最小移動量に満たなければ、そのフレーズはワープ自体を行いません。エンジンを通さないため、ずれの無い入力の出力は入力とビット一致します。

多層のガード

タイミング補正には、最大移動量(既定120ms。超えたら動かさない)、最小移動量(既定35ms。検出誤差より小さい移動はしない)、相関と起伏のゲート(ラグが定義できない場所で測らない)、変化率の上限(テンポ歪みの上限)、不感帯(合っている区間を触らない)、閉ループ検証(動かして良くならないなら動かさない)、アンカーのピッチ照合(掛け違い対応の棄却)といったガードが層になって入っています。どれか一つが賢いのではなく、それぞれ性質の違う事故を一層ずつ防ぐ構成です。ガードに掛かって補正しなかった箇所は、理由付きでレポートに記録されます。

自動化の限界と、人間との分業

構造的に歌い回しが違う箇所や、繰り返しフレーズの曖昧さは、局所的な音響情報だけでは原理的に判別できません。BadAutoAlign はこれを無理に自動化せず、GUI上で「要確認」として明示します。要確認箇所のマーカーは補正の基準点そのものなので、ドラッグすれば補正基準を直接微調整できます。その際は長押し試聴とスクラブ再生で動かしている位置の音が鳴り続けるため、波形を見た目で重ねるアバウトな視覚合わせではなく、発音の頭を聴感上で確かめながら合わせられます。こうして確定した手動アンカーは全ガードを免除して最優先で適用されるため、「自動で大部分を片付け、判断が要る箇所だけを人間が耳で確定する」という分業が成立します。

補正後の表示も「何をしたか」ではなく「何を操作すべきか」を軸にしています。ノートごとに計測されたズレと実際に適用した移動量の差(残差)を計算し、「合っている」「まだズレが残っている(量つき)」「判断不能」の3状態で示す——残りの黄色と赤を潰していけば完成に近づく、という作業リストとして機能させるためです。

ピッチ補正——スナップさせない中央値オフセット方式

ピッチ側も一言だけ触れておくと、検出した音程をノートの音高へ張り付ける「スナップ」は行いません。ノート区間ごとに検出ピッチの中央値とターゲット音高の差分だけを求め、その一定量を取り除きます。ビブラートやしゃくりといった揺らぎは差分に含まれないため、そのまま保存されます。中央値を使うのは、しゃくりで偏ったピッチ分布でも区間の「芯の音高」を頑健に代表できるためです。無声子音とブレスには補正をいっさい適用せず、これが「ガビつき」を避ける核になっています。

検証——数値で語る

「良くなった気がする」では設計を進められないため、正解が既知の合成テストと、実際の歌素材でのガイドとの局所ラグ計測を常備し、改善が数値で示せない変更は採用しませんでした。実素材(約3分の楽曲)での計測では、ガイドとの局所ラグの中央値が補正前34.8msから補正後23.2msへ改善し、補正によって悪化した点は73サンプル中1点。ピッチは残差中央値が50セントから30セントへ改善しています(揺らぎを保存する方針のため、ゼロにはなりません)。残った大きなズレの多くは、ガードが「触るべきでない」と判断して意図的に残した箇所です。