SSブログ

楽器は弾けないし、音符も読めないけれど、GR-SAKURAでMIDIで演奏してみた [RX&SH&H8]

あっちが飛んでしまったので、こっちに書き直し。
midi_play_02.jpg


midi_play_01.jpg


MFT2012のソーシャルツリーに飾るネタとして、やっぱりツリーに飾るのだから音と
光を出したいなぁ!と思って急遽作成したものです。
BEEP音で音階を作ってやっています。つまりオルゴールです。

今までのやり方(あくまでも個人的なやり方)だとプログラムは、音を鳴らす部分と
演奏する部分、それにデータとして楽譜データを手でチマチマと入れていたのです
が、特に楽譜データの入力が手間が掛かってしまいました。
そこで従来からMIDIデータを利用できないものかと考えてはいたのですが、これを
機会にプログラムを作成してみたものです。

そもそもMIDIとは何?からスタートするのですが、インターネットっていいですね、
情報が沢山落ちていて。ネットに落ちている情報を拾いながらMIDIデータの解析プ
ログラムをなんとか構築できました。

もっとも基本的に音楽的な素養は一切無いのでMIDIには色々制御コードが出てくる
のですが、それが意味するところがさっぱり判りません。とりあえず音符データと
時間データを使って演奏をしていますが、本当のところはまともに動いているのか
どうかは不明です。

RXマイコンで使用したリソースは8bitタイマーを2個使っています。
8bitタイマーの出力端子はTMO0(IO2)とTMO3(IO6)となります。

2個の8bitタイマー出力を2個の圧電ブザーに接続し、同時発音可能な音の数を2と
しています。
まあ基本BEEP音なので音の強弱も付けられませんし、実に貧相な音ですが、しかし
複数の音が同時発生すると結構楽しいものです。
RXマイコンにはタイマーが沢山あるので、出力可能なタイマーの数だけ圧電ブザー
を用意し演奏するってのも楽しそうです。
接続なんて実に簡単です。タイマー出力端子と圧電ブザーを線で繋ぐだけですから。

MIDIデータはSDカードに保存しています。ROOTディレクトリ下に全部のMIDIファイル
(拡張子が.midのファイル)を入れておきます。
電源の起動後、見つけたMIDIファイルを片っ端から演奏を始めます。

同時にLEDも適当にチカチカさせています。どの端子をチカチカさせているのかは
ソースコードをごらん下さい。

MIDIデータの良いところは、
1.音のデータではなく演奏データなので、まっとうな音源を用意すればよい音
で演奏できる点です。将来的には音源データを搭載?、、、いやいや大変なので止
めておこう。

2.楽譜データもネットからいくらでも落とす事ができます。著作権を主張して
いるデータも有りますのでその扱いは慎重になる必要がありますが、個人的に利用
する場合は自由に使えるものは沢山あります。

3.データサイズの小ささもありますね。元々MFT2012で動かした時はSDカード
にMIDIデータを入れていたのではなく、MIDIファイルをそのままバイナリー化して
ROMに埋め込んで使っていました。しかしひとつのファイルサイズはせいぜい数kbyte
程度なので、10曲位入れてもROM領域を圧迫する程にはなりません。

RXマイコンではなく8bit位のリソースの小さなマイコンで扱ったとしても、ROM
に何曲かは入れ込む事ができるのではないでしょうか。


MIDIデータの困ったところは、
1.フォーマットが複数存在し、あらゆるデータに対応するとなると大変な事にな
りそう。その為今回のプログラムはSMF、フォーマット0のみの対応となります。

2.曲によっては演奏しても何の曲だかさっぱり判らなくなる。複数パートに別けて
演奏するようなデータの場合、音が細分化され過ぎて2つしか音源の無い今回の作品
ではまともに演奏にならない可能性があります。

3.演奏出来ない音階がある(笑)。まあこれはハードウエアの問題で、圧電ブザーな
ので、数百Hzから4KHz位までしかまともに音が出ません。


そんな訳でクリスマスのツリーの飾り付け用の電子工作ネタにはぴったりです。
クリスマスに間に合わなくてもお正月休みのネタとしてどうぞ!。

サンプルプロジェクトは以下のリンクから。
sdmmcライブラリを使用します。

https://dl.dropbox.com/u/60463387/grsakura/midi_play.zip




nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。