PonyPlayer
lyrics.h
浏览该文件的文档.
1//******************************************
2// Author : Yuwei Huang
3// Created On : Thu Feb 08 2018
4// File : lyrics.h
5//******************************************
6
7#ifndef LIBLRC_LYRICS_H
8#define LIBLRC_LYRICS_H
9
10#include <cstdint>
11#include <string>
12#include <vector>
13
14namespace lrc {
15
16class Lyrics {
17 public:
18 struct Metadata {
19 std::string artist;
20 std::string album;
21 std::string title;
22 std::string lyricsWriter;
23 std::string fileCreator;
24 int32_t adjustment; // in milliseconds, + shifts time up, - shifts down.
25 };
26
27 static const int32_t kEndTimeNever;
28
29 struct LyricLine {
30 int32_t start_time; // in milliseconds.
31
32 // kEndTimeNever if it is at the end of the song.
33 int32_t end_time;
34
35 std::string lyric;
36 };
37
38 using ConstLyricIterator = std::vector<LyricLine>::const_iterator;
39
40 // Lyric duration is not required and will be automatically filled.
41 // Please DO NOT include offset adjustment in LyricLine. They will be adjusted
42 // by this class.
43 Lyrics(const Metadata& metadata, std::vector<LyricLine>&& lyrics);
44 ~Lyrics();
45
46 const Metadata& GetMetadata() const;
47
48 // Returns the LyricLine at the given offset. Returns a null LyricLine (all
49 // fields are empty) if offset < 0 or offset >= kEndTimeNever.
50 // Random position lookup cost is O(log(n)); lookup with linearly increasing
51 // offset has a cost of O(1) for each lookup.
52 const LyricLine& LyricAt(int32_t offset);
53
54 // Returns the lyric iterator at the given offset. Caller can use it to query
55 // lyrics before or after the current lyric. Returns IteratorEnd if offset < 0
56 // or offset >= kEndTimeNever.
57 ConstLyricIterator LyricIteratorAt(int32_t offset);
58
61
62 private:
63 Metadata metadata_;
64 std::vector<LyricLine> lyrics_;
65 std::vector<LyricLine>::iterator current_lyric_;
66};
67
68} // namespace lrc
69
70#endif // LIBLRC_LYRICS_H
Definition: lyrics.h:16
const LyricLine & LyricAt(int32_t offset)
Definition: lyrics.cc:84
static const int32_t kEndTimeNever
Definition: lyrics.h:27
ConstLyricIterator IteratorEnd() const
Definition: lyrics.cc:131
~Lyrics()
Definition: lyrics.cc:78
std::vector< LyricLine >::const_iterator ConstLyricIterator
Definition: lyrics.h:38
ConstLyricIterator IteratorBegin() const
Definition: lyrics.cc:127
Lyrics(const Metadata &metadata, std::vector< LyricLine > &&lyrics)
Definition: lyrics.cc:50
ConstLyricIterator LyricIteratorAt(int32_t offset)
Definition: lyrics.cc:89
const Metadata & GetMetadata() const
Definition: lyrics.cc:80
Definition: lrc_parser.h:15
Definition: lyrics.h:29
int32_t start_time
Definition: lyrics.h:30
std::string lyric
Definition: lyrics.h:35
int32_t end_time
Definition: lyrics.h:33
Definition: lyrics.h:18
std::string artist
Definition: lyrics.h:19
std::string title
Definition: lyrics.h:21
std::string lyricsWriter
Definition: lyrics.h:22
int32_t adjustment
Definition: lyrics.h:24
std::string album
Definition: lyrics.h:20
std::string fileCreator
Definition: lyrics.h:23