acid-drop/lib/lvgl/demos/music/lv_demo_music.c
2024-05-23 18:42:03 -04:00

254 lines
6.2 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*/