lib/midi_lyrics.rb in midi_lyrics-0.0.8 vs lib/midi_lyrics.rb in midi_lyrics-0.0.9

- old
+ new

@@ -26,10 +26,14 @@ def duration format_time(duration_in_pulses) end + def end_in_pulses + start_in_pulses + duration_in_pulses + end + def blank? text.gsub('-', '').strip == "" end def similar_to?(another) @@ -71,10 +75,11 @@ load_lyrics remove_heading_blank_lines consolidate_empty_syllables remove_lines_trailing_spaces remove_repeating unless repeating + fix_durations @lyrics.collect(&:as_json) end private def read_sequence_from_file @@ -138,22 +143,17 @@ def consolidate_empty_syllables new_lyrics = [] @lyrics.each do |l| if l.blank? - # if new_lyrics.last - if new_lyrics.last.blank? - new_lyrics.last.text += l.text - else - l.start_in_pulses = new_lyrics.last.start_in_pulses + new_lyrics.last.duration_in_pulses - l.duration_in_pulses = 0.0 - new_lyrics << l - end - # else - # l.duration_in_pulses = 0.0 - # new_lyrics << l - # end + if new_lyrics.last.blank? + new_lyrics.last.text += l.text + else + l.start_in_pulses = new_lyrics.last.start_in_pulses + new_lyrics.last.duration_in_pulses + l.duration_in_pulses = 0.0 + new_lyrics << l + end else new_lyrics << l end end @lyrics = new_lyrics @@ -183,9 +183,21 @@ end def remove_repeating if half_is_equal merge_half_lyrics + end + end + + def lyric_starting_at time_in_pulses + @lyrics.find{ |l| l.duration_in_pulses != 0.0 && l.start_in_pulses == time_in_pulses } + end + + def fix_durations + @lyrics.each do |lyric| + while @durations.has_key?(lyric.end_in_pulses) && lyric_starting_at(lyric.end_in_pulses).nil? + lyric.duration_in_pulses += @durations[lyric.end_in_pulses] + end end end end end