moment-of-symmetry
Version:
Moment of Symmetry (MOS) musical scale generation and analysis for Javascript
103 lines (102 loc) • 3.66 kB
TypeScript
import { Fraction } from 'xen-dev-utils';
/** Information about a MOS pattern. */
export type MosInfo = {
/** MOS pattern such as "5L 2s". */
mosPattern: string;
/** Number of large steps in the pattern. */
numberOfLargeSteps: number;
/** Number of small steps in the pattern. */
numberOfSmallSteps: number;
/** Size of the pattern. */
size: number;
/** TAMNAMS name of the pattern. */
name?: string;
/** True if the pattern is a subset of a larger MOS pattern. */
subset?: boolean;
/** Interval prefix. */
prefix?: string;
/** TAMNAMS name abbreviation. */
abbreviation?: string;
};
/** Information about a MOS mode. */
export type ModeInfo = {
/** Number of steps in a period. */
period: number;
/** Number of periods in an octave. */
numberOfPeriods: number;
/** UDP notation: U|D(P) where U = bright generators going up, D = bright generators going down, P = numberOfPeriods if not 1. */
udp: string;
/** Mode in step pattern format such as "LLsLLLs". */
mode: string;
/** Name of the mode. */
modeName?: string;
};
/** Information about a MOS scale. */
export type MosScaleInfo = {
/** MOS pattern such as "5L 2s". */
mosPattern: string;
/** Number of large steps in the pattern. */
numberOfLargeSteps: number;
/** Number of small steps in the pattern. */
numberOfSmallSteps: number;
/** Size of the large step in EDO steps. */
sizeOfLargeStep: number;
/** Size of the small step in EDO steps. */
sizeOfSmallStep: number;
/** Name of the step size ratio or the name of the hardness range it belongs to. */
hardness: string;
/** Octave/equave of the scale in EDO steps. */
edo: number;
/** Numper of periods per octave. */
numberOfPeriods: number;
/** Period of the scale in EDO steps. */
period: number;
/** Bright generator of the scale in EDO steps. */
brightGenerator: number;
/** Dark generator of the scale in EDO steps. */
darkGenerator: number;
/** Number of large and small steps in the period. */
periodMonzo: [number, number];
/** Number of large and small steps in the bright generator. */
brightGeneratorMonzo: [number, number];
/** TAMNAMS name of the pattern. */
name?: string;
/** True if the pattern is a subset of a larger MOS pattern. */
subset?: boolean;
/** Interval prefix. */
prefix?: string;
/** TAMNAMS name abbreviation. */
abbreviation?: string;
};
/** Information about a scale. */
export type ScaleInfo = {
/** Steps of the scale L = large, M = medium, s = small */
stepPattern: string;
/** MOS pattern such as "5L 2s". */
mosPattern?: string;
/** TAMNAMS name of the pattern. */
name?: string;
/** True if the pattern is a subset of a larger MOS pattern. */
subset?: boolean;
/** Interval prefix. */
prefix?: string;
/** TAMNAMS name abbreviation. */
abbreviation?: string;
/** Name of the mode. */
modeName?: string;
};
/** Information about a generator range. */
export type RangeInfo = {
/** Size of the period as a fraction of the equave. */
period: Fraction;
/** Lower bound of the generator range as a fraction of the equave. */
lowerBound: Fraction;
/** Upper bound of the generator range as a fraction of the equave. */
upperBound: Fraction;
/** Number of large steps in the pattern. */
numberOfLargeSteps: number;
/** Number of small steps in the pattern. */
numberOfSmallSteps: number;
/** Indicate if the generators are bright inside this range. */
bright: boolean;
};