2015年2月9日月曜日

カラオケのキーチェンジの話

カラオケでCDなどの音源でピッチを変えると気持ち悪くなるのに対し、MIDI音源だとどうして自在にピッチが変わるのか、という話。

カラオケの機械でキーの上下を操作できるが、これは1ステップが半音なので、12ステップで一回りする。 プラスマイナス7まで操作できたりするが、プラス6とマイナス6とは歌うピッチでは同じことなので、7まで行くのは実はあまり意味がない。
レーザーやCDGのオケでキーを変える場合には、その波形をもとにピッチ変更の操作をする。 このアルゴリズムはいろいろとあるが、基本的には タイムストレッチ、ピッチシフトのアルゴリズムに書いてあるような アルゴリズムが基本になる。 この他にも周波数領域に変換して周波数領域でシフトするような高級なやり方もあるらしい(wiki参照)が、カラオケマシンなどでどこまで使われているかは分からない。

低音の方が気持ち悪くなるのか、というのをうまく説明できなかったので、実験をしてみた。 サインウェーブのスイープをマイナス5ピッチシフトしてみて、波形がどうなるか。 使ったのは、SoundEngine Free の音程アルゴリズム。GoldWaveも試してみたが、振幅(ボリューム)が大きく変わってしまったり、 低域のくずれがひどかったり、あまり良くない。

1つ目の例は、880Hz。音叉のAのオクターブ上(A5)だが、この辺だと破綻なくピッチ変更ができている。 上段がもと音源、下がマイナス5でできた波形。

A2の110Hzぐらいまでは、問題なく同じようにピッチ変更ができているが、 これが超低域になると難しくなる。

2つ目の例は、35Hz近辺の例。 ピアノの最低音(A0)より少し上というところ。 同じく、上段がもと音源、下がマイナス5でできた波形。

かなり波形が暴れているのが分かる。 音楽には基本音の倍音だけではなく、低域の信号も含まれているが、その低域の信号のピッチ変更をすると、 このように位相関係がバラバラになってしまって気持ちの悪い音になってしまう。

これは、時間軸方向にウィンドウを区切って処理をするためで、例えば50msecのウィンドウを切るとすれば、 880Hzならそのウィンドウの中に44サンプルが入るので、それを延ばしたり縮めたりしても、 もとのパターンを再現できる精度が高い。 35Hzだと、50msecには2サンプル入るか入らないか、というところ。 これだと、伸び縮みさせたあと、端が隣の区間と合わないので、つじつまをあわせるのが ややこしくなる。 壁紙のパターンが小さければそれなりに合わせても柄が合うけど、大きなパターンになると柄合わせを するためにきちんと計算しないといけないのと同じこと。

MIDI音源だと、キー変更をしたときには、ピアノならピアノ、ベースならベースの音源の別の音程の音源を鳴らすので、 それぞれがきれいに発音されて合成される。 加えて、ドラムスのトラックは、キー変更に関わらず同じセッティングで再生されるはず。 ドラムスの音は、ピッチを変えると(特に下げると)気持よく聞こえない。 原音 / キー+5 / キー-5 のサンプルを作ってみた。
ドラムス(元/+5/-5)
もとの音に対し、ピッチを変えた場合、とくに下げた場合には違和感を感じるようになっているのが 分かる。

いわゆる「生音」カラオケだと、MIDIのオケと違い、やはりピッチ変更には弱くなる。 キーを変える場合には、生音よりもそうでないオケを選ぶのが良い。