254 lines
5.9 KiB
C
254 lines
5.9 KiB
C
|
/**
|
||
|
* @file lv_demo_music.c
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
/*********************
|
||
|
* INCLUDES
|
||
|
*********************/
|
||
|
#include "lv_demo_music.h"
|
||
|
|
||
|
#if LV_USE_DEMO_MUSIC
|
||
|
|
||
|
#include "lv_demo_music_main.h"
|
||
|
#include "lv_demo_music_list.h"
|
||
|
|
||
|
/*********************
|
||
|
* DEFINES
|
||
|
*********************/
|
||
|
|
||
|
/**********************
|
||
|
* TYPEDEFS
|
||
|
**********************/
|
||
|
|
||
|
/**********************
|
||
|
* STATIC PROTOTYPES
|
||
|
**********************/
|
||
|
#if LV_DEMO_MUSIC_AUTO_PLAY
|
||
|
static void auto_step_cb(lv_timer_t * timer);
|
||
|
#endif
|
||
|
|
||
|
/**********************
|
||
|
* STATIC VARIABLES
|
||
|
**********************/
|
||
|
static lv_obj_t * ctrl;
|
||
|
static lv_obj_t * list;
|
||
|
|
||
|
static const char * title_list[] = {
|
||
|
"Waiting for true love",
|
||
|
"Need a Better Future",
|
||
|
"Vibrations",
|
||
|
"Why now?",
|
||
|
"Never Look Back",
|
||
|
"It happened Yesterday",
|
||
|
"Feeling so High",
|
||
|
"Go Deeper",
|
||
|
"Find You There",
|
||
|
"Until the End",
|
||
|
"Unknown",
|
||
|
"Unknown",
|
||
|
"Unknown",
|
||
|
"Unknown",
|
||
|
};
|
||
|
|
||
|
static const char * artist_list[] = {
|
||
|
"The John Smith Band",
|
||
|
"My True Name",
|
||
|
"Robotics",
|
||
|
"John Smith",
|
||
|
"My True Name",
|
||
|
"Robotics",
|
||
|
"Robotics",
|
||
|
"Unknown artist",
|
||
|
"Unknown artist",
|
||
|
"Unknown artist",
|
||
|
"Unknown artist",
|
||
|
"Unknown artist",
|
||
|
"Unknown artist",
|
||
|
"Unknown artist",
|
||
|
"Unknown artist",
|
||
|
};
|
||
|
|
||
|
static const char * genre_list[] = {
|
||
|
"Rock - 1997",
|
||
|
"Drum'n bass - 2016",
|
||
|
"Psy trance - 2020",
|
||
|
"Metal - 2015",
|
||
|
"Metal - 2015",
|
||
|
"Metal - 2015",
|
||
|
"Metal - 2015",
|
||
|
"Metal - 2015",
|
||
|
"Metal - 2015",
|
||
|
"Metal - 2015",
|
||
|
"Metal - 2015",
|
||
|
"Metal - 2015",
|
||
|
"Metal - 2015",
|
||
|
"Metal - 2015",
|
||
|
};
|
||
|
|
||
|
static const uint32_t time_list[] = {
|
||
|
1*60 + 14,
|
||
|
2*60 + 26,
|
||
|
1*60 + 54,
|
||
|
2*60 + 24,
|
||
|
2*60 + 37,
|
||
|
3*60 + 33,
|
||
|
1*60 + 56,
|
||
|
3*60 + 31,
|
||
|
2*60 + 20,
|
||
|
2*60 + 19,
|
||
|
2*60 + 20,
|
||
|
2*60 + 19,
|
||
|
2*60 + 20,
|
||
|
2*60 + 19,
|
||
|
};
|
||
|
|
||
|
/**********************
|
||
|
* MACROS
|
||
|
**********************/
|
||
|
|
||
|
/**********************
|
||
|
* GLOBAL FUNCTIONS
|
||
|
**********************/
|
||
|
|
||
|
void lv_demo_music(void)
|
||
|
{
|
||
|
lv_obj_set_style_bg_color(lv_scr_act(), lv_color_hex(0x343247), 0);
|
||
|
|
||
|
list = _lv_demo_music_list_create(lv_scr_act());
|
||
|
ctrl = _lv_demo_music_main_create(lv_scr_act());
|
||
|
|
||
|
#if LV_DEMO_MUSIC_AUTO_PLAY
|
||
|
lv_timer_create(auto_step_cb, 1000, NULL);
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
const char * _lv_demo_music_get_title(uint32_t track_id)
|
||
|
{
|
||
|
if(track_id >= sizeof(title_list) / sizeof(title_list[0])) return NULL;
|
||
|
return title_list[track_id];
|
||
|
}
|
||
|
|
||
|
const char * _lv_demo_music_get_artist(uint32_t track_id)
|
||
|
{
|
||
|
if(track_id >= sizeof(artist_list) / sizeof(artist_list[0])) return NULL;
|
||
|
return artist_list[track_id];
|
||
|
}
|
||
|
|
||
|
const char * _lv_demo_music_get_genre(uint32_t track_id)
|
||
|
{
|
||
|
if(track_id >= sizeof(genre_list) / sizeof(genre_list[0])) return NULL;
|
||
|
return genre_list[track_id];
|
||
|
}
|
||
|
|
||
|
uint32_t _lv_demo_music_get_track_length(uint32_t track_id)
|
||
|
{
|
||
|
if(track_id >= sizeof(time_list) / sizeof(time_list[0])) return 0;
|
||
|
return time_list[track_id];
|
||
|
}
|
||
|
|
||
|
/**********************
|
||
|
* STATIC FUNCTIONS
|
||
|
**********************/
|
||
|
|
||
|
#if LV_DEMO_MUSIC_AUTO_PLAY
|
||
|
static void auto_step_cb(lv_timer_t * t)
|
||
|
{
|
||
|
LV_UNUSED(t);
|
||
|
static uint32_t state = 0;
|
||
|
|
||
|
#if LV_DEMO_MUSIC_LARGE
|
||
|
const lv_font_t * font_small = &lv_font_montserrat_22;
|
||
|
const lv_font_t * font_large = &lv_font_montserrat_32;
|
||
|
#else
|
||
|
const lv_font_t * font_small = &lv_font_montserrat_12;
|
||
|
const lv_font_t * font_large = &lv_font_montserrat_16;
|
||
|
#endif
|
||
|
|
||
|
switch(state) {
|
||
|
case 5:
|
||
|
_lv_demo_music_album_next(true);
|
||
|
break;
|
||
|
|
||
|
case 6:
|
||
|
_lv_demo_music_album_next(true);
|
||
|
break;
|
||
|
case 7:
|
||
|
_lv_demo_music_album_next(true);
|
||
|
break;
|
||
|
case 8:
|
||
|
_lv_demo_music_play(0);
|
||
|
break;
|
||
|
#if LV_DEMO_MUSIC_SQUARE || LV_DEMO_MUSIC_ROUND
|
||
|
case 11:
|
||
|
lv_obj_scroll_by(ctrl, 0, -LV_VER_RES, LV_ANIM_ON);
|
||
|
break;
|
||
|
case 13:
|
||
|
lv_obj_scroll_by(ctrl, 0, -LV_VER_RES, LV_ANIM_ON);
|
||
|
break;
|
||
|
#else
|
||
|
case 12:
|
||
|
lv_obj_scroll_by(ctrl, 0, -LV_VER_RES, LV_ANIM_ON);
|
||
|
break;
|
||
|
#endif
|
||
|
case 15:
|
||
|
lv_obj_scroll_by(list, 0, -300, LV_ANIM_ON);
|
||
|
break;
|
||
|
case 16:
|
||
|
lv_obj_scroll_by(list, 0, 300, LV_ANIM_ON);
|
||
|
break;
|
||
|
case 18:
|
||
|
_lv_demo_music_play(1);
|
||
|
break;
|
||
|
case 19:
|
||
|
lv_obj_scroll_by(ctrl, 0, LV_VER_RES, LV_ANIM_ON);
|
||
|
break;
|
||
|
#if LV_DEMO_MUSIC_SQUARE || LV_DEMO_MUSIC_ROUND
|
||
|
case 20:
|
||
|
lv_obj_scroll_by(ctrl, 0, LV_VER_RES, LV_ANIM_ON);
|
||
|
break;
|
||
|
#endif
|
||
|
case 30:
|
||
|
_lv_demo_music_play(2);
|
||
|
break;
|
||
|
case 40: {
|
||
|
lv_obj_t * bg = lv_layer_top();
|
||
|
lv_obj_set_style_bg_color(bg, lv_color_hex(0x6f8af6), 0);
|
||
|
lv_obj_set_style_text_color(bg, lv_color_white(), 0);
|
||
|
lv_obj_set_style_bg_opa(bg, LV_OPA_COVER, 0);
|
||
|
lv_obj_fade_in(bg, 400, 0);
|
||
|
lv_obj_t * dsc = lv_label_create(bg);
|
||
|
lv_obj_set_style_text_font(dsc, font_small, 0);
|
||
|
lv_label_set_text(dsc, "The average FPS is");
|
||
|
lv_obj_align(dsc, LV_ALIGN_TOP_MID, 0, 90);
|
||
|
|
||
|
lv_obj_t * num = lv_label_create(bg);
|
||
|
lv_obj_set_style_text_font(num, font_large, 0);
|
||
|
#if LV_USE_PERF_MONITOR
|
||
|
lv_label_set_text_fmt(num, "%d", lv_refr_get_fps_avg());
|
||
|
#endif
|
||
|
lv_obj_align(num, LV_ALIGN_TOP_MID, 0, 120);
|
||
|
|
||
|
lv_obj_t * attr = lv_label_create(bg);
|
||
|
lv_obj_set_style_text_align(attr, LV_TEXT_ALIGN_CENTER, 0);
|
||
|
lv_obj_set_style_text_font(attr, font_small, 0);
|
||
|
#if LV_DEMO_MUSIC_SQUARE || LV_DEMO_MUSIC_ROUND
|
||
|
lv_label_set_text(attr, "Copyright 2020 LVGL Kft.\nwww.lvgl.io | lvgl@lvgl.io");
|
||
|
#else
|
||
|
lv_label_set_text(attr, "Copyright 2020 LVGL Kft. | www.lvgl.io | lvgl@lvgl.io");
|
||
|
#endif
|
||
|
lv_obj_align(attr, LV_ALIGN_BOTTOM_MID, 0, -10);
|
||
|
break;
|
||
|
}
|
||
|
case 41:
|
||
|
lv_scr_load(lv_obj_create(NULL));
|
||
|
_lv_demo_music_pause();
|
||
|
break;
|
||
|
}
|
||
|
state++;
|
||
|
}
|
||
|
|
||
|
#endif /*LV_DEMO_MUSIC_AUTO_PLAY*/
|
||
|
|
||
|
#endif /*LV_USE_DEMO_MUSIC*/
|