前回に続いてARDUINO MOZZIで音を鳴らす。
今回は実際のオルゴールの作成だ。
MOZZIの場合、9番ピンとGNDにそのままイヤホンジャックを接続すれば音がでるので楽ちんだ。
気になる人はローパスフィルターを入れればよい。
問題は、音楽を鳴らすソフトと、音楽自体のデータだ。
音楽データは、どこかのWEBからMIDIファイルを探して変換した。
MIDIデータをそのまま持ってくると、ARDUINOに入りきらないので、以下のようなフォーマットで入れることとする。
最初のbitが0のときはチャネルの設定、1のときはdelay(待ち時間)の指定となる。
set_chでは、チャネルの番号(0-255)とともに、noteで音程の高さをMIDI番号(0-127)で指定する。
noteは0にすれば音を止めることとなる。
実はオルゴールの場合、各チャネルの音は同じなので、チャネル指定は必要ない。
データの順序で、音をチャネルを切り替えて音を鳴らしている。
また、ADSR指定をしているので、NOTE=0の指定も取り去ってしまった。
(実際にはNOTE=0でReleaseになるのだろうけど、Sustainの時間は固定)
ARDUINO UNO+MOZZIは、4和音が限度だった。
これ以上増やすとノイズが発生してしまう(だれか良いやり方があれ教えてプリーズ)
そのため、今回は4つの音をデータがくる順序で鳴らしている。
作ったオルゴールの音はこんな感じ。
なんちゃってオルゴール感はあるが個人的にはうまくいったと思う。
見る人がいるかわからないけど、ソースはこれ。
waon_sampleADSR_waonmax_tetris