Module: Brevity::Commands
- Included in:
- ScoreMaker
- Defined in:
- lib/brevity/commands/expr.rb,
lib/brevity/commands/part.rb,
lib/brevity/commands/meter.rb,
lib/brevity/commands/tempo.rb,
lib/brevity/commands/constants.rb
Constant Summary collapse
- ENV_START_TEMPO =
:start_tempo
- ENV_START_METER =
:start_meter
- ENV_EXPRS =
:exprs
- ENV_PARTS =
:parts
- ENV_TEMPO_CHANGES =
:tempo_changes
- ENV_METER_CHANGES =
:meter_changes
- EXPR_PARSER =
ExpressionParser.new
- LABEL_PARSER =
LabelParser.new
- DYNAMIC_PARSER =
DynamicParser.new
Instance Method Summary collapse
- #class_const(sym) ⇒ Object
- #expr(label_str, expr_str) ⇒ Object
- #meter(beats_per_measure_str, beat_dur_str) ⇒ Object
- #part(name_str, startdynamic_str, expr_str) ⇒ Object
- #tempo(beats_per_minute_str) ⇒ Object
Instance Method Details
#class_const(sym) ⇒ Object
14 15 16 |
# File 'lib/brevity/commands/constants.rb', line 14 def class_const sym self.class.const_get(sym) end |
#expr(label_str, expr_str) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 |
# File 'lib/brevity/commands/expr.rb', line 3 def expr label_str, expr_str label_node = LABEL_PARSER.parse(label_str) expr_node = EXPR_PARSER.parse(expr_str) if label_node.nil? raise ArgumentError, "Could not parse label string '#{label_str}'" end if expr_node.nil? raise ArgumentError, "Could not parse expr string '#{expr_str}'" end @env[ENV_EXPRS][label_node.to_key] = expr_node.primitives(@env[ENV_EXPRS]) end |
#meter(beats_per_measure_str, beat_dur_str) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/brevity/commands/meter.rb', line 3 def meter beats_per_measure_str, beat_dur_str beats_per_measure_node = PositiveIntegerParser.new.parse(beats_per_measure_str) beat_dur_node = DurationParser.new.parse(beat_dur_str) if beats_per_measure_node.nil? raise ArgumentError, "Could not parse beats per measure string '#{beats_per_measure_str}'" end if beat_dur_node.nil? raise ArgumentError, "Could not parse beat duration string '#{beat_dur_str}'" end @env[ENV_START_METER] = Music::Transcription::Meter.new( beats_per_measure_node.to_i, beat_dur_node.to_r ) end |
#part(name_str, startdynamic_str, expr_str) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/brevity/commands/part.rb', line 3 def part name_str, startdynamic_str, expr_str dyn_node = DYNAMIC_PARSER.parse(startdynamic_str.strip) expr_node = EXPR_PARSER.parse(expr_str) if dyn_node.nil? raise ArgumentError, "Could not parse start dynamic string '#{startdynamic_str}'" end if expr_node.nil? raise ArgumentError, "Could not parse expr string '#{expr_str}'" end startdyn = dyn_node.to_dynamic notes = [] dynamic_changes = {} offset = 0.to_r change_mark = nil expr_node.primitives(@env[ENV_EXPRS]).each do |p| case p when Music::Transcription::Note note = p notes.push note offset += note.duration when Numeric dynamic = p if change_mark.nil? dynamic_changes[offset] = Music::Transcription::Change::Immediate.new(dynamic) else duration = offset - change_mark dynamic_changes[change_mark] = Music::Transcription::Change::Gradual.new(dynamic,duration) change_mark = nil end when GradualNode change_mark = offset end end @env[ENV_PARTS][name_str] = Music::Transcription::Part.new( startdyn, notes: notes, dynamic_changes: dynamic_changes) end |
#tempo(beats_per_minute_str) ⇒ Object
3 4 5 6 7 8 9 10 11 |
# File 'lib/brevity/commands/tempo.rb', line 3 def tempo beats_per_minute_str bpm_node = PositiveIntegerParser.new.parse(beats_per_minute_str) if bpm_node.nil? raise ArgumentError, "Could not parse beats per minute string '#{beats_per_minute_str}'" end @env[ENV_START_TEMPO] = bpm_node.to_i end |