Class: Clef::Core::Measure

Inherits:
Object
  • Object
show all
Defined in:
lib/clef/core/measure.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(number, time_signature: nil) ⇒ Measure

Returns a new instance of Measure.

Parameters:

  • number (Integer)
  • time_signature (TimeSignature, nil) (defaults to: nil)

Raises:

  • (ArgumentError)


11
12
13
14
15
16
17
# File 'lib/clef/core/measure.rb', line 11

def initialize(number, time_signature: nil)
  raise ArgumentError, "measure number must be positive" unless number.is_a?(Integer) && number.positive?

  @number = number
  @time_signature = time_signature
  @voices = {}
end

Instance Attribute Details

#clefObject

Returns the value of attribute clef.



7
8
9
# File 'lib/clef/core/measure.rb', line 7

def clef
  @clef
end

#key_signatureObject

Returns the value of attribute key_signature.



7
8
9
# File 'lib/clef/core/measure.rb', line 7

def key_signature
  @key_signature
end

#numberObject (readonly)

Returns the value of attribute number.



6
7
8
# File 'lib/clef/core/measure.rb', line 6

def number
  @number
end

#time_signatureObject

Returns the value of attribute time_signature.



7
8
9
# File 'lib/clef/core/measure.rb', line 7

def time_signature
  @time_signature
end

Instance Method Details

#overflowing_voice_idsArray<Symbol>

Returns:

  • (Array<Symbol>)


34
35
36
37
38
# File 'lib/clef/core/measure.rb', line 34

def overflowing_voice_ids
  return [] unless time_signature

  @voices.filter_map { |id, voice| id if voice.total_length > time_signature.measure_length }
end

#underfull_voice_idsArray<Symbol>

Returns:

  • (Array<Symbol>)


41
42
43
44
45
46
47
# File 'lib/clef/core/measure.rb', line 41

def underfull_voice_ids
  return [] unless time_signature

  @voices.filter_map do |id, voice|
    id if voice.total_length.positive? && voice.total_length < time_signature.measure_length
  end
end

#voice(id = :default) {|Voice| ... } ⇒ Voice

Parameters:

  • id (Symbol) (defaults to: :default)

Yields:

Returns:



22
23
24
25
26
# File 'lib/clef/core/measure.rb', line 22

def voice(id = :default)
  current = @voices[id] ||= Voice.new(id: id)
  yield(current) if block_given?
  current
end

#voicesHash<Symbol, Voice>

Returns:



29
30
31
# File 'lib/clef/core/measure.rb', line 29

def voices
  @voices.dup.freeze
end