lib/music-transcription/note.rb in music-transcription-0.5.6 vs lib/music-transcription/note.rb in music-transcription-0.5.7

- old
+ new

@@ -54,33 +54,41 @@ # Produce an identical Note object. def clone Marshal.load(Marshal.dump(self)) end - def transpose_pitches_only pitch_diff + def transpose_pitches_only diff self.clone.transpose_pitches! pitch_diff, transpose_link end - def transpose_pitches_only! pitch_diff - @pitches = @pitches.map {|pitch| pitch + pitch_diff} - new_links = {} - @links.each_pair do |k,v| - new_links[k + pitch_diff] = v - end - @links = new_links - return self + def transpose_pitches_only! diff + self.transpose! diff, false end - def transpose_pitches_and_links pitch_diff - self.clone.transpose_pitches_and_links! pitch_diff + def transpose_pitches_and_links diff + self.clone.transpose_pitches_and_links! diff end - def transpose_pitches_and_links! pitch_diff - @pitches = @pitches.map {|pitch| pitch + pitch_diff} + def transpose_pitches_and_links! diff + self.transpose! diff, true + end + + def transpose diff, transpose_links + self.clone.transpose! diff, transpose_links + end + + def transpose! diff, transpose_link_targets + unless diff.is_a?(Pitch) + diff = Pitch.make_from_semitone(diff) + end + + @pitches = @pitches.map {|pitch| pitch + diff} new_links = {} @links.each_pair do |k,v| - v.target_pitch += pitch_diff - new_links[k + pitch_diff] = v + if transpose_link_targets + v.target_pitch += diff + end + new_links[k + diff] = v end @links = new_links return self end