ノートと周波数の対応は、基準周波数を決めさえすれば(普通は A4=440Hz ですね)、計算で求めることはできるのですが、必要なたびにいちいち計算していたら面倒です。
ということで、対応表があるとありがたいので、探してきました。
http://www.phy.mtu.edu/~suits/notefreqs.html
探せばたくさん見つかるとは思います。とにかく、ありがたしありがたし。
自分用には Excel シートに落とし込んでおくと良いかもしれません。
え?それぐらいプログラム書け?ああ、それいいですね。CGI とかでさくさくっと...
$freq = 55;
for my $oct ( 1..5 ){
for my $n (qw (A A# B C C# D D# E E# F G G# )){
print “$n($oct) “, int( $freq*1000 + 0.5 ) / 1000 , “\n”;
$freq = $freq * (2**(1/12));
}
}
エクセルなら
=(A1* POWER(2,1/12))
ってかんじ?
takeda さんコメントありがとうございます。
むふふ、実は takeda さんなら何か言ってくださるだろうという期待もちょっとあったりしました。
perl のコードちょっとかっちょいいですねぇ。ほんとに CGI にしてみようかな。
エクセルだと、力技で一気に表が作れてしまいそうですね。
CGIにするには、インターフェイス部分とか画面表示部分とかちと、面倒くさいけど、nの12乗根がえーっと、なだけで、実はそんなにあれじゃないですー。
16ビットのタイマーで8Mでカウントするとして、その音程を出すにはいくつ数えればいいかとかまで一覧表作っても結局、音程の周波数は換わらないから、1覧表があればいいのよね。エクセルでゴリゴリやるのが正解かも。
ちなみにオープンオフィスのカルクだと、(たとえば)D1に基本周波数入れて、(カンマとセミコロンがちがいます)
=D1 * POWER(2;(1/12))
=D2 * POWER(2;(1/12))
=D3 * POWER(2;(1/12))
:
というように、ずらずらならべれば、OK。
12√2=1.059463094という定数にしちゃて単純に掛けたり割ったりしたほうが早くない?
nのm乗根はnの(1/m)乗とあらわせるからfn-1=f/2^(1/12)とかfn+1=f*2^(1/12)とかしちゃってるけど。
こないだ公開した CGI の、周波数計算の部分です:
pre タグきいた :-)