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