Class: Musa::Transcription::Transcriptor

Inherits:
Object
  • Object
show all
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:

  1. First transcriptor processes event
  2. Result passed to second transcriptor
  3. Continue through chain
  4. 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.

Examples:

Create transcriptor chain

transcriptor = Musa::Transcription::Transcriptor.new(
  [Appogiatura.new, Trill.new, Staccato.new],
  base_duration: 1/4r,
  tick_duration: 1/96r
)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(transcriptors = nil, base_duration: nil, tick_duration: nil) ⇒ Transcriptor

Creates transcriptor with specified feature processors.

Examples:

Create MIDI transcriptor

transcriptor = Musa::Transcription::Transcriptor.new(
  Musa::Transcriptors::FromGDV::ToMIDI.transcription_set,
  base_duration: 1/4r,
  tick_duration: 1/96r
)

Parameters:

  • transcriptors (Array<FeatureTranscriptor>) (defaults to: nil)

    chain of feature processors

  • base_duration (Rational) (defaults to: nil)

    base duration unit (e.g., quarter note = 1/4)

  • tick_duration (Rational) (defaults to: nil)

    minimum tick duration (e.g., 1/96 for MIDI)



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

#transcriptorsArray<FeatureTranscriptor> (readonly)

Returns the transcriptor chain.

Returns:



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.

Examples:

Transcribe single event

gdv = { grade: 0, duration: 1r, tr: true }
result = transcriptor.transcript(gdv)
# => [{ grade: 1, duration: 1/16r }, { grade: 0, duration: 1/16r }, ...]

Transcribe array of events

gdvs = [
  { grade: 0, duration: 1r, mor: true },
  { grade: 2, duration: 1r }
]
results = transcriptor.transcript(gdvs)

Parameters:

Returns:



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