YMF825boardを入手してsample1でドレミファソと鳴らした後
sample2を見て止まっちゃた方が結構いらっしゃるのではないでしょうか
これはMIDIドライバなのでMIDI入力で楽器なんか作るのに大変便利な物なのですが
ちょっとソースを変更して簡単に鳴らす方法。
sampl1ではYMF825の初期設定とSPI通信の設定を行った後
レジスタに書き込む値(fnum&block)を直接与えて音色を指定しています
例えばド
keyon(0x14,0x65)
この数値は計算方法が有るのですが結構ここを理解するのがめんどくさい
そこで計算済みの値をテーブルで保持してMIDIナンバーで指定出来るようにすれば
音色の計算が省けます
const char fnum_hi_tbl[128] PROGMEM = { 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x18, 0x18,0x18,0x18,0x20,0x20,0x20,0x20,0x28,0x11,0x11,0x19,0x19,0x19,0x19,0x19,0x21, 0x21,0x21,0x21,0x29,0x12,0x12,0x1a,0x1a,0x1a,0x1a,0x1a,0x22,0x22,0x22,0x22,0x2a, 0x13,0x13,0x1b,0x1b,0x1b,0x1b,0x1b,0x23,0x23,0x23,0x23,0x2b,0x14,0x14,0x1c,0x1c, 0x1c,0x1c,0x1c,0x24,0x24,0x24,0x24,0x2c,0x15,0x15,0x1d,0x1d,0x1d,0x1d,0x1d,0x25, 0x25,0x25,0x25,0x2d,0x16,0x16,0x1e,0x1e,0x1e,0x1e,0x1e,0x26,0x26,0x26,0x26,0x2e, 0x17,0x17,0x1f,0x1f,0x1f,0x1f,0x1f,0x27,0x27,0x27,0x27,0x2f,0x10,0x10,0x18,0x18, 0x18,0x18,0x18,0x20,0x20,0x20,0x20,0x28,0x11,0x11,0x19,0x19,0x19,0x19,0x10,0x1e, }; const char fnum_lo_tbl[128] PROGMEM = { 0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x7a,0x11,0x29, 0x42,0x5d,0x79,0x17,0x37,0x59,0x7d,0x22,0x65,0x7a,0x11,0x29,0x42,0x5d,0x79,0x17, 0x37,0x59,0x7d,0x22,0x65,0x7a,0x11,0x29,0x42,0x5d,0x79,0x17,0x37,0x59,0x7d,0x22, 0x65,0x7a,0x11,0x29,0x42,0x5d,0x79,0x17,0x37,0x59,0x7d,0x22,0x65,0x7a,0x11,0x29, 0x42,0x5d,0x79,0x17,0x37,0x59,0x7d,0x22,0x65,0x7a,0x11,0x29,0x42,0x5d,0x79,0x17, 0x37,0x59,0x7d,0x22,0x65,0x7a,0x11,0x29,0x42,0x5d,0x79,0x17,0x37,0x59,0x7d,0x22, 0x65,0x7a,0x11,0x29,0x42,0x5d,0x79,0x17,0x37,0x59,0x7d,0x22,0x65,0x7a,0x11,0x29, 0x42,0x5d,0x79,0x17,0x37,0x59,0x7d,0x22,0x65,0x7a,0x11,0x29,0x42,0x5d,0x65,0x5d, };
(ラズパイでお使いの方は PROGMEM外してください)
これでArduinoなら
keyon(pgm_read_byte(&fnum_hi_tbl[note_no]) , pgm_read_byte(&fnum_lo_tbl[note_no]));
ラズパイは
keyon(fnum_hi_tbl[note_no],fnum_lo[note_no]);
とすればMIDIノートナンバーで指定して音が鳴るので
ソースの頭の方にある unsigned char tone_data[35] の中身2バイト目からの30バイトが
音色のレジスタイメージなのでここをGM音源モドキのデータのどれかに
書き換えて音色を変えたりすれば結構簡単に色んな音でメロディを奏でられます。