ピッチ補正とノート編集
ピッチ補正は、音を現在のピッチから目標へ寄せます。ノート編集は、選んだ区間(伸ばした 1 音、タイミングの調整)を、他に触れずに整形します。どちらもクリップ全体の変換ではなく、区間を意識した外科的な編集です。本ページは libsonare の PitchCorrector と NoteEditor に根拠づけます。用語は 編集の基礎 を読んでください。
現在のピッチは呼び出し側が渡す
pitchCorrectToMidi は、歌った音を自動で推測しません。現在の音を呼び出し側が渡します。
使う流れは次の通りです。
pitchYin、pitchPyin、または独自の検出器で現在のピッチを推定する。- そのピッチを MIDI ノート番号として読む、または変換する。
- 測定した値を現在の MIDI ノートとして渡す。
- 寄せたい音を目標の MIDI ノートとして渡す。
MIDI ノート番号は半音単位のインデックスです。
| 例 | 意味 |
|---|---|
69 | A4、440 Hz |
68.7 | A4 より少し低い音 |
60 | C4、中央のド |
歌い手が音にぴったり乗ることは稀なので、小数値は普通に起こります。
補正の強さと自然さ
補正は区間に対するピッチシフトなので、同じアーティファクト則が当てはまります — 小さな音程は透明、大きな音程はフェーズボコーダのにじみを露呈します。自然なボーカルには、大きく跳ばすより最も近い音階音へ小さく補正します。完全にスナップさせる強い補正は、透明な修正ではなくクリエイティブな効果です。
ノート区間: 秒ではなくサンプル
noteStretch のような区間ベースの編集は、秒ではなくサンプル位置を取ります。サンプル位置は正確でずれないからです。samples = round(seconds × sampleRate) で変換します — 48 kHz なら 0.25 秒はサンプル 12000 です。区間はオンセットサンプルとオフセットサンプルを持ち、stretchRatio > 1 は周囲の音声をそのままに、その区間を長くします。
UI が秒で区間を扱う場合は、関数を呼ぶ直前にサンプルへ変換するのが安全です。秒のまま小数で渡すと丸め方によって 1 サンプルずれることがあり、ループのつなぎ目でわずかなノイズになり得ます。サンプル位置で考えれば、編集が常に正確な位置に当たります。
libsonare が補正・編集をどう行うか
pitchCorrectToMidi は現在→目標の MIDI 音程をピッチシフトへ対応づけ、タイムストレッチとピッチシフト のフェーズボコーダ経路を再利用します。区間編集は、オンセット/オフセットのサンプル位置で定義される NoteRegion に対して NoteEditor(NoteEditorConfig)を使い、NoteSegmenter が区間の特定を助けます。noteStretch は区間限定のストレッチ比を適用します。すべてデコード済みのモノラルサンプルに作用し、Audio ラッパーは同じ操作をインスタンスメソッドとして公開するので、ファイルワークフローでは一度読み込んで編集できます。
関連: 編集の基礎, タイムストレッチとピッチシフト, メロディとピッチ, 編集 DSP