KT25-0812_82A-UART/include_lib/system/ui/ui/lyrics.h
2025-08-12 18:09:23 +08:00

111 lines
3.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _LYRICS_H_
#define _LYRICS_H_
#include "typedef.h"
#include "system/fs/fs.h"
#define LRC_SIZEOF_ALIN(var, al) ((((var)+(al)-1)/(al))*(al))
//类型声明区
typedef struct _TIME_LABEL { /*时间标签信息[mm:ss.ms]*/
u16 dbtime_s; //time of label,unit:s
u8 btime_100ms; //time of label,unit:ms
u8 btext_len; //the length of lrc content, 占用的实际字节数
u32 wline_pos; //for record next (byte addr) after the (real label of time)
} TIME_LABEL;
typedef struct __LRC_FILE_IO {
u32(*seek)(FILE *file, int offset, int orig);
u32(*read)(FILE *file, void *buf, u32 len);
} LRC_FILE_IO;
typedef struct _LABEL_INFO { /*标签处理后信息*/
u16 dbtime_base; //first of time
u16 dbtime_limit; //end of time
u8 base_100ms; //first of time
u8 limit_100ms; //first of time
u16 dblabel_cnt; //(real label of time) count
TIME_LABEL *g_plabel_buf; //解析过程中时间标签存储buf
u8 *plabel_buf_tmp;
u16 plabel_buf_len; //解析过程中时间标签存储buf长度
} LABEL_INFO;
typedef struct _SORTING_INFO { /*文件解析信息*/
u16 dbnow_fp_addr;//current addr of file pointer
u8 bdata_len; //the length of lrc content
u8 bis_next_file;//jump to next file
} SORTING_INFO;
typedef struct __LRC_FILE {
void *hdl;
LRC_FILE_IO *_io;
} LRC_FILE;
typedef struct _LRC_INFO { ///</*lrc显示信息*/
u8 coding_type; ///<歌词unicode编码格式
///<显示相关的
u8 bis_lrc_update; ///<lrc显示歌词更新标志
u8 broll_speed_control; ///<lrc显示滚动速度控制标志
u8 blcd_roll_speed; ///<lcd显示歌词内容滚动速度
u8 content_len; ///<当前歌词内容长度
u8 lrc_data_len; ///<实际歌词显示内容长度
//CFG
u16 blrc_buf_len; ///<lrc显示内容buf长度,配置
u8 *blrc_buf; ///<lrc显示内容buf地址
///<file相关的,CFG
u8 *lrc_read_buf; ///<lrc读取数据buffer
LRC_FILE file; ///lrc文件操作控制
/* void *lrc_file_hdl; ///<lrc文件句柄 */
u32 cur_faddr; ///当前文件文件位置
u16 once_read_len; ///<一次读取的长度,需要配置
u16 real_len; ///<真实一次读取到的数据长度
u16 data_len_count; ///<缓存中已分析的数据offset
u16 label_id; ///<时间标签读取id0~
u16 lrc_label_len; ///<解析后标签数据长度
bool bfirst_lable; ///<第一个时间标签标记
bool blast_lable; ///<最后一个时间标签标记
u8 lrc_text_id; ///text id
u8 read_next_lrc_flag; ///是否预读下一条歌词lrc
u8 save_flash;
SORTING_INFO *sorting; ///<歌词文件解析信息
LABEL_INFO *lab_info; ///<标签处理后信息
void (*roll_speed_ctrl_cb)(u8 lrc_len, u32 time_gap, u8 *roll_speed);///翻页速度控制
void (*clr_lrc_disp_cb)(void);
} LRC_INFO;
typedef struct __LRC_CFG {
u16 once_read_len;///一次读取长度配置
u16 once_disp_len;///一次显示缓存长度配置
u16 label_temp_buf_len;///时间标签缓存总长度配置
u8 lrc_text_id; ///text id
u8 read_next_lrc_flag; ///是否预读下一条歌词lrc
u8 enable_save_lable_to_flash;//使能保存时间标签到flash主要是解决长歌词文件不支持问题
void (*roll_speed_ctrl_cb)(u8 lrc_len, u32 time_gap, u8 *roll_speed);///速度控制配置
void (*clr_lrc_disp_cb)(void);///清屏回调
} LRC_CFG;
extern void lrc_destroy(void);
extern int lrc_param_init(LRC_CFG *cfg, u8 *lrc_info_buf);
extern bool lrc_analysis(void *lrc_handle, const LRC_FILE_IO *file_io);
extern bool lrc_get(u16 dbtime_s, u8 btime_100ms);
extern bool lrc_show(int text_id,u16 dbtime_s, u8 btime_100ms);
extern void lrc_label_save_to_flash_init(u32 addr, u32 len, u32 base_addr);
#endif