Class: Musa::Transcription::Transcriptor
- Defined in:
- lib/musa-dsl/transcription/transcription.rb
Overview
Main transcription orchestrator.
Chains multiple feature transcriptors to process GDV events through a transformation pipeline. Each transcriptor in the chain processes specific musical features (ornaments, articulations, etc.).
Processing
The transcriptor applies each feature processor in sequence:
- First transcriptor processes event
- Result passed to second transcriptor
- Continue through chain
- Final result returned
Array Handling
If a transcriptor returns an array (e.g., expanding one note to many), subsequent transcriptors process each element and results are flattened.
Instance Attribute Summary collapse
-
#transcriptors ⇒ Array<FeatureTranscriptor>
readonly
Returns the transcriptor chain.
Instance Method Summary collapse
-
#initialize(transcriptors = nil, base_duration: nil, tick_duration: nil) ⇒ Transcriptor
constructor
Creates transcriptor with specified feature processors.
-
#transcript(element) ⇒ Hash, ...
Transcribes GDV event(s) through the processor chain.
Constructor Details
#initialize(transcriptors = nil, base_duration: nil, tick_duration: nil) ⇒ Transcriptor
Creates transcriptor with specified feature processors.
190 191 192 193 194 195 |
# File 'lib/musa-dsl/transcription/transcription.rb', line 190 def initialize(transcriptors = nil, base_duration: nil, tick_duration: nil) @transcriptors = transcriptors || [] @base_duration = base_duration || 1/4r @tick_duration = tick_duration || 1/96r end |
Instance Attribute Details
#transcriptors ⇒ Array<FeatureTranscriptor> (readonly)
Returns the transcriptor chain.
173 174 175 |
# File 'lib/musa-dsl/transcription/transcription.rb', line 173 def transcriptors @transcriptors end |
Instance Method Details
#transcript(element) ⇒ Hash, ...
Transcribes GDV event(s) through the processor chain.
Applies each transcriptor in sequence. Handles both single events and arrays of events, flattening results when transcriptors expand events.
219 220 221 222 223 224 225 226 227 228 229 230 231 |
# File 'lib/musa-dsl/transcription/transcription.rb', line 219 def transcript(element) @transcriptors.each do |transcriptor| if element if element.is_a?(Array) element = element.collect { |element_i| transcriptor.transcript(element_i, base_duration: @base_duration, tick_duration: @tick_duration) }.flatten(1) else element = transcriptor.transcript(element, base_duration: @base_duration, tick_duration: @tick_duration) end end end element end |