import { Measure, MeasureData } from './Measure.js'; interface ScoreProps { name?: string; voiceNames?: Array; bpm?: number; timeSignature?: [number, number]; } /** * @class Score * @classdesc Represents a full musical score consisting of a number of voices. * @param {number} attributes.bpm=100 The bpm for the score. * @param {Array} attributes.timeSignature=[4,4] Time signature for the score. * @param {string} attributes.name=my_score Name for the score. * @param {Array} voiceNames=[] Array with the names of the voices in the score. */ export declare class Score { measureSize: number; timeSignature: [number, number]; constructor({ bpm, timeSignature, name, voiceNames }?: ScoreProps); _name: string; /** * Returns the score name. * @returns {string} */ get name(): string; /** * Set the score's name. * @param {string} name * @throws InvalidInput */ set name(name: string); _bpm: number; /** * Get the score's BPM value. * @returns {number} */ get bpm(): number; /** * Set the score's BPM value. * @param bpm * @throws InvalidInput */ set bpm(bpm: number); _voices: { [key: string]: Array; }; /** * Returns an object with the scores voices. * @returns {Array} */ get voices(): { [key: string]: Array; }; /** * Returns the length of the score as the length if it's longest voice. * The format is 'MM:QQ:SS' - Measures:Quarter-notes:Sixteenth-notes * @returns {string} */ get length(): string; /** * Returns the maximum size a measure has, calculated using the time signature. * @param {Array} timeSignature * @throws Error * @returns {number} */ static getMeasureSize(timeSignature: Array): number; static stringToScore(str: string): Score; /** * Set the score's time signature. * @param timeSignature */ setTimeSignature(timeSignature: [number, number]): void; /** * Returns the voice with name. * If the voice doesn't exist it throws an error. * @throws InvalidInput * @returns {Array|undefined} * @param voiceName */ getVoice(voiceName: string): Array | undefined; /** * Adds a voice to the score. * * @param {string} voiceName The voice's name. * @param {data} voiceData=[] An array of measures. */ addVoice(voiceName: string, voiceData?: Array): void; /** * Deletes a voice from the score. * @throws Error * @param {string} voiceName The name of the voice to delete. * @returns {boolean} */ deleteVoice(voiceName: string): boolean; /** * Returns a measure from a voice * @param {string} voiceName The voice name. * @param {number} measureIndex The index of the measure. */ getMeasure(voiceName: string, measureIndex: number): Measure | undefined; /** * Add measure to a voice at an index. * If no data object is sent it simply adds an empty measure to the end of the voice. * @param {string} voiceName The voice name. * @param {Object} data * @param {Measure} data.measure=new Measure() The measure to add. * @param {Number} data.index=voice.length Index to add the measure at. */ addMeasure(voiceName: string, { measure, index }?: { measure?: Measure; index?: number; }): void; /** * Add note to measure. * @param {string} voiceName The voice name. * @param {number} measureIndex The measure's index. * @param {number} position Position in the measure. * @param {Object} data * @param {string} data.note Raw note. * @param {string} data.duration Duration of the note. * @returns {boolean} */ addNote(voiceName: string, measureIndex: number, position: number, { note, duration, }: { note: string; duration: string; }): boolean; /** * Add notes to measure. * @param {string} voiceName The voice name. * @param {number} measureIndex The measure's index. * @param {number} position Position in the measure. * @param {Object} data * @param {Array} data.notes An array of notes. * @param {string} data.duration Duration of the note. * @returns {boolean} */ addNotes(voiceName: string, measureIndex: number, position: number, { notes, duration }: MeasureData): boolean; /** * Add chord to measure. * @param {string} voiceName The voice name. * @param {number} measureIndex The measure's index. * @param {number} position Position in the measure. * @param {Object} data * @param {Array} data.notes An array of notes. * @param {string} data.duration Duration of the note. * @param {name} data.name Name of the chord. * @returns {boolean} */ addChord(voiceName: string, measureIndex: number, position: number, { notes, name, duration }: MeasureData): boolean; /** * Private function to handle addition operations. * Should not be called. * @param {string} operation Operation to execute. * @param {string} voiceName The voice name. * @param {number} measureIndex The measure's index. * @param {number} position Position in the measure. * @param {Object} data * @returns {boolean} * @private */ addOperation(operation: keyof Measure, voiceName: string, measureIndex: number, position: number, data: unknown): boolean; /** * Delete note from measure. * @param {number} voiceName The voice name. * @param {number} measureIndex The measure's index. * @param {number} position Position in the measure. * @param {string} note Note to delete. * @returns {boolean} */ deleteNote(voiceName: string, measureIndex: number, position: number, note: string): boolean; /** * Delete notes from measure. * @param {number} voiceName The voice name. * @param {number} measureIndex The measure's index. * @param {number} position Position in the measure. * @param {Array} notes Array of notes to delete. * @returns {boolean} */ deleteNotes(voiceName: string, measureIndex: number, position: number, notes: Array): boolean; /** * Private function to handle deletion operations. * Should not be called. * @param {string} operation Operation to execute. * @param {string} voiceName The voice name. * @param {number} measureIndex The measure's index. * @param {number} position Position in the measure. * @param {Object} data * @returns {boolean} * @private */ deleteOperation(operation: keyof Measure, voiceName: string, measureIndex: number, position: number, data: unknown): boolean; /** * Deletes * @param {string} voiceName The voice name. * @param {number} measureIndex The measure index. * @param {number} position Position in the measure. * @returns {*|boolean} */ deleteMember(voiceName: string, measureIndex: number, position: number): boolean; /** * Clears a measure. * @param {string} voiceName The voice name. * @param {number} measureIndex The measure index. * @returns {boolean} */ clearMeasure(voiceName: string, measureIndex: number): boolean; /** * Deletes a measure. * @param {string} voiceName The voice name. * @param {number} measureIndex The measure index. * @returns {boolean} */ deleteMeasure(voiceName: string, measureIndex: number): Measure[] | boolean; /** * Clones a measure inside a voice and adds the clone next to the original measure. * @param {string} voiceName The voice name. * @param {number} measureIndex The measure index. * @returns {boolean}` */ cloneMeasure(voiceName: string, measureIndex: number): boolean; /** * Transpose a measure in one of the voices. * @param {string} voiceName The voice name. * @param {number} measureIndex The measure index. * @param {number} interval The interval to transpose by. * @returns {boolean} */ transposeMeasure(voiceName: string, measureIndex: number, interval: number): boolean; /** * Transposes a voice in the score. * @param {string} voiceName The voice name. * @param {number} interval The interval to transpose by. */ transpose(voiceName: string, interval: number): void; toString(): string; } export {};