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