class Music::Transcription::Program
Program
defines markers (by starting note offset) and subprograms (list which markers are played).
@author James Tunnell
Attributes
segments[RW]
Public Class Methods
new(segments = [])
click to toggle source
# File lib/music-transcription/model/program.rb, line 13 def initialize segments = [] @segments = segments end
unpack(packing)
click to toggle source
# File lib/music-transcription/packing/program_packing.rb, line 11 def self.unpack packing segments = packing.map {|str| Segment.parse(str) } new segments end
Public Instance Methods
==(other)
click to toggle source
# File lib/music-transcription/model/program.rb, line 26 def == other return other.respond_to?(:segments) && @segments == other.segments end
check_methods()
click to toggle source
# File lib/music-transcription/model/program.rb, line 17 def check_methods [:ensure_increasing_segments, :ensure_nonnegative_segments] end
ensure_increasing_segments()
click to toggle source
# File lib/music-transcription/model/program.rb, line 39 def ensure_increasing_segments non_increasing = @segments.select {|seg| seg.first >= seg.last } if non_increasing.any? raise NonIncreasingError, "Non-increasing segments found #{non_increasing}" end end
ensure_nonnegative_segments()
click to toggle source
# File lib/music-transcription/model/program.rb, line 46 def ensure_nonnegative_segments negative = @segments.select {|seg| seg.first < 0 || seg.last < 0 } if negative.any? raise NegativeError, "Segments #{negative} have negative values" end end
include?(offset)
click to toggle source
# File lib/music-transcription/model/program.rb, line 30 def include? offset @segments.each do |segment| if segment.include?(offset) return true end end return false end
length()
click to toggle source
@return [Float] the sum of all program segment lengths
# File lib/music-transcription/model/program.rb, line 22 def length segments.inject(0.0) { |length, segment| length + (segment.last - segment.first) } end
pack()
click to toggle source
# File lib/music-transcription/packing/program_packing.rb, line 5 def pack @segments.map do |seg| seg.to_s end end