UNPKG

croonjs

Version:

Toolkit for parsing and playing numbered musical notation

69 lines (68 loc) 2.16 kB
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;