1 #ifndef __MUSICBOX_H__ 2 #define __MUSICBOX_H__ 3 4 #include "../menu.h" 5 #include "pitches.h" 6 7 extern MENU_TYP musicbox; 8 9 typedef struct { 10 char *name; 11 int *notes; 12 int *noteDurations; 13 unsigned int noteLength; 14 unsigned int musicTime; 15 } music_t; 16 17 typedef struct { 18 music_t **music_list; 19 unsigned int music_list_len; 20 int cur_music_index; 21 unsigned int cur_music_note; 22 unsigned int cur_music_time; 23 unsigned int isPlaying; 24 } player_t; 25 26 int musicbox_init(void); 27 int musicbox_uninit(void); 28 void musicbox_task(void); 29 void musicbox_key_handel(key_code_t key_code); 30 void musicbox_cover_draw(int *draw_index); 31 32 static uint8_t icon_data_next_song_24_24[] = { 33 0x00, 0x00, 0x00, 0xFE, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 34 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 35 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 36 0x3C, 0x18, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 37 0x00, 0x00, 0x00, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 38 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00}; 39 static icon_t icon_next_song_24_24 = {icon_data_next_song_24_24, 24, 24}; 40 41 static uint8_t icon_data_previous_song_24_24[] = { 42 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 43 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0x00, 0x00, 0x00, 44 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x18, 0x3C, 45 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 46 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 47 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0x00, 0x00, 0x00}; 48 static icon_t icon_previous_song_24_24 = {icon_data_previous_song_24_24, 24, 49 24}; 50 51 static uint8_t icon_data_resemu_24_24[] = { 52 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFC, 0xF8, 0xF0, 53 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 54 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 55 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 56 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x3F, 0x1F, 0x0F, 57 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 58 static icon_t icon_resume_24_24 = {icon_data_resemu_24_24, 24, 24}; 59 60 static uint8_t icon_data_pause_24_24[] = { 61 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 62 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 63 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 64 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 65 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 66 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 67 static icon_t icon_pause_24_24 = {icon_data_pause_24_24, 24, 24}; 68 69 static uint8_t icon_data_note_32_32[] = { 70 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 71 0xF8, 0xF8, 0xF8, 0x7C, 0x7C, 0x7C, 0x3C, 0x3E, 0x3E, 0x3E, 0x9E, 0x9E, 72 0x9F, 0x9F, 0xCF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 73 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x1C, 0x1C, 74 0x0E, 0x0E, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x01, 0x01, 75 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 76 0xC0, 0xC0, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF8, 77 0xFC, 0xFE, 0x9E, 0x0F, 0x0F, 0x0F, 0x0F, 0x9E, 0xFF, 0xFF, 0xFF, 0xFF, 78 0x1F, 0x7F, 0x7F, 0xFF, 0xF3, 0xE1, 0xE1, 0xE1, 0xE1, 0xF3, 0xFF, 0x7F, 79 0x3F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x0F, 0x1F, 80 0x1F, 0x1F, 0x1F, 0x0F, 0x0F, 0x07, 0x01, 0x00}; 81 static icon_t icon_note_32_32 = {icon_data_note_32_32, 32, 32}; 82 83 static int liang_zhi_lao_hu_Notes[] = { 84 NOTE_C4, NOTE_D4, NOTE_E4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, 85 NOTE_C4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_F4, NOTE_G4, 86 NOTE_G4, NOTE_A4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_C4, NOTE_G4, 87 NOTE_A4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_C4, NOTE_D4, NOTE_G3, 88 NOTE_C4, 0, NOTE_D4, NOTE_G3, NOTE_C4, 0}; 89 static int liang_zhi_lao_hu_NoteDurations[] = { 90 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 8, 8, 4, 8, 8, 8, 91 8, 4, 4, 8, 8, 8, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}; 92 static music_t liang_zhi_lao_hu = {"liang_zhi_lao_hu", liang_zhi_lao_hu_Notes, 93 liang_zhi_lao_hu_NoteDurations, 34}; 94 95 static int Imperial_March_Notes[] = { 96 // Dart Vader theme (Imperial March) - Star wars 97 // Score available at https://musescore.com/user/202909/scores/1141521 98 // The tenor saxophone part was used 99 // notes from 100 // https://github.com/robsoncouto/arduino-songs/blob/master/imperialmarch/imperialmarch.ino 101 102 NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_F4, 103 REST, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, 104 NOTE_F4, REST, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_F4, NOTE_C5, 105 106 NOTE_A4, NOTE_F4, NOTE_C5, NOTE_A4, NOTE_E5, NOTE_E5, NOTE_E5, 107 NOTE_F5, NOTE_C5, NOTE_A4, NOTE_F4, NOTE_C5, NOTE_A4, 108 109 NOTE_A5, NOTE_A4, NOTE_A4, NOTE_A5, NOTE_GS5, NOTE_G5, NOTE_DS5, 110 NOTE_D5, NOTE_DS5, REST, NOTE_A4, NOTE_DS5, NOTE_D5, NOTE_CS5, 111 112 NOTE_C5, NOTE_B4, NOTE_C5, REST, NOTE_F4, NOTE_GS4, NOTE_F4, 113 NOTE_A4, NOTE_C5, NOTE_A4, NOTE_C5, NOTE_E5, 114 115 NOTE_A5, NOTE_A4, NOTE_A4, NOTE_A5, NOTE_GS5, NOTE_G5, NOTE_DS5, 116 NOTE_D5, NOTE_DS5, REST, NOTE_A4, NOTE_DS5, NOTE_D5, NOTE_CS5, 117 118 NOTE_C5, NOTE_B4, NOTE_C5, REST, NOTE_F4, NOTE_GS4, NOTE_F4, 119 NOTE_A4, NOTE_A4, NOTE_F4, NOTE_C5, NOTE_A4}; 120 121 static int Imperial_March_NoteDurations[] = { 122 -4, -4, 16, 16, 16, 16, 8, 8, -4, -4, 16, 16, 16, 16, 123 8, 8, 4, 4, 4, -8, 16, 124 125 4, -8, 16, 2, 4, 4, 4, -8, 16, 4, -8, 16, 2, 126 127 4, -8, 16, 4, -8, 16, 16, 16, 8, 8, 8, 4, -8, 16, 128 129 16, 16, 16, 8, 8, 4, -8, 16, 4, -8, 16, 2, 130 131 4, -8, 16, 4, -8, 16, 16, 16, 8, 8, 8, 4, -8, 16, 132 133 16, 16, 16, 8, 8, 4, -8, 16, 4, -8, 16, 2}; 134 static music_t Imperial_March = {"Imperial_March", Imperial_March_Notes, 135 Imperial_March_NoteDurations, 86}; 136 137 #endif 138