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のオケと違い、やはりピッチ変更には弱くなる。 キーを変える場合には、生音よりもそうでないオケを選ぶのが良い。

2015年1月25日日曜日

日本でも week number 表記を

仕事で予定を言う時に、2月の上旬とか3月の中ごろとか言いますが、
上旬と言うと、15日までなのか、上旬中旬下旬を考えると10日ぐらいまでなのか、とてもあいまいになってしまいます。

そういうときに、week number で言いたいと思うことがあります。
今年の例だと、本日1月25日は week 4 の日曜日ということになり、締め切りで week 4 と言えば 1/23の金曜日までに出せ、ということになるわけです。
UKにいるときには、これがけっこう普通で、使いやすいなと思ったものです。

そもそも、1週間が日曜日から土曜日なのか、月曜日から日曜日なのか、という問題もあるのですが、これは国際標準としては ISO 8601 で決まっていて、月曜から日曜が「正解」です。
日曜日から始まるというのは、カレンダーでは一般的ですが、キリスト教での決まりではそういうことになるようです。
手帳は月曜始まりが普通ですね。
このあたりについては、詳しく述べてあるサイトもたくさんあります。

暦と天文の雑学 - 曜日の順番・曜日の生い立ち

週の始めは土曜日?

経理などは月例で回すことが多いですが、一般的には仕事のサイクルは週で回すことが増えているように思います。
月報ベースだとサイクルが長すぎるし、定例会議などは曜日を決めてウィークリーにしていることが多いのではないでしょうか。
そのときに、「来月下旬までには」などと言っていると、合意ができているようでぜんぜん違うことを言っているということも起こってしまいます。
逆に、そのあいまいさに頼りたいという場合もあるわけですが。

しかしながら week 25 までに、と言っても、6/15(月)から6/19(金)の週を指すと分かる人は日本人では少数派だと思います。
週の単位で言いたくても、「6月15日の週」とか言ってしまいます。
これが、なんとも残念な感じがしてしまいます。
日本でも使うようにならないかな、と思います。
日本で使うときには、「第25週」とか言うんでしょうか。
それはそれで、妊娠第何週目みたいになってしまいますが。

さて、この week number の定義ですが、ISO 8601で決まっていまして、
その年の最初の木曜日を含む月曜日から日曜日までの1週間が week 1 で、52か53までカウントアップすることに決まっています。
手帳に表記が付いているケースも、実は増えているので、日本でも使える素地は出来てきているんじゃないでしょうか。