マイクに実際に届いているもの
音とは、くり返す振動です。音叉のAは1秒間に440回振動します。これが440ヘルツ。1オクターブ上がると周波数は2倍の880ヘルツになり、そのあいだに12の半音があって、ひとつ上がるごとに約6%ずつ高くなります。
でも、声はひとつの周波数だけを出しているわけではありません。Aを歌うと、440ヘルツに加えて、880、1,320、1,760ヘルツ……と倍音が重なります。この混ざり方が音色を決めていて、同じ音を2人が歌っても響きが違うのはそのためです。口笛はその反対で、ほぼひとつだけの、とても純粋な周波数です。やるべきことは、この混ざった音の中から基本の周波数、つまり基音を見つけ出すこと。音名を決めるのは、この基音です。
1秒間に何百回も、音を探す
Fredonは、マイクの音を約85ミリ秒ずつの短い区間に区切って聴き、約5ミリ秒ごとにこれをくり返します。各区間でまず判断するのは、何が聴こえているか。無音や雑音なのか、声なのか、口笛なのか。手がかりは3つで十分です。音量、スペクトルが「ノイズ」なのか「伸びている音」なのか、そしてエネルギーがひとつの周波数にどれだけ集まっているか。
この振り分けが大切なのは、最適な方法が違うからです。
- 口笛の場合、Fredonは音を周波数ごとに分解し(フーリエ変換)、いちばん高いピークを選びます。口笛はほぼ純粋なので、そのピークがそのまま音になり、精度もとても高くなります。
- 声の場合、この方法ではよく間違えます。倍音のほうが基音より強いことがあるからです。そこでFredonは、信号を時間をずらした自分自身と比べ、もっともよく重なるずれ幅を探します。このずれ幅が1回の振動にかかる時間、つまり周期であり、そこから音がわかります。
こうした方法の典型的な落とし穴が、オクターブの取り違えです。ある音を、1オクターブ上や下の音と間違えてしまうこと。Fredonはこれを防いでいます。一瞬だけのオクターブの跳躍や、確信度が下がったときの跳躍は、歌った音ではなく測定の誤りとして扱います。
画面の音がふらつかないように
声は完全には安定しません。少し上がったり下がったり、ビブラートで揺れたりします。測った値をそのまま表示すると、表示がちらついてしまいます。そこでFredonは、直近の測定値の中央値を使い、となりの音との境目を40セント以上はっきり超えた状態が60ミリ秒以上続いたときだけ、表示する音を切り替えます。1セントは、半音の100分の1です。
これは音程メーターにも使われています。歌っている音と、いちばん近い正しい音との差をセントで表すものです。基準ピッチは調整できるので、440ヘルツより少し高め・低めに合わせた楽器とも一緒に使えます。Fredonのチューナーも、これとまったく同じエンジンを開放弦に使っています。
音からコードへ:決め手はキー
ひとつの音は、いくつものコードに含まれています。Gの音は、Gのコードにも、CにもEmにも入っています。どれを選ぶか。答えは、歌っている曲のキーの中で、いちばん自然に響くコードです。
キーを判定するために、Fredonは歌った音を、長さで重みをつけて数えています。長く伸ばした音は、経過音より重く数えます。その分布を、メジャーとマイナー合わせて24のキーと比べます。キーにはそれぞれ特徴があり、キーCなら、C、E、Gがくり返し現れ、C♯はほとんど出てきません。この基準となる分布は、それぞれのキーでどの音が「収まりよく」聴こえるかを測った音楽心理学の研究から来ています(クラムハンスル=ケスラーとテンパリーのプロファイル)。歌にいちばん近いキーが選ばれます。
そしてFredonは、そのキーで歌った音にいちばん自然なコードと、いくつかの別の候補を表示します。キーを自分で固定することもできます。耳でキーを判定する方法は、曲のキーの調べ方で解説しています。
メロディ全体にコードをつける
メロディをまるごと録音すると、問題が変わります。選ぶのはひとつのコードではなく、うまくつながるコードの流れです。Fredonはまず音を書き起こし、それからカーナビが最適なルートを探すように、いちばんいいコード進行を探します。
選択肢にはそれぞれ「コスト」があります。そのときの中心となる音を含まないコードは、コストが高い。コードに含まれない短い音は、コストが低い。経過音で、耳は自然に受け入れるからです。トニックからサブドミナント、ドミナント、そしてトニックへ戻るという、調性音楽が好む流れは優先されます。フレーズの終わりには、句読点のように響く終止形(カデンツ)が来るようにします。古典的なアルゴリズム(ビタビ)が、あらゆる組み合わせの中からコストが最小のルートを見つけ、その次にいいルートも残しておきます。だからFredonは、同じメロディに別のコードづけを提案できるのです。
音楽面からもっと知りたい方は、楽器が弾けなくてもできる作曲をどうぞ。
かき鳴らしたコードを聴き分ける
弾いたコードには、いくつもの音が同時に含まれ、それぞれに倍音があります。声の方法はもう使えません。見つけるべき周期がひとつではないからです。そこでFredonは、約170ミリ秒という長めの区間を、1秒間に20回ほど聴きます。時間が長いほど、低音域の精度が上がります。ギターの弦どうしの周波数が、ぎっしり詰まっている音域です。
音を周波数に分解し、それぞれのピークを、オクターブを無視して12の音のどれかに振り分けます。こうしてできるのが「クロマ」。各音がどれだけ鳴っているかを示す12本のバーです。ここで欠かせない工夫があります。低いEの弦は、倍音によってBとG♯も出しています。補正しなければ、弦1本だけでEメジャーのコードに見えてしまうのです。そこでFredonは、より低く強い音の倍音にぴったり重なるピークを弱めます。
次に、この12本のバーをコードのひな形と比べます。メジャー、マイナー、セブンス、メジャーセブンス、マイナーセブンス、sus2、sus4、ディミニッシュを、12のルートそれぞれで。コードが表示されるには、少なくとも3つの異なる音と、同じ結果が2回続くことが必要です。単発の音や倍音にだまされることはありません。
特定のコードを練習しているときは、聴こえた音と、本来鳴るはずの音も比べます。足りない音があれば、表示中の押さえ方からその音を出すはずだった弦を探し、どの弦を確認すればいいかを教えてくれます。
すべてはスマホの中で
これらの計算は、どれもインターネットに送られません。スマホがすべてを処理し、表示がなめらかなままになるよう、計算は別のスレッドで行います。だから通信の待ち時間はなく、オフラインでも使え、あなたの声が端末の外に出ることもありません。このサイトのデモも同じしくみで、ブラウザの中で動いています。
しっかり聴き取ってもらうために
- 音を0.5秒ほど伸ばす。歌い出しから強いビブラートはかけずに。
- マイクから30cmほど離れる。近すぎると音が割れます。
- 口笛を試す。いちばん認識しやすい音です。
- しっかりかき鳴らす。コードを認識させるには、弦を響かせたままにしましょう。
- まわりの音を避ける。テレビや話し声があると、正しく測れません。