Class: Clef::Parser::DSL::StaffBuilder
- Inherits:
-
Object
- Object
- Clef::Parser::DSL::StaffBuilder
show all
- Includes:
- BlockEvaluation
- Defined in:
- lib/clef/parser/dsl.rb
Instance Method Summary
collapse
Constructor Details
Returns a new instance of StaffBuilder.
103
104
105
106
107
108
|
# File 'lib/clef/parser/dsl.rb', line 103
def initialize(staff)
@staff = staff
@current_measure = nil
@next_measure_number = 1
@lyrics = []
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
in the class Clef::Parser::DSL::BlockEvaluation
Instance Method Details
#bar ⇒ Object
151
152
153
|
# File 'lib/clef/parser/dsl.rb', line 151
def bar
advance_measure
end
|
#instrument(program) ⇒ Object
123
124
125
|
# File 'lib/clef/parser/dsl.rb', line 123
def instrument(program)
@staff.set_metadata(:midi_program, program)
end
|
#key(tonic, mode = :major) ⇒ Object
112
113
114
|
# File 'lib/clef/parser/dsl.rb', line 112
def key(tonic, mode = :major)
@staff.key_signature = Clef::Core::KeySignature.new(tonic, mode)
end
|
#lyrics(voice_id, text) ⇒ Object
167
168
169
170
|
# File 'lib/clef/parser/dsl.rb', line 167
def lyrics(voice_id, text)
@lyrics << Clef::Notation::Lyric.new(voice_id, text)
@staff.set_metadata(:lyrics, @lyrics)
end
|
#measure(number = nil, &block) ⇒ Object
156
157
158
159
160
161
162
163
|
# File 'lib/clef/parser/dsl.rb', line 156
def measure(number = nil, &block)
target_number = number || @next_measure_number
@current_measure = existing_measure(target_number) || new_measure(target_number)
evaluate_block(self, &block)
@current_measure
ensure
advance_measure
end
|
#play(lilypond_string) ⇒ Object
139
140
141
142
143
144
145
146
147
148
149
|
# File 'lib/clef/parser/dsl.rb', line 139
def play(lilypond_string)
segments = split_measures(lilypond_string)
voice_builder = nil
segments.each_with_index do |segment, idx|
measure = ensure_measure
voice_builder ||= VoiceBuilder.new(measure.voice(:default))
voice_builder.use_voice(measure.voice(:default)).notes(segment)
validate_measure_overflow!(measure)
advance_measure if idx < segments.length - 1
end
end
|
#time(numerator, denominator) ⇒ Object
118
119
120
|
# File 'lib/clef/parser/dsl.rb', line 118
def time(numerator, denominator)
@staff.time_signature = Clef::Core::TimeSignature.new(numerator, denominator)
end
|
#voice(id = :default, &block) ⇒ Object
128
129
130
131
132
133
134
135
136
|
# File 'lib/clef/parser/dsl.rb', line 128
def voice(id = :default, &block)
measure = ensure_measure
voice = measure.voice(id)
return voice unless block
evaluate_block(VoiceBuilder.new(voice), &block)
validate_measure_overflow!(measure)
voice
end
|