Standard MIDI file player for the eVY1 shield and analog joy stick

Dependencies:   DirectoryList SDFileSystem mbed

Fork of eVY1_SMF_player by Toyomasa Watarai

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 に接続しています。

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;