croonjs
Version:
Toolkit for parsing and playing numbered musical notation
69 lines (68 loc) • 2.16 kB
TypeScript
export interface Position {
line: number;
column: number;
}
export interface BaseParsedNode {
type: string;
raw: string;
range: [number, number];
loc: {
start: Position;
end: Position;
};
}
export interface TempoNode extends BaseParsedNode {
type: 'TempoNode';
/** Beats per minute */
beat: number;
}
export interface KeySignatureNode extends BaseParsedNode {
type: 'KeySignatureNode';
tonic: number;
accidental: 0 | 1 | -1;
pitch: string;
}
export interface TimeSignatureNode extends BaseParsedNode {
type: 'TimeSignatureNode';
/** Beats per measure */
beat: number;
/** Beats per note */
unit: number;
}
export interface NoteNode extends BaseParsedNode {
type: 'NoteNode';
continuation: boolean;
accidental: 0 | 1 | -1;
notation: number;
octave: number;
dot: number;
half: number;
leaning: boolean;
}
export interface DashNode extends BaseParsedNode {
type: 'DashNode';
}
export interface BarLineNode extends BaseParsedNode {
type: 'BarLineNode';
end: boolean;
repeat: 0 | 1 | -1;
}
export interface FineNode extends BaseParsedNode {
type: 'FineNode';
except: number;
}
export interface UnknownNode extends BaseParsedNode {
type: 'UnknownNode';
}
export type ParsedNode = TempoNode | KeySignatureNode | TimeSignatureNode | NoteNode | DashNode | BarLineNode | FineNode | UnknownNode;
export interface ParsedNotation {
type: 'ParsedNotation';
nodes: ParsedNode[];
}
export declare function parse(notation: string): ParsedNotation;
export type Serializable<T extends BaseParsedNode> = Omit<T, 'range' | 'loc'> & Partial<Pick<T, 'range' | 'loc'>>;
export type SerializableParsedNode = Serializable<TempoNode> | Serializable<KeySignatureNode> | Serializable<TimeSignatureNode> | Serializable<NoteNode> | Serializable<DashNode> | Serializable<BarLineNode> | Serializable<FineNode> | Serializable<UnknownNode>;
export type SerializableParsedNotation = Omit<ParsedNotation, 'nodes'> & {
nodes: SerializableParsedNode[];
};
export declare function stringify(notation: SerializableParsedNotation): string;