MCC
Loading...
Searching...
No Matches
MCC::Scales Namespace Reference

Reviewed catalog of named scales stored in program memory. More...

Enumerations

enum class  Id : uint8_t {
  Chromatic = 0 , ChromaticFlats , Major , Minor ,
  HarmonicMinor , MelodicMinor , HarmonicMajor , MajorPentatonic ,
  MinorPentatonic , MinorBlues , MajorBlues , Dorian ,
  Phrygian , Lydian , Mixolydian , Locrian ,
  Algerian , Arabic , Augmented , Pelog ,
  Byzantine , Chinese , Diminished , Egyptian ,
  EightToneSpanish , Enigmatic , Hindu , Hirajoshi ,
  Iwato , HungarianMinor , Japanese , Oriental ,
  WholeTone , RomanianMinor , SpanishGypsy , SuperLocrian ,
  Invalid = 0xFF
}
 Stable catalog identifier.
enum class  Family : uint8_t {
  Western , Modal , Symmetric , Exotic ,
  Invalid = 0xFF
}
 Grouping inherited from the historical catalog arrays.

Functions

ScalePattern Pattern (Id id) noexcept
 Returns the pattern of id, or the invalid pattern.
Family FamilyOf (Id id) noexcept
 Returns the family of id, or Family::Invalid.
size_t CopyName (Id id, char *destination, size_t capacity) noexcept
 Copies the canonical name of id with snprintf semantics and returns its length; an invalid id writes an empty string.
size_t CopyAlias (uint8_t index, char *destination, size_t capacity, Id &target) noexcept
 Copies alias index (0-based, below AliasCount) and returns its length, also reporting the scale it names; out of range writes an empty string and reports Id::Invalid.
Id Find (const char *name) noexcept
 Finds a scale by exact canonical name or alias; returns Id::Invalid when nothing matches.
Scale Make (NoteName root, Id id) noexcept
 Spells catalog entry id from root.

Variables

constexpr uint8_t Count = static_cast<uint8_t>(Id::SuperLocrian) + 1
 Number of catalog entries.
constexpr uint8_t AliasCount = 9
 Number of aliases.
constexpr size_t NameCapacity = 24
 Buffer size that fits every name and alias with its terminator.

Detailed Description

Reviewed catalog of named scales stored in program memory.

Every entry is read from flash on AVR through Foundation::Utils::Flash (SPEC-EMB-5); identifiers are stable and never reused (SPEC-SCL-4).