Standard MIDI file player for the eVY1 shield and analog joy stick
Dependencies: DirectoryList SDFileSystem mbed
Fork of eVY1_SMF_player by
MicroSDカードからSMF(スタンダードMIDIファイル)を読み込み、データをシリアルでeVY1シールドに転送して再生します。 MIDIファイル形式は、Format 0のみ対応しています。アナログジョイスティックを使用してテンポとピッチの変更が出来るようにしました。
動作確認は、mbed FRDM-K64Fで行っています。
eVY1シールドをそのまま刺して使用できます(オンボードのMicroSDスロットを使います)。
eVY1を使用した場合、MIDIデータのCH.1は強制的にeVocalodによる歌声として使用されてしまうため(プログラムチェンジも不可)、強制的にCH.16に割り当てています。そのため、CH.16を使用しているMIDIファイルはデータ通りに再生する事が出来ません。
アナログジョイスティックの X Y データは、それぞれアナログ入力の A0, A1 に接続しています。
Diff: main.cpp
- Revision:
- 2:4bcf9c18896b
- Parent:
- 1:c536df09d2e8
- Child:
- 3:2a58b7f4b0cb
--- a/main.cpp Mon Jul 20 09:06:05 2015 +0000 +++ b/main.cpp Mon Jan 04 08:21:32 2016 +0000 @@ -34,6 +34,14 @@ #undef _DEBUG #endif +#elif defined(TARGET_WIZWIKI_W7500P) +SDFileSystem sd(PB_3, PB_2, PB_1, PB_0, "sd"); // MOSI, MISO, SCK, CS +RawSerial midi(D1, NC); +InterruptIn btn(PC_6); +#if defined(_DEBUG) +#undef _DEBUG +#endif + #endif #ifdef _DEBUG @@ -170,6 +178,16 @@ TIMER = 0; tempo = 500; // default value + uint32_t ch; + for (ch=0; ch<16; ch++) { + midi.putc(0xB0|ch); + midi.putc(0x78); + midi.putc(0x00); + midi.putc(0xB0|ch); + midi.putc(0x79); + midi.putc(0x00); + } + // Skip MIDI header for (uint32_t i=0; i<8; i++) { midi_read(); @@ -179,12 +197,10 @@ format = (midi_read() << 8); format |= midi_read(); - if ( format > 2) { - DEBUG_PRINT("This is not a MIDI format file!\n", format); + if ( format > 1) { + DEBUG_PRINT("This is not a MIDI format 0 file!\n", format); STATE = 2; return; - } else { - DEBUG_PRINT("MIDI format : %d\n", format); } uint32_t track;