1 /**
2  * @file lv_demo_music.c
3  *
4  */
5 
6 /*********************
7  *      INCLUDES
8  *********************/
9 #include "lv_demo_music.h"
10 
11 #if LV_USE_DEMO_MUSIC
12 
13 #include "lv_demo_music_main.h"
14 #include "lv_demo_music_list.h"
15 #if LV_DEMO_MUSIC_AUTO_PLAY && LV_USE_PERF_MONITOR
16     #include "../../lvgl_private.h"
17 #endif
18 
19 /*********************
20  *      DEFINES
21  *********************/
22 
23 /**********************
24  *      TYPEDEFS
25  **********************/
26 
27 /**********************
28  *  STATIC PROTOTYPES
29  **********************/
30 #if LV_DEMO_MUSIC_AUTO_PLAY
31     static void auto_step_cb(lv_timer_t * timer);
32 #endif
33 
34 /**********************
35  *  STATIC VARIABLES
36  **********************/
37 static lv_obj_t * ctrl;
38 static lv_obj_t * list;
39 
40 static const char * title_list[] = {
41     "Waiting for true love",
42     "Need a Better Future",
43     "Vibrations",
44     "Why now?",
45     "Never Look Back",
46     "It happened Yesterday",
47     "Feeling so High",
48     "Go Deeper",
49     "Find You There",
50     "Until the End",
51     "Unknown",
52     "Unknown",
53     "Unknown",
54     "Unknown",
55 };
56 
57 static const char * artist_list[] = {
58     "The John Smith Band",
59     "My True Name",
60     "Robotics",
61     "John Smith",
62     "My True Name",
63     "Robotics",
64     "Robotics",
65     "Unknown artist",
66     "Unknown artist",
67     "Unknown artist",
68     "Unknown artist",
69     "Unknown artist",
70     "Unknown artist",
71     "Unknown artist",
72     "Unknown artist",
73 };
74 
75 static const char * genre_list[] = {
76     "Rock - 1997",
77     "Drum'n bass - 2016",
78     "Psy trance - 2020",
79     "Metal - 2015",
80     "Metal - 2015",
81     "Metal - 2015",
82     "Metal - 2015",
83     "Metal - 2015",
84     "Metal - 2015",
85     "Metal - 2015",
86     "Metal - 2015",
87     "Metal - 2015",
88     "Metal - 2015",
89     "Metal - 2015",
90 };
91 
92 static const uint32_t time_list[] = {
93     1 * 60 + 14,
94     2 * 60 + 26,
95     1 * 60 + 54,
96     2 * 60 + 24,
97     2 * 60 + 37,
98     3 * 60 + 33,
99     1 * 60 + 56,
100     3 * 60 + 31,
101     2 * 60 + 20,
102     2 * 60 + 19,
103     2 * 60 + 20,
104     2 * 60 + 19,
105     2 * 60 + 20,
106     2 * 60 + 19,
107 };
108 
109 /**********************
110  *      MACROS
111  **********************/
112 
113 /**********************
114  *   GLOBAL FUNCTIONS
115  **********************/
116 
lv_demo_music(void)117 void lv_demo_music(void)
118 {
119     lv_obj_set_style_bg_color(lv_screen_active(), lv_color_hex(0x343247), 0);
120 
121     list = lv_demo_music_list_create(lv_screen_active());
122     ctrl = lv_demo_music_main_create(lv_screen_active());
123 
124 #if LV_DEMO_MUSIC_AUTO_PLAY
125     lv_timer_create(auto_step_cb, 1000, NULL);
126 #endif
127 }
128 
lv_demo_music_get_title(uint32_t track_id)129 const char * lv_demo_music_get_title(uint32_t track_id)
130 {
131     if(track_id >= sizeof(title_list) / sizeof(title_list[0])) return NULL;
132     return title_list[track_id];
133 }
134 
lv_demo_music_get_artist(uint32_t track_id)135 const char * lv_demo_music_get_artist(uint32_t track_id)
136 {
137     if(track_id >= sizeof(artist_list) / sizeof(artist_list[0])) return NULL;
138     return artist_list[track_id];
139 }
140 
lv_demo_music_get_genre(uint32_t track_id)141 const char * lv_demo_music_get_genre(uint32_t track_id)
142 {
143     if(track_id >= sizeof(genre_list) / sizeof(genre_list[0])) return NULL;
144     return genre_list[track_id];
145 }
146 
lv_demo_music_get_track_length(uint32_t track_id)147 uint32_t lv_demo_music_get_track_length(uint32_t track_id)
148 {
149     if(track_id >= sizeof(time_list) / sizeof(time_list[0])) return 0;
150     return time_list[track_id];
151 }
152 
153 /**********************
154  *   STATIC FUNCTIONS
155  **********************/
156 
157 #if LV_DEMO_MUSIC_AUTO_PLAY
auto_step_cb(lv_timer_t * t)158 static void auto_step_cb(lv_timer_t * t)
159 {
160     LV_UNUSED(t);
161     static uint32_t state = 0;
162 
163 #if LV_DEMO_MUSIC_LARGE
164     const lv_font_t * font_small = &lv_font_montserrat_22;
165     const lv_font_t * font_large = &lv_font_montserrat_32;
166 #else
167     const lv_font_t * font_small = &lv_font_montserrat_12;
168     const lv_font_t * font_large = &lv_font_montserrat_16;
169 #endif
170 
171     switch(state) {
172         case 5:
173             lv_demo_music_album_next(true);
174             break;
175 
176         case 6:
177             lv_demo_music_album_next(true);
178             break;
179         case 7:
180             lv_demo_music_album_next(true);
181             break;
182         case 8:
183             lv_demo_music_play(0);
184             break;
185 #if LV_DEMO_MUSIC_SQUARE || LV_DEMO_MUSIC_ROUND
186         case 11:
187             lv_obj_scroll_by(ctrl, 0, -LV_VER_RES, LV_ANIM_ON);
188             break;
189         case 13:
190             lv_obj_scroll_by(ctrl, 0, -LV_VER_RES, LV_ANIM_ON);
191             break;
192 #else
193         case 12:
194             lv_obj_scroll_by(ctrl, 0, -LV_VER_RES, LV_ANIM_ON);
195             break;
196 #endif
197         case 15:
198             lv_obj_scroll_by(list, 0, -300, LV_ANIM_ON);
199             break;
200         case 16:
201             lv_obj_scroll_by(list, 0, 300, LV_ANIM_ON);
202             break;
203         case 18:
204             lv_demo_music_play(1);
205             break;
206         case 19:
207             lv_obj_scroll_by(ctrl, 0, LV_VER_RES, LV_ANIM_ON);
208             break;
209 #if LV_DEMO_MUSIC_SQUARE || LV_DEMO_MUSIC_ROUND
210         case 20:
211             lv_obj_scroll_by(ctrl, 0, LV_VER_RES, LV_ANIM_ON);
212             break;
213 #endif
214         case 30:
215             lv_demo_music_play(2);
216             break;
217         case 40: {
218                 lv_obj_t * bg = lv_layer_top();
219                 lv_obj_set_style_bg_color(bg, lv_color_hex(0x6f8af6), 0);
220                 lv_obj_set_style_text_color(bg, lv_color_white(), 0);
221                 lv_obj_set_style_bg_opa(bg, LV_OPA_COVER, 0);
222                 lv_obj_fade_in(bg, 400, 0);
223                 lv_obj_t * dsc = lv_label_create(bg);
224                 lv_obj_set_style_text_font(dsc, font_small, 0);
225                 lv_label_set_text(dsc, "The average FPS is");
226                 lv_obj_align(dsc, LV_ALIGN_TOP_MID, 0, 90);
227 
228                 lv_obj_t * num = lv_label_create(bg);
229                 lv_obj_set_style_text_font(num, font_large, 0);
230 #if LV_USE_PERF_MONITOR
231                 lv_display_t * disp = lv_display_get_default();
232                 const lv_sysmon_perf_info_t * info = lv_subject_get_pointer(&disp->perf_sysmon_backend.subject);
233                 lv_label_set_text_fmt(num, "%" LV_PRIu32, info->calculated.fps_avg_total);
234 #endif
235                 lv_obj_align(num, LV_ALIGN_TOP_MID, 0, 120);
236 
237                 lv_obj_t * attr = lv_label_create(bg);
238                 lv_obj_set_style_text_align(attr, LV_TEXT_ALIGN_CENTER, 0);
239                 lv_obj_set_style_text_font(attr, font_small, 0);
240 #if LV_DEMO_MUSIC_SQUARE || LV_DEMO_MUSIC_ROUND
241                 lv_label_set_text(attr, "Copyright 2020 LVGL Kft.\nwww.lvgl.io | lvgl@lvgl.io");
242 #else
243                 lv_label_set_text(attr, "Copyright 2020 LVGL Kft. | www.lvgl.io | lvgl@lvgl.io");
244 #endif
245                 lv_obj_align(attr, LV_ALIGN_BOTTOM_MID, 0, -10);
246                 break;
247             }
248         case 41:
249             lv_screen_load(lv_obj_create(NULL));
250             lv_demo_music_pause();
251             break;
252     }
253     state++;
254 }
255 
256 #endif /*LV_DEMO_MUSIC_AUTO_PLAY*/
257 
258 #endif /*LV_USE_DEMO_MUSIC*/
259