Arabic Maqām Network - TypeScript Library Documentation - v0.1.0
    Preparing search index...

    Interface Maqam

    Represents a concrete, tuning-system-specific maqam with actual pitch classes.

    This interface represents a maqam that has been "realized" within a specific tuning system, containing actual pitch classes with frequencies and intervallic relationships for both ascending and descending sequences. Unlike MaqamData (which contains only abstract note names), a Maqam interface instance is playable and can be used for audio synthesis and comprehensive analysis.

    Tahlil vs Taswir:

    • Tahlil (transposition: false): The original form of the maqam starting from its traditional root note (e.g., Maqam Farahfazza starting on yegah)
    • Taswir (transposition: true): A transposition of the maqam starting from a different pitch class while preserving intervallic relationships and directional characteristics (e.g., Maqam Farahfazza al-Rast starting on rast)

    Advanced Features:

    • Embedded ajnas analysis: Algorithm identifies all possible ajnās patterns within both ascending and descending sequences using cents tolerance matching
    • Automatic transposition: Both sequences and embedded ajnas are systematically transposed while maintaining authentic intervallic structure
    • Suyūr integration: Associated melodic development pathways are automatically transposed with note name conversion and jins/maqam reference adjustment

    The transposition algorithm separately processes both sequences, ensuring all required note names exist within the tuning system's four octaves before generating a valid transposition.

    interface Maqam {
        maqamId: string;
        name: string;
        transposition: boolean;
        ascendingPitchClasses: default[];
        ascendingPitchClassIntervals: PitchClassInterval[];
        ascendingMaqamAjnas?: (null | Jins)[];
        descendingPitchClasses: default[];
        descendingPitchClassIntervals: PitchClassInterval[];
        descendingMaqamAjnas?: (null | Jins)[];
        modulations?: AjnasModulations | MaqamatModulations;
        numberOfHops?: number;
    }
    Index

    Properties

    maqamId: string

    ID of the original maqam this instance is based on

    name: string

    Name of this maqam instance. For tahlil: original name (e.g., "Maqam Farahfazza") For taswir: includes transposition info (e.g., "Maqam Farahfazza al-Rast")

    transposition: boolean

    Whether this is a transposition (taswir) or original form (tahlil). false = tahlil (original), true = taswir (transposition)

    ascendingPitchClasses: default[]

    Array of actual pitch classes for the ascending sequence (ṣuʿūd). These are the concrete, playable pitches within the tuning system.

    ascendingPitchClassIntervals: PitchClassInterval[]

    Intervallic relationships between consecutive pitch classes in ascending sequence. These intervals remain consistent between tahlil and taswir forms.

    ascendingMaqamAjnas?: (null | Jins)[]

    Optional array of embedded ajnas found within the ascending sequence. Generated through algorithmic pattern matching against known ajnās database.

    descendingPitchClasses: default[]

    Array of actual pitch classes for the descending sequence (hubūṭ). May differ from ascending sequence in asymmetric maqamat.

    descendingPitchClassIntervals: PitchClassInterval[]

    Intervallic relationships between consecutive pitch classes in descending sequence. These intervals remain consistent between tahlil and taswir forms.

    descendingMaqamAjnas?: (null | Jins)[]

    Optional array of embedded ajnas found within the descending sequence. Generated through algorithmic pattern matching against known ajnās database.

    Optional modulation possibilities to other maqamat or ajnas. Defines possible transitions from this maqam to others.

    numberOfHops?: number

    Optional number of steps/hops for modulation analysis