編集の基礎
ここでいう編集とは、1 つのパートの音そのもの — ピッチ、長さ、声のキャラクター — を変えることです。トラックを測定するだけで手を加えない解析とも、複数のパートをバランスさせるミキシングとも異なります。本ページは 編集 DSP ガイドを読む前に必要な言葉を定義します。概念のみで、コードはありません。
編集の位置
通常は個々のパートを編集し(タイミング修正、ノートの音程調整、声質変更)、それらをミックスし、仕上がったステレオファイルを配信向けにマスタリングします。編集はパート単位の修復・整形工程です。控えめな編集はパートを自然に保ち、大胆な編集はクリエイティブな効果になります。
ピッチと時間は独立している
テープを速く回すと、音楽は速くかつ高くなります — 2 つは結びついています。現代の編集 DSP の要点は、この 2 つを分離し、一方を変えてももう一方を巻き込まないようにすることです。
- タイムストレッチはピッチを変えずに長さを変えます。ここで
rateは再生速度の倍率です。rateが1.0より大きいと速く再生されるためクリップは短くなり、1.0より小さいと遅く再生されるため長くなります。 - ピッチシフトは長さを変えずにピッチを変えます。
これをきれいに行うのは難しく、アルゴリズムは各ノートの周波数を保ったまま時間を生成・除去する必要があります。そのため大きな変更は必ずアーティファクト(にじみ、位相っぽさ、ロボット的な音)を残します。小さな変更は透明に保たれます。
半音とセント
音楽のピッチは半音で測ります。半音は、ピアノ鍵盤上の最小ステップです。12 半音で 1 オクターブになり、オクターブは周波数を倍にします(A4 = 440 Hz、A5 = 880 Hz)。
したがって semitones = 12 は 1 オクターブ上、-12 は 1 オクターブ下、7 は完全 5 度です。
セントは半音の 1/100 で、微調整に使います。多くのリスナーは、およそ ±5〜10 セントを超えるとピッチのずれに気づき始めます。
MIDI ノート番号
関数が MIDI ノート番号(pitchCorrectToMidi の currentMidi や targetMidi など)を求めるとき、それは整数 1 つが 1 半音にあたるインデックス(小数も可)を意味します。覚えておく価値のある基準が 2 つあります。
- A4 = 69 = 440 Hz — チューニング基準。
- C4 = 60 — 中央のド(ミドル C)。
オクターブごとに 12 を足すので、C5 = 72、C3 = 48 です。よく使う目標音をいくつか挙げます。
| 音名 | MIDI | 周波数 |
|---|---|---|
| C3 | 48 | 130.81 Hz |
| C4(中央のド) | 60 | 261.63 Hz |
| E4 | 64 | 329.63 Hz |
| G4 | 67 | 392.00 Hz |
| A4(チューニング基準) | 69 | 440.00 Hz |
| C5 | 72 | 523.25 Hz |
手計算で変換するには midi = 69 + 12 · log2(freq / 440)、freq = 440 · 2^((midi − 69) / 12) を使います。68.7 のような小数の MIDI 値は、A4 より少し低いピッチというだけです。歌い手はぴったり音の上に乗ることは稀なので、測定したピッチを current に、整数を target に渡せるのが便利です。
フォルマント: ピッチの独立した相棒
フォルマントは、固定された周波数帯に現れるエネルギーのピークです。声では声道の共鳴から生まれ、楽器では胴や管の共鳴から生まれます。
フォルマントは母音や、声の太さ・明るさ・キャラクターを決めます。ピッチとは別物です。同じ人が違う音高で歌っても、母音らしさや声のキャラクターは声道の共鳴に強く影響されます。
そのため、声質ツールではピッチとフォルマントを分けて扱います。
| コントロール | 変わるもの | 聞こえ方 |
|---|---|---|
| ピッチ | 音楽的な音高 | 同じ声が高く/低く歌っているように聞こえる |
| フォルマント | 声のキャラクター | 同じ音高のまま、小さく明るい声/大きく暗い声に近づく |
両方を強く一緒に動かすと、不自然な「チップマンク」効果になりやすくなります。
サンプルと秒
区間に作用する編集関数(ノートストレッチなど)は、通常は秒ではなくサンプル位置を取ります。サンプル位置は正確でずれないからです。samples = round(seconds × sampleRate) で変換します — 48 kHz なら 0.25 秒はサンプル 12000 です。サンプルとサンプルレートが何かは オーディオ基礎 を参照してください。
libsonare が編集 DSP をどう実装するか
libsonare の編集関数は、解析やマスタリングと同じ C++ DSP コアの上にあります。ただし、これらは音声を測るのではなく、音声信号を書き換える関数です。
| 関数ファミリー | 実装の考え方 | 初学者向けの要点 |
|---|---|---|
| タイムストレッチ / ピッチシフト | フェーズボコーダとリサンプリングを組み合わせる | 長さと音高を別々に動かせるが、大きな変更ではアーティファクトが出る |
voiceChange | 倍音のピッチとは別にスペクトル包絡を動かす | 目標音を保ったまま声のキャラクターを動かせる |
pitchCorrectToMidi | 呼び出し側が渡した現在 MIDI ノートから目標 MIDI ノートへ寄せる | 先に pitchYin、pitchPyin、または独自検出器で現在ピッチを推定する |
noteStretch | サンプル位置で指定した正確な区間を処理する | 秒指定の UI では、呼び出し前にサンプル位置へ変換する |
関連: 編集 DSP, オーディオ基礎, MIR の全体像, JavaScript API