mcu_hi3321_watch/tjd/ui/app/player/LyricParser.h
2025-05-26 20:15:20 +08:00

44 lines
1.0 KiB
C++

#ifndef LYRIC_PARSER_H
#define LYRIC_PARSER_H
#include <string>
#include <map>
typedef struct LyricPacket
{
// 歌词
std::string lyric;
// ms时间戳
int64_t pts = 0;
bool isEmpty() const { return lyric.empty() && pts == 0; }
} LyricPacket;
class LrcParser
{
public:
LrcParser() {};
~LrcParser() {};
bool parseLrc(const std::string &lrcFile);
LyricPacket readPacket();
int64_t duration() const;
/**
* @brief 利用给定的时间戳来寻求一个最接近的位置
* @param[in] timestamp 时间戳,单位ms
* @return 成功返回true,否则返回false
*/
bool seek(int64_t timestamp);
private:
int64_t duration_ = 0;
size_t currentIndex_ = 0;
std::string lrcData_;
std::map<int64_t, std::string> lyrics_;
std::map<int64_t, std::string>::iterator readIndex_;
size_t parseHeader();
void parseLine(const std::string &line);
std::string readLine();
};
#endif // LRCDECODER_H