Module: Musa::Scales::Scales
- Defined in:
- lib/musa-dsl/music/scales.rb
Overview
Scale system registry.
The Scales module provides a central registry for scale systems, allowing access by symbol ID or method name.
Registration
Scale systems register themselves using Scales.register:
Scales.register EquallyTempered12ToneScaleSystem, default: true
Access Methods
By symbol:
Scales[:et12] # => EquallyTempered12ToneScaleSystem
Scales[:et12][440.0] # => ScaleSystemTuning with A=440Hz
By method name:
Scales.et12 # => EquallyTempered12ToneScaleSystem
Scales.et12[440.0] # => ScaleSystemTuning with A=440Hz
Default system:
Scales.default_system # => The default scale system
Scales.default_system.default_tuning # => Default tuning (A=440Hz)
Class Method Summary collapse
-
.default_system ⇒ Class<ScaleSystem>
Returns the default scale system.
-
.extend_metadata(scale_kind_id, **metadata) ⇒ Hash
Convenience method to extend metadata for a scale kind by ID.
-
.get(id) ⇒ Class<ScaleSystem>
(also: [])
Retrieves a registered scale system by ID.
-
.register(scale_system, default: nil) ⇒ self
Registers a scale system.
Class Method Details
.default_system ⇒ Class<ScaleSystem>
Returns the default scale system.
150 151 152 |
# File 'lib/musa-dsl/music/scales.rb', line 150 def self.default_system @default_scale_system end |
.extend_metadata(scale_kind_id, **metadata) ⇒ Hash
Convenience method to extend metadata for a scale kind by ID.
Finds the ScaleKind class by its ID symbol and adds custom metadata to it. This is a shortcut for accessing the class directly and calling extend_metadata.
169 170 171 172 173 174 175 176 177 |
# File 'lib/musa-dsl/music/scales.rb', line 169 def self.(scale_kind_id, **) system = default_system raise KeyError, "No default scale system registered" unless system klass = system.scale_kind_class(scale_kind_id) raise KeyError, "Scale kind :#{scale_kind_id} not found" unless klass klass.(**) end |
.get(id) ⇒ Class<ScaleSystem> Also known as: []
Retrieves a registered scale system by ID.
134 135 136 137 138 |
# File 'lib/musa-dsl/music/scales.rb', line 134 def self.get(id) raise KeyError, "Scale system :#{id} not found" unless @scale_systems.key?(id) @scale_systems[id] end |
.register(scale_system, default: nil) ⇒ self
Registers a scale system.
Makes the scale system available via symbol lookup and dynamic method. Optionally marks it as the default system.
113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/musa-dsl/music/scales.rb', line 113 def self.register(scale_system, default: nil) @scale_systems ||= {} @scale_systems[scale_system.id] = scale_system @default_scale_system = scale_system if default self.class.define_method scale_system.id do scale_system end self end |