Class: Musa::Neumas::Decoders::Decoder
- Inherits:
-
DifferentialDecoder
- Object
- ProtoDecoder
- DifferentialDecoder
- Musa::Neumas::Decoders::Decoder
- Defined in:
- lib/musa-dsl/neumas/neuma-decoder.rb
Overview
Stateful decoder with differential interpretation and transcription.
Maintains state (@base, @last) to interpret each neuma relative to
the previous one. Supports optional transcriptor for post-processing
(expanding ornaments, applying articulations, etc.).
Differential Interpretation
Each decoded event is interpreted relative to @last:
- Grade changes:
+2= last_grade + 2 - Duration changes:
_2= base_duration * 2
After decoding, @last is updated for next event.
Processing Pipeline
Input
Direct Known Subclasses
Instance Attribute Summary collapse
-
#base ⇒ Hash
Base state for decoder.
-
#transcriptor ⇒ Transcriptor?
Transcriptor for post-processing decoded events.
Instance Method Summary collapse
-
#apply(_action, on:) ⇒ Hash
Applies processed attributes to previous state.
-
#decode(attributes) ⇒ Hash+
Decodes attributes with differential interpretation and transcription.
-
#initialize(base, transcriptor: nil) ⇒ Decoder
constructor
Creates stateful decoder.
-
#subcontext ⇒ Decoder
Creates independent subcontext decoder.
Constructor Details
#initialize(base, transcriptor: nil) ⇒ Decoder
Creates stateful decoder.
214 215 216 217 218 219 |
# File 'lib/musa-dsl/neumas/neuma-decoder.rb', line 214 def initialize(base, transcriptor: nil) @base = base @last = base.clone @transcriptor = transcriptor end |
Instance Attribute Details
#base ⇒ Hash
Base state for decoder.
233 234 235 |
# File 'lib/musa-dsl/neumas/neuma-decoder.rb', line 233 def base @base end |
#transcriptor ⇒ Transcriptor?
Transcriptor for post-processing decoded events.
226 227 228 |
# File 'lib/musa-dsl/neumas/neuma-decoder.rb', line 226 def transcriptor @transcriptor end |
Instance Method Details
#apply(_action, on:) ⇒ Hash
Applies processed attributes to previous state.
Abstract method - must be implemented by subclasses to define how differential attributes are applied to produce absolute values.
310 311 312 |
# File 'lib/musa-dsl/neumas/neuma-decoder.rb', line 310 def apply(_action, on:) raise NotImplementedError end |
#decode(attributes) ⇒ Hash+
Decodes attributes with differential interpretation and transcription.
Pipeline:
- Process attributes
- Apply to last state
- Update last state
- Optional transcription
285 286 287 288 289 290 291 292 293 294 295 |
# File 'lib/musa-dsl/neumas/neuma-decoder.rb', line 285 def decode(attributes) result = apply process(attributes), on: @last @last = result.clone if @transcriptor @transcriptor.transcript(result) else result end end |
#subcontext ⇒ Decoder
Creates independent subcontext decoder.
Returns new decoder with same base state but independent @last tracking.
Used for nested structures like grace notes.
253 254 255 |
# File 'lib/musa-dsl/neumas/neuma-decoder.rb', line 253 def subcontext Decoder.new @base end |