Creates a new MaqamData instance with abstract note names.
Unique identifier for this maqam
Name of the maqam (e.g., "Maqam Farahfazza")
Ascending sequence (ṣuʿūd) of note names
Descending sequence (hubūṭ) of note names
Traditional melodic development pathways
English description or comments
Arabic description or comments
References to source documents
Gets the unique identifier of this maqam.
The maqam ID
Gets the name of this maqam.
The maqam name
Gets the ascending sequence (ṣuʿūd) note names.
These are abstract cultural identifiers without connection to specific pitch frequencies. To get actual playable pitches, use getTahlil() with a specific tuning system.
Array of ascending note names
Gets the descending sequence (hubūṭ) note names.
These may differ from ascending names in asymmetric maqamat, creating distinctive directional characteristics that are essential to the maqam's identity.
Array of descending note names
Gets the suyūr (traditional melodic development pathways).
Suyūr define how the maqam unfolds in performance practice, going beyond basic ascending/descending sequences to describe characteristic progressions, emphasis points, and developmental patterns.
Array of sayr objects
Gets the English-language comments for this maqam.
English comments
Gets the Arabic-language comments for this maqam.
Arabic comments
Gets the source page references for this maqam.
Array of source page references
Checks if this maqam has symmetric ascending and descending sequences.
A symmetric maqam has identical ascending and descending sequences when the descending sequence is reversed. Asymmetric maqamat have different note patterns for ascent and descent, creating distinctive directional characteristics that are visually distinguished in the platform interface.
True if the maqam is symmetric, false if asymmetric
Checks if this maqam can be constructed within a given tuning system.
A maqam is only selectable/constructible if ALL note names in BOTH its ascending and descending sequences exist within the tuning system's available pitch classes. The platform searches across all four octaves when determining compatibility, similar to ajnas but with the additional requirement that both directional sequences must be fully supported.
For example, in Al-Kindī's tuning system:
All note names available in the tuning system
True if all required note names are available in both sequences, false otherwise
Converts this abstract maqam into a concrete, playable tahlil (original form).
This is the crucial method that bridges the gap between abstract note names and actual musical pitches. It processes both ascending and descending sequences separately, matching note names with corresponding pitch classes from a specific tuning system, creating a Maqam interface instance with:
The resulting Maqam represents the "tahlil" (original/root form) of the maqam, as opposed to "taswir" (transpositions) which would start from different pitch classes but maintain the same intervallic patterns and directional structure.
All pitch classes available in the tuning system
Maqam interface instance with concrete pitches and intervals
Creates a copy of this maqam with new suyūr pathways.
This method preserves all other properties while allowing for suyūr modifications, useful for exploring different performance traditions or creating variants with alternative melodic development patterns.
New suyūr pathways to use in the copy
New MaqamData instance with updated suyūr
Creates a copy of this maqam with new source page references.
New source page references to use
New MaqamData instance with updated references
Converts this MaqamData to a plain object for JSON serialization.
Plain object representation suitable for JSON storage
Represents the raw, tuning-system-independent definition of a maqam.
A maqam is a complete modal framework that differs from ajnas in its scope and structure, representing a comprehensive melodic system rather than a building block component. Each maqām contains both an ascending sequence (ṣuʿūd) and a descending sequence (hubūṭ) of note names, both consisting of seven or more notes that can be either identical (symmetric) or different (asymmetric).
MaqamData contains only abstract note names without connection to specific pitch classes or tuning systems, serving as the "template" or "blueprint" of a maqam as it would appear in theoretical texts or JSON data files. To create an actual playable maqam with specific pitches, this data must be combined with a tuning system through the getTahlil() method to produce a Maqam interface instance.
Key Features:
Key Distinction: MaqamData contains only note names (cultural/theoretical identifiers), while the Maqam interface contains actual pitch classes with frequencies and intervallic relationships within a specific tuning system.