diff options
-rw-r--r-- | src/base/song.cpp | 16 | ||||
-rw-r--r-- | src/base/song.hpp | 8 |
2 files changed, 20 insertions, 4 deletions
diff --git a/src/base/song.cpp b/src/base/song.cpp index 1b904810..e1b39360 100644 --- a/src/base/song.cpp +++ b/src/base/song.cpp @@ -256,20 +256,28 @@ namespace usdx // return encoding; // } + int Song::get_relative_beat(void) + { + if (relative) + return get_last_lyric_line()->get_start(); + + return 0; + } + void Song::new_bpm(const int beat, const float new_bpm) { - bpm.push_back(new BPM(beat, new_bpm)); + bpm.push_back(new BPM(beat + get_relative_beat(), new_bpm)); } void Song::new_line(const int line_out, const int line_in) { - get_last_lyric_line()->set_end(line_out); - create_new_lyric_line(line_in); + get_last_lyric_line()->set_end(line_out + get_relative_beat()); + create_new_lyric_line(line_in + get_relative_beat()); } void Song::new_note(const char type, const int beat, const int length, const int height, const std::string& lyric) { - get_last_lyric_line()->add_word(new LyricWord(type, beat, length, height, lyric)); + get_last_lyric_line()->add_word(new LyricWord(type, beat + get_relative_beat(), length, height, lyric)); } }; diff --git a/src/base/song.hpp b/src/base/song.hpp index af613370..91d22742 100644 --- a/src/base/song.hpp +++ b/src/base/song.hpp @@ -83,6 +83,14 @@ namespace usdx LyricLine* get_last_lyric_line(void); LyricLine* create_new_lyric_line(int start); + + /** + * Used to calculate the absolute beat times in relative song + * mode. + * + * @return Start beat time from last line. + */ + int get_relative_beat(void); public: Song(const std::string& filename, const std::map<std::string, std::string>& header); virtual ~Song(void); |