#ifndef LYRIC_PARSER_H #define LYRIC_PARSER_H #include #include 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 lyrics_; std::map::iterator readIndex_; size_t parseHeader(); void parseLine(const std::string &line); std::string readLine(); }; #endif // LRCDECODER_H