HTML5(CanvasとJavaScript)を使用しています。
キャンバスに Waveファイル(Audio/wev)を
ドラッグ&ドロップして下さい。
Wave信号・FFTスペクトルなどを表示します。
(※: 但しまだ Chromium-16のみで
Firefox-9・Opera-11では動作しないようです。
(Opera-12では動作しました)
※: 2021年2月現在 Chromium 85.・Firefox 82.・Opera 12.16
いずれも動作 OKです。)
使い方:
[ x2 | /2 ] Wave信号の表示範囲を2倍 | 1/2倍にします。
[ < | > ] Wave画面で 拡大時に左右に移動します。 又 FFT画面では表示範囲を縮小 | 拡大します。
[ - | + ] 画面表示の高さを増減します。
(※ v0.5 移動しました。) [ /1 ... /16 ]: [(Cent)]で Cent値の表示幅を縮小します。
[ Wave ] Wave信号を表示します。
[ FFT ] FFTのスペクトルを表示します。
青色の水平線をドラッグする事で ピークの閾値を調整します。
[ Peaks ] FFTスペクトルの時間によるピークを表示します。
[ Inha(rmonicity) ] インハーモニシティ値を測定します。
FFTのピークの平均値を表示していますので
それからカーソルのドラッグで 基音のピークを選んで下さい。
続く倍音があれば横の線グラフで表示します。
補正したセント値から"最小二乗法(lsm)"で曲線に当てはめて
インハーモニシティ値とピッチを計算しています。
簡易型ですので
Waveの全体からの平均値とはしていません。
ですので Wave信号の範囲で調節して
場所毎の値を見る事になります。
画面下で測定結果を表示しています。
[ Inhar.:0.845(0.997) Pitch:8.897 Cis(53): 557.449[Hz] : 2089241.1(※v0.6削除しました。) ]
順にインハーモニシティ値(決定係数), 基音キーのセント値・キー名(キー番号)・周波数 ・ピーク高さ(※v0.6削除しました。)です。
試しにJavaPitch(jp)
のWave信号で試してみます。
A(49)440[Hz]インハーモニシティの無い10倍音です。
A(25)110[Hz]・ピッチは +5[cent]・インハーモニシティ値は 0.095・ 10倍音です。
A(25)110[Hz]・ピッチは -5[cent]・インハーモニシティ値は 0.095・ 10倍音です。
(※0.6削除しました。)[ (Diff) ] 参考までに[Inha.]で計算した 差の経過値を表示します。 最小差がインハーモニシティ値ですが そこからさらに 最小二乗法(LSM)で計算して求めています。
[ (Cent) ] 参考までにセント値でキー毎の変化を表示します。 カーソルの移動で -20〜20セントのグレーの範囲を表示します。 (※v0.5)目盛の上に変動の標準偏差値をシアン色で表示しました。
[ 9 ... 14 ] FFTのサンプル数 (9:512 10:1024 11:2048 12:4096 13:8192 14:16384)を変更します。
[ 1/1 ... 1/16 ]: [Peaks]で FFTの移動量を サンプル数に比べてどれぐらいにするのかを決めます。
(※v0.5)[ 30 ... 70 ]: インハーモニシティの検索幅を 通常の ±50[cent]範囲から 変更する時に使用します。
(※v0.5)[ 0 ... 2 ]: [Inha.]で 下側の倍音を消去する時に
使用します。
[(Cent)]で 変動の大きい基音があると インハーモニシティ値の曲線から
外れる場合があります。
それを 基音から 倍音 1つ 又は 2つの削除を選択します。
その時に インハーモニシティ値の色を灰色にして 再計算しています。
例えば このような[(Cent)]場合
[Inha.]では 0.140と示されますが...
[1]で 基音を 1つ削除すると...
...インハーモニシティ値が再計算され 0.163となりました。
(※v0.6)[ 0.0 0.3 ... 3.0 6.0 ]:インハーモニシティ値を
おおよそで選択します。
例えば 以下の様な[FFT]の場合...
[0.3]がデフォルトですが...
倍音列が正確に捉えられていません。 A49なのでもう少し多い様な...
[1.0]では多いいかも...
[0.6]で正確な倍音列が捉えられました。
画面下段は Wave信号の表示範囲を示します。 範囲を変更した時は左右へのドラッグで表示位置が移動します。
Wave表示ではカーソル位置に白縦線が表示されます。 ドラッグする事で表示範囲を選択出来ます。
画面上段では Wave信号のデータを表示します。
[Peaks]で もし不要なピークがあれば カーソルをドラッグする事で ピークが白色に変化して [Inha.]には表れなくなります。 (再ドラッグ 又は再[Peaks]で元に戻ります。)
(v0.6削除しました。) インハーモニシティ値の最大測定値は 7.0で 大体 D(78)ぐらいまでです。 (高音域での測定精度が ない為です;)
Wave信号の長さはマシンにもよりますが 最長でも 60[sec]ぐらいが限界かも知れません。 あまり長いとブラウザがハングします。
(Wさんへ。遅くなりましたが やっとドラッグ&ドロップ動作の Wave信号関係のソフトが出来ました。)
v0.6['22/06/04] calcInha()のループを一つ削除しました。
その代りおおよそにインハーモニシティ値を選択する様にしました。
D(18)キー以下では 基音を検出しなくても
その倍音列を調べる様にしました。
例えば以下のFFTでは 75[Hz](D18)ぐらいが最低音に見えます。
しかし[Inha]ではまだ低音になる様に見えます。
さらにカーソルを下げて行くと D6で倍音列が現れます。
ただし基音は仮の値なので 1つ切捨てて([1]) 的確なインハーモニシティ値となります。
「ピアノの識別 (Identify Piano Types)」に v0.6での サンソン・フランソワ(Samson François)を追加しました。
v0.5['22/04/11]
精度を上げるべく 改良してみました。
測定した周波数やセント値を求めるのに
平均値から中央値に変更しました。
[(Cent)]では 標準偏差値を加えました。
インハーモニシティの検索範囲の幅を変える様にしました。
変動の多い倍音を切捨てる様にしました。
「ピアノの識別
(Identify Piano Types)」に hwvで測定した
グレン・グールド(Glenn Gould)を追加しました。