theHarmonicAlgorithm-3.0.0: Real-time harmonic progression generation for TidalCycles live performance
Safe HaskellSafe-Inferred
LanguageHaskell2010

Harmonic.Rules.Types.Scale

Description

Vocabulary for the octatripentatonic framework: pentatonic families, the 28-mode taxonomy, the eleven canonical strata, and the twelve curated tristrata. E-minor-base chroma throughout.

Synopsis

Pentatonic families

data PentaFamily Source #

Pentatonic family: the four ancestral pentatonic shapes recognised throughout the legacy theory (major, Okinawan, Iwato, Kumoi).

Constructors

MajorPenta 
Okinawan 
Iwato 
Kumoi 

Instances

Instances details
Bounded PentaFamily Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Enum PentaFamily Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Read PentaFamily Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Show PentaFamily Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Eq PentaFamily Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Ord PentaFamily Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

familyChroma :: PentaFamily -> [PitchClass] Source #

Chroma (pitch-class set) for a pentatonic family, rooted at 0.

data Pentatonic Source #

A pentatonic scale is a family + a root pitch class.

pentaChroma :: Pentatonic -> [PitchClass] Source #

Concrete chroma of a rooted pentatonic.

pentaFromChroma :: [PitchClass] -> Maybe Pentatonic Source #

Reverse lookup: given a 5-PC set, identify its family+root if any.

Mode taxonomy

data ModeQuality Source #

28-mode taxonomy ported from the legacy toMode function.

Instances

Instances details
Bounded ModeQuality Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Enum ModeQuality Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Read ModeQuality Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Show ModeQuality Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Eq ModeQuality Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Ord ModeQuality Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

data Mode Source #

A mode is a quality rooted at a pitch class.

Constructors

Mode 

Instances

Instances details
Show Mode Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Methods

showsPrec :: Int -> Mode -> ShowS #

show :: Mode -> String #

showList :: [Mode] -> ShowS #

Eq Mode Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Methods

(==) :: Mode -> Mode -> Bool #

(/=) :: Mode -> Mode -> Bool #

Ord Mode Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Methods

compare :: Mode -> Mode -> Ordering #

(<) :: Mode -> Mode -> Bool #

(<=) :: Mode -> Mode -> Bool #

(>) :: Mode -> Mode -> Bool #

(>=) :: Mode -> Mode -> Bool #

max :: Mode -> Mode -> Mode #

min :: Mode -> Mode -> Mode #

modeChroma :: Mode -> [PitchClass] Source #

Concrete chroma of a rooted mode.

classifyMode :: [PitchClass] -> Maybe Mode Source #

Identify a 7-PC set as a mode by trying each element as root and pattern-matching against the 28 templates.

classifyModeAt :: Int -> [PitchClass] -> Maybe Mode Source #

Pinned-root classifier: identify a 7-PC set as a mode rooted on the given pitch class, exhaustively checking the 28 mode quality patterns. Mirrors legacy toMode semantics (root explicit, not inferred). Returns Nothing when the set isn't 7 unique PCs or when no quality matches the shifted interval pattern.

data ScaleFamily Source #

Each of the 28 ModeQuality constructors belongs to exactly one of four parent scale families.

Instances

Instances details
Bounded ScaleFamily Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Enum ScaleFamily Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Read ScaleFamily Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Show ScaleFamily Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Eq ScaleFamily Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Ord ScaleFamily Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

modeFamily :: ModeQuality -> ScaleFamily Source #

Map a ModeQuality to its parent scale family.

modeDegree :: ModeQuality -> Int Source #

Semitone offset of each mode's tonic from its parent scale's root. E.g. Aeolian sits on the 6th degree of major → 9 semitones above the parent root → modeDegree Aeolian = 9.

parentKey :: Mode -> (PitchClass, ScaleFamily) Source #

Parent (root pitch class, family) for any mode. E.g. parentKey (Mode Aeolian (P 1)) == (P 4, Major) — C# Aeolian is a mode of E Major.

showScaleFamily :: ScaleFamily -> String Source #

Render a scale family as a human-readable string.

showModeQuality :: ModeQuality -> String Source #

Legacy toMode mode-quality strings from theHarmonicAlgorithmLegacy/src/MusicData.hs. Preferred over the derived Show (which yields compact constructor names like IonS5) for musician-facing diagnostic output.

data ModeResult Source #

Result of a triad-anchored mode classification. ModeOk carries a normally classified mode; ModeInvalid carries the offending pair-union pitch classes when the union doesn't have exactly 7 unique PCs (only reachable under absStrata overrides that violate tristrata adjacency).

Instances

Instances details
Show ModeResult Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Eq ModeResult Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Strata

data StrataLabel Source #

The eleven canonical strata labels (Roman I–XI).

Constructors

I 
II 
III 
IV 
V 
VI 
VII 
VIII 
IX 
X 
XI 

Instances

Instances details
Bounded StrataLabel Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Enum StrataLabel Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Read StrataLabel Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Show StrataLabel Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Eq StrataLabel Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

Ord StrataLabel Source # 
Instance details

Defined in Harmonic.Rules.Types.Scale

strataChroma :: StrataLabel -> [PitchClass] Source #

Chroma (E-minor base) of each strata.

strataDissonance :: StrataLabel -> Int Source #

Prime-form dissonance of each strata (from the octatripentatonic spec).

allStrataLabels :: [StrataLabel] Source #

All strata labels in order.

Tristrata

data Tristrata Source #

A tristrata is three strata whose pair-unions are diatonic 7-note sets and whose three-way union is the canonical 8-note set [1,2,4,6,7,9,10,11].

Constructors

Tristrata 

validTristrata :: [Tristrata] Source #

Twelve canonical tristrata (records 1..12 of the octatripentatonic corpus).

tristrataIndex :: Int -> Tristrata Source #

Index into validTristrata using a 1-based ordinal.

tristrataStrataAt :: Tristrata -> Int -> StrataLabel Source #

Project a tristrata to its strata at position 1, 2, or 3.

tristrataDissonance :: Tristrata -> Int Source #

Sum of prime-form dissonances of the tristrata's three strata.

tristrataOf :: StrataLabel -> [(Tristrata, Int)] Source #

All (tristrata, position) pairs that contain a given strata.

tristrataModes :: Tristrata -> (Maybe Mode, Maybe Mode, Maybe Mode) Source #

Classify the three pair-unions of a tristrata as diatonic modes. Returns (mode(ts1∪ts2), mode(ts1∪ts3), mode(ts2∪ts3)).

Parsers

parseTristrataList :: String -> [Int] Source #

Parse a tristrata allow-list string to a list of 1-based indices. "" → empty (meaning "all allowed"); "5"[5]; "1 2 5"[1,2,5].

parseRelStrata :: String -> [Int] Source #

Parse a per-bar position sequence (elements ∈ {1,2,3}).

parseAbsStrata :: String -> [StrataLabel] Source #

Parse a per-bar absolute strata sequence. Accepts "I V X" or "[I V X]".