鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

カラオケ苦手な私、音域を分析したい

githubにてpitchで検索をかけたら
javascriptライブラリが検索できた
とりあえずこれを使って自分の音域を
調べてみる。

github.com

こちらに動作するサンプルがあるようです。
Pitch Detector

PitchからNoteへ変換する関数
440HzだとNoteが69になるけれど。49番目の鍵盤だから
49ではなくてなんで69なんだろう?!

function noteFromPitch( frequency ) {
	var noteNum = 12 * (Math.log( frequency / 440 )/Math.log(2) );
	return Math.round( noteNum ) + 69;
}

でもPerlのモジュールMIDI::Pitchも同じような
感じで計算しているので間違いなさそう。

http://cpansearch.perl.org/src/CRENZ/MIDI-Pitch-0.7/lib/MIDI/Pitch.pm

pianolabo-sugiura.com

中央のCが60番としてMIDI番号が割り当てられていると
あり、なるほどと思ったのでありました。
だから440HzのAは69番なんですなぁ。ちゃんちゃん。

楽譜の読み方講座(MIDI)


整理しよう。ピアノは88鍵あり、
一番左の鍵盤=21番がlowlowA
33番がlowA
45番がmid1A
57番がmid2A
69番がhiA
81番がhihiA
93番がhihihiA
105番がhihihihiA
一番右の鍵盤=108番がhihihihiD


forkして、こんな塩梅に作ってみました。
github.com

githubioにて公開してみた。これで音域が測定できるはず?!

Pitch Detector

うーん。chromeの場合は、httpsでないとマイクは使えないようです。
firefoxではOK.
github.com