発振器のマイコン化のなかで、テーマソングの演奏を遊びで組み入れて見ました。
音楽演奏は楽譜データを用意して、それを順次読み出して演奏するわけですが、楽譜データは音の高さと長さの二つのデータが必要になります。ドレミファソラシドと4分音符か8分音符かということですね。
さて、楽譜の入力です。問題は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%と結構誤差は大きいものになります。絶対音感をお持ちの方は気持ち悪いでしょうね。俺程度の音感だと気にはならないが。。。
取り合えずテーマソングが高らかに鳴って、本日の発振器くんの仕事のスタートです。
楽譜データの入力
2006-11-13 18:42:24 (17 years ago)
-
カテゴリタグ:
- 未分類
- 前の記事:テルミンのマイコン化
- 次の記事:PSoCによる正弦波出力 まだ使いこなせない開発環境
- Calendar
<< May 2024 >> Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
- search this site.
- tags
-
- 未分類 (374)
- archives
-
- 201401 (2)
- 201305 (1)
- 201303 (1)
- 201301 (1)
- 201212 (1)
- 201211 (1)
- 201210 (1)
- 201209 (3)
- 201208 (4)
- 201207 (2)
- 201206 (3)
- 201205 (5)
- 201204 (1)
- 201203 (2)
- 201107 (1)
- 201105 (2)
- 201104 (4)
- 201007 (3)
- 201006 (5)
- 201005 (5)
- 201004 (10)
- 201003 (1)
- 201002 (21)
- 201001 (31)
- 200912 (31)
- 200911 (8)
- 200910 (11)
- 200909 (4)
- 200908 (1)
- 200907 (2)
- 200906 (1)
- 200905 (5)
- 200904 (5)
- 200903 (3)
- 200902 (1)
- 200901 (2)
- 200812 (10)
- 200811 (4)
- 200810 (5)
- 200809 (10)
- 200808 (6)
- 200807 (9)
- 200806 (15)
- 200805 (31)
- 200804 (30)
- 200803 (31)
- 200802 (29)
- 200801 (31)
- 200712 (31)
- 200711 (30)
- 200710 (31)
- 200709 (30)
- 200708 (31)
- 200707 (31)
- 200706 (30)
- 200705 (31)
- 200704 (30)
- 200703 (31)
- 200702 (28)
- 200701 (31)
- 200612 (31)
- 200611 (30)
- 200610 (30)
- 200609 (27)
- 200608 (7)
- 200607 (1)
- recent trackback