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.
183 184 185 186 187 188 |
# File 'lib/musa-dsl/transcription/transcription.rb', line 183 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.
167 168 169 |
# File 'lib/musa-dsl/transcription/transcription.rb', line 167 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.
212 213 214 215 216 217 218 219 220 221 222 223 224 |
# File 'lib/musa-dsl/transcription/transcription.rb', line 212 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 |