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