Class: Musa::Neumas::Decoders::NeumaDifferentialDecoder
- Inherits:
-
DifferentialDecoder
- Object
- ProtoDecoder
- DifferentialDecoder
- Musa::Neumas::Decoders::NeumaDifferentialDecoder
- Defined in:
- lib/musa-dsl/neumas/neuma-gdvd-decoder.rb
Overview
GDVD neuma decoder for preserving differential format.
Simple decoder that processes GDVD (Grade-Duration-Velocity-Differential) neumas without converting to absolute GDV format. Useful when you need to work with differential values directly or perform intermediate processing.
GDVD Format
GDVD maintains relative/differential values:
{
grade_diff: +2, # Relative grade change
duration_factor: 2, # Duration multiplier
velocity_factor: 1.2, # Velocity multiplier
modifiers: {...} # Ornaments, articulations
}
Use Cases
- Intermediate processing: Transform neumas before converting to GDV
- Pattern analysis: Analyze melodic intervals without absolute pitch
- Transposition: Work with relative values for easy transposition
vs NeumaDecoder
- NeumaDifferentialDecoder: Keeps differential format (GDVD)
- NeumaDecoder: Converts to absolute format (GDV) using scale
Instance Method Summary collapse
-
#initialize(base_duration: nil) ⇒ NeumaDifferentialDecoder
constructor
Creates differential GDVD decoder.
-
#process(gdvd) ⇒ Hash
Processes GDVD by setting base_duration.
Constructor Details
#initialize(base_duration: nil) ⇒ NeumaDifferentialDecoder
Creates differential GDVD decoder.
73 74 75 |
# File 'lib/musa-dsl/neumas/neuma-gdvd-decoder.rb', line 73 def initialize(base_duration: nil) @base_duration = base_duration || Rational(1,4) end |
Instance Method Details
#process(gdvd) ⇒ Hash
Processes GDVD by setting base_duration.
Clones GDVD and sets base_duration for duration calculations. Does not convert to absolute values.
92 93 94 |
# File 'lib/musa-dsl/neumas/neuma-gdvd-decoder.rb', line 92 def process(gdvd) gdvd.clone.tap { |_| _.base_duration = @base_duration } end |