Sha256: 6d7dd005ebccf50f63ba736e4cea6317643414631d9827eeef991befaa8cd31f
Contents?: true
Size: 1.36 KB
Versions: 3
Compression:
Stored size: 1.36 KB
Contents
module Music module Transcription class Meter include Validatable attr_reader :measure_duration, :beat_duration, :beats_per_measure def initialize beats_per_measure, beat_duration @beats_per_measure = beats_per_measure @beat_duration = beat_duration @measure_duration = beats_per_measure * beat_duration end def check_methods [ :check_beats_per_measure, :check_beat_duration ] end def check_beats_per_measure unless @beats_per_measure > 0 raise NonPositiveError, "beats per measure #{@beats_per_measure} is not positive" end unless @beats_per_measure.is_a?(Integer) raise NonIntegerError, "beats per measure #{@beats_per_measure} is not an integer" end end def check_beat_duration unless @beat_duration > 0 raise NonPositiveError, "beat duration #{@beat_duration} is not positive" end unless @beat_duration > 0 raise NonRationalError, "beat duration #{@beat_duration} is a rational" end end def ==(other) return (@beats_per_measure == other.beats_per_measure && @beat_duration == other.beat_duration) end def to_s if beat_duration.numerator == 1 num = beats_per_measure * beat_duration.numerator den = beat_duration.denominator "#{num}/#{den}" else "#{beats_per_measure}*#{beat_duration}" end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems