Deprecated: Assigning the return value of new by reference is deprecated in /home/users/2/floppy.jp-999953/web/kagakusukimono/class/View.php on line 25

Deprecated: Assigning the return value of new by reference is deprecated in /home/users/2/floppy.jp-999953/web/kagakusukimono/class/View.php on line 30

Warning: Cannot modify header information - headers already sent by (output started at /home/users/2/floppy.jp-999953/web/kagakusukimono/class/View.php:25) in /home/users/2/floppy.jp-999953/web/kagakusukimono/class/View.php on line 81
科学好き者の日々::楽譜データの入力

楽譜データの入力

発振器のマイコン化のなかで、テーマソングの演奏を遊びで組み入れて見ました。
音楽演奏は楽譜データを用意して、それを順次読み出して演奏するわけですが、楽譜データは音の高さと長さの二つのデータが必要になります。ドレミファソラシドと4分音符か8分音符かということですね。

onpu.jpg

さて、楽譜の入力です。問題は2つあります。
1つ目は周波数を入力するのですが、3桁の数値の入力に間違いが多いあるいは神経を使うということです。
2つ目は音階によって同じ8分音符の長さでもその間に入る波数が違うことです。マイコンは何サイクル波形を作ったかで時間を決めています。
そこで、エクセルで上に表示されているような表を作ります。
1列目は8分音符での長さ(8分音符いくつ分かということ)です。2列目は音階でド、ド#、レ。。。。のように入力します。3列目は2列目の音階の周波数、4列目は実際の音の長さ(ここではテンポを120として8分音符の長さは0.25秒です)です。5列目は周波数×音の長さで発声しているサイクル数を表しています。
マイコンに与えるデータはこの3列目の周波数と5列目のサイクル数です。
周波数の入力は直接入れると間違いやすいので右の変換表を作っておいて、表から検索するようにします。VLOOKUP関数です。3列目には =VLOOKUP(K2,$P$1:$R$13,3,FALSE) の関数がいれてあります。
あとは単なる掛け算です。

音の高さはマイコンのループ回数をカウントして作るので、音階本来の周波数にぴったりした周波数になりません。PICでクロックを4MHzで作動させようとすると、高音で最悪3%と結構誤差は大きいものになります。絶対音感をお持ちの方は気持ち悪いでしょうね。俺程度の音感だと気にはならないが。。。

取り合えずテーマソングが高らかに鳴って、本日の発振器くんの仕事のスタートです。
Calendar
<< May 2024 >>
SunMonTueWedThuFriSat
   1234
567891011
12131415161718
19202122232425
262728293031
search this site.
tags
archives
recent comment
recent trackback
others
admin