Files
zTC1/mico-os/platform/MCU/MX1101/peripherals/Libraries/inc/lrc.h
2025-03-11 15:54:45 +08:00

115 lines
4.0 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.
///////////////////////////////////////////////////////////////////////////////
// Mountain View Silicon Tech. Inc.
// Copyright 2012, Mountain View Silicon Tech. Inc., Shanghai, China
// All rights reserved.
// Filename: lrc.h
///////////////////////////////////////////////////////////////////////////////
#ifndef __LRC_H__
#define __LRC_H__
#ifdef __cplusplus
extern "C" {
#endif//__cplusplus
#pragma pack(1)
typedef enum _TEXT_ENCODE_TYPE
{
ENCODE_UNKNOWN,
ENCODE_ANSI,
ENCODE_UTF8,
ENCODE_UTF16, // unicode
ENCODE_UTF16_BIG,
ENCODE_GBK,
} TEXT_ENCODE_TYPE;
typedef struct _LRC_ROW
{
int32_t StartTime; // 起始时间点, ms
uint32_t Duration; // 当前歌词行持续时间, ms
uint8_t* LrcText; // 歌词指针,由外部分配内存
int16_t MaxLrcLen; // 歌词Buffer的内存大小
} LRC_ROW;
#pragma pack()
/**
* @brief 按文件全路径初始化Lrc Parser, 【注意】不支持同时打开多个Lrc Parser
* @param input CurFolder 当前文件夹句柄
* @param input FileName 歌词文件全路径
* @param input FileNameLen 歌词文件名长度
* @param input ReadBuffer Lrc Parser的工作内存空间由用户外部指定内存空间
* 如果设置为NULL默认由Parser内部分配
* @param input ReadBufSize Lrc Parser工作空间的大小如果工作空间由用户指定即ReadBuffer != NULL
* 则该值必须 >= 128如果工作空间由内部分配该值除了可设置 >= 128的值外
* 还可以设置为0表示Lrc Parser自己默认分配512Bytes的工作空间
* @return Success - TRUE, Fail - FALSE
*/
bool OpenLrcByFileName(FOLDER* CurFolder, uint8_t* FileName, uint32_t FileNameLen,
uint8_t* ReadBuffer, uint32_t ReadBufSize);
/**
* @brief 按文件ID号初始化Lrc Parser, 【注意】不支持同时打开多个Lrc Parser
* @param input CurFolder 当前文件夹句柄
* @param input FileId 歌词文件ID当CurFolder != NULL时表示全盘ID否则表示相对ID
* @param input ReadBuffer Lrc Parser的工作内存空间由用户外部指定内存空间
* 如果设置为NULL默认由Parser内部分配
* @param input ReadBufSize Lrc Parser工作空间的大小如果工作空间由用户指定即ReadBuffer != NULL
* 则该值必须 >= 128如果工作空间由内部分配该值除了可设置 >= 128的值外
* 还可以设置为0表示Lrc Parser自己默认分配512Bytes的工作空间
* @return Success - TRUE, Fail - FALSE
*/
bool OpenLrcByFileId(FOLDER* CurFolder, uint32_t FileId,
uint8_t* ReadBuffer, uint32_t ReadBufSize);
/**
* @brief 关闭Lrc Parser
* @return Success - TRUE, Fail - FALSE
*/
bool CloseLrcFile(void);
/**
* @brief 根据时间点获得某行歌词的实际长度,如果找不到该时间点对应的歌词则返回 -1
* @param input SeekTime 歌词时间点
* @param 当用户希望用动态内存的方式获得歌词时可在调用GetLrcInfo函数前
* 先调用本函数预先知道特定时间点的歌词长度,然后动态分配好装载歌词所需内存,
* 作为GetLrcInfo函数的输入参数
* @return 输出与时间点对应的歌词长度,如果找不到歌词,则返回-1
*/
int32_t GetLrcTextLength(uint32_t SeekTime);
/**
* @brief 根据时间点查询歌词信息,主要有歌词起始时间,持续时间,歌词内容
* @param input SeekTime 歌词时间点
* @param input TextOffset 歌词偏移 用于对很长的歌词分段获取,每次从指定偏移地址开始读一段歌词
* @param 该函数输出歌词时会根据指定的Buffer Size(LrcRow->MaxLrcLen)填充Buffer(LrcRow->LrcText)
* 如果Buffer Size小于实际的歌词长度则自动截断歌词
* 【注意】如果歌词过长,截断的歌词末尾字符需要判断汉字的完整性,
* 由于该接口值输出歌词原字符串,并且编码类型较多,所以汉字完整判断由接口调用者自行处理
* @return 歌词的实际长度,如果找不到歌词,返回-1
* 【注意】如果歌词实际长度大于歌词Buffer(LrcRow->LrcText)的最大长度(LrcRow->MaxLrcLen)
* 则返回值 > LrcRow->MaxLrcLen否则 返回值 <= LrcRow->MaxLrcLen
*/
int32_t GetLrcInfo(LRC_ROW* LrcRow, uint32_t SeekTime/*ms*/, uint32_t TextOffset);
/**
* @brief 获得当前歌词文件的编码格式
* @return 歌词的编码类型
*/
TEXT_ENCODE_TYPE GetLrcEncodeType(void);
#ifdef __cplusplus
}
#endif//__cplusplus
#endif