Skip to content

編集の基礎

ここでいう編集とは、1 つのパートの音そのもの — ピッチ、長さ、声のキャラクター — を変えることです。トラックを測定するだけで手を加えない解析とも、複数のパートをバランスさせるミキシングとも異なります。本ページは 編集 DSP ガイドを読む前に必要な言葉を定義します。概念のみで、コードはありません。

編集の位置

通常は個々のパートを編集し(タイミング修正、ノートの音程調整、声質変更)、それらをミックスし、仕上がったステレオファイルを配信向けにマスタリングします。編集はパート単位の修復・整形工程です。控えめな編集はパートを自然に保ち、大胆な編集はクリエイティブな効果になります。

ピッチと時間は独立している

テープを速く回すと、音楽は速くかつ高くなります — 2 つは結びついています。現代の編集 DSP の要点は、この 2 つを分離し、一方を変えてももう一方を巻き込まないようにすることです。

  • タイムストレッチはピッチを変えずに長さを変えます。ここで rate は再生速度の倍率です。rate1.0 より大きいと速く再生されるためクリップは短くなり、1.0 より小さいと遅く再生されるため長くなります。
  • ピッチシフトは長さを変えずにピッチを変えます。

これをきれいに行うのは難しく、アルゴリズムは各ノートの周波数を保ったまま時間を生成・除去する必要があります。そのため大きな変更は必ずアーティファクト(にじみ、位相っぽさ、ロボット的な音)を残します。小さな変更は透明に保たれます。

PARAM SWEEP · TIME STRETCHIDLE
タイムストレッチ — 音程はそのまま、長さを変える

タイムストレッチはピッチシフトのちょうど逆で、音程はそのままに、音の長さを変えます。レート(rate)をドラッグするとドラムの打点が広がったり詰まったりして波形がパネルを占める幅も変わりますが、下のスペクトルはほとんど動きません。1.0 より下では遅く長く、1.0 より上では速く短くなります。再生すると、チップマンク効果なしにグルーヴのテンポだけが変わるのが聴けます。

レート
1 ×

半音とセント

音楽のピッチは半音で測ります。半音は、ピアノ鍵盤上の最小ステップです。12 半音で 1 オクターブになり、オクターブは周波数をにします(A4 = 440 Hz、A5 = 880 Hz)。

したがって semitones = 12 は 1 オクターブ上、-12 は 1 オクターブ下、7 は完全 5 度です。

セントは半音の 1/100 で、微調整に使います。多くのリスナーは、およそ ±5〜10 セントを超えるとピッチのずれに気づき始めます。

MIDI ノート番号

関数が MIDI ノート番号pitchCorrectToMidicurrentMiditargetMidi など)を求めるとき、それは整数 1 つが 1 半音にあたるインデックス(小数も可)を意味します。覚えておく価値のある基準が 2 つあります。

  • A4 = 69 = 440 Hz — チューニング基準。
  • C4 = 60 — 中央のド(ミドル C)。

オクターブごとに 12 を足すので、C5 = 72、C3 = 48 です。よく使う目標音をいくつか挙げます。

音名MIDI周波数
C348130.81 Hz
C4(中央のド)60261.63 Hz
E464329.63 Hz
G467392.00 Hz
A4(チューニング基準)69440.00 Hz
C572523.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 ノートへ寄せる先に pitchYinpitchPyin、または独自検出器で現在ピッチを推定する
noteStretchサンプル位置で指定した正確な区間を処理する秒指定の UI では、呼び出し前にサンプル位置へ変換する

関連: 編集 DSP, オーディオ基礎, MIR の全体像, JavaScript API