Skip to content

ピッチ補正とノート編集

ピッチ補正は、音を現在のピッチから目標へ寄せます。ノート編集は、選んだ区間(伸ばした 1 音、タイミングの調整)を、他に触れずに整形します。どちらもクリップ全体の変換ではなく、区間を意識した外科的な編集です。本ページは libsonare の PitchCorrectorNoteEditor に根拠づけます。用語は 編集の基礎 を読んでください。

現在のピッチは呼び出し側が渡す

pitchCorrectToMidi は、歌った音を自動で推測しません。現在の音を呼び出し側が渡します。

使う流れは次の通りです。

  1. pitchYinpitchPyin、または独自の検出器で現在のピッチを推定する。
  2. そのピッチを MIDI ノート番号として読む、または変換する。
  3. 測定した値を現在の MIDI ノートとして渡す。
  4. 寄せたい音を目標の MIDI ノートとして渡す。

MIDI ノート番号は半音単位のインデックスです。

意味
69A4、440 Hz
68.7A4 より少し低い音
60C4、中央のド

歌い手が音にぴったり乗ることは稀なので、小数値は普通に起こります。

補正の強さと自然さ

補正は区間に対するピッチシフトなので、同じアーティファクト則が当てはまります — 小さな音程は透明、大きな音程はフェーズボコーダのにじみを露呈します。自然なボーカルには、大きく跳ばすより最も近い音階音へ小さく補正します。完全にスナップさせる強い補正は、透明な修正ではなくクリエイティブな効果です。

PARAM SWEEP · PITCH SHIFTIDLE
ピッチシフト — 倍音の櫛ごと動かす

ピッチシフトは長さを変えずに音程を移します。セミトーンをドラッグするとスペクトルが動き、すべての倍音がまとめてスケールし、基音マーカーが新しい音程を追います。このシフトはフォルマント保存ではないため、フォルマントの山も一緒に動きます — いわゆる「チップマンク」効果です。再生で確認できます。

音程
0 st

ノート区間: 秒ではなくサンプル

noteStretch のような区間ベースの編集は、秒ではなくサンプル位置を取ります。サンプル位置は正確でずれないからです。samples = round(seconds × sampleRate) で変換します — 48 kHz なら 0.25 秒はサンプル 12000 です。区間はオンセットサンプルとオフセットサンプルを持ち、stretchRatio > 1 は周囲の音声をそのままに、その区間を長くします。

UI が秒で区間を扱う場合は、関数を呼ぶ直前にサンプルへ変換するのが安全です。秒のまま小数で渡すと丸め方によって 1 サンプルずれることがあり、ループのつなぎ目でわずかなノイズになり得ます。サンプル位置で考えれば、編集が常に正確な位置に当たります。

libsonare が補正・編集をどう行うか

pitchCorrectToMidi は現在→目標の MIDI 音程をピッチシフトへ対応づけ、タイムストレッチとピッチシフト のフェーズボコーダ経路を再利用します。区間編集は、オンセット/オフセットのサンプル位置で定義される NoteRegion に対して NoteEditorNoteEditorConfig)を使い、NoteSegmenter が区間の特定を助けます。noteStretch は区間限定のストレッチ比を適用します。すべてデコード済みのモノラルサンプルに作用し、Audio ラッパーは同じ操作をインスタンスメソッドとして公開するので、ファイルワークフローでは一度読み込んで編集できます。

関連: 編集の基礎, タイムストレッチとピッチシフト, メロディとピッチ, 編集 DSP