import { Gain, Param, ToneAudioNode, Unit } from 'tone'; declare type ToneAudioNodeOptions = import('tone/build/esm/core/context/ToneAudioNode').ToneAudioNodeOptions; export interface PianoOptions extends ToneAudioNodeOptions { /** * The number of velocity steps to load */ velocities: number; /** * The lowest note to load */ minNote: number; /** * The highest note to load */ maxNote: number; /** * If it should include a 'release' sounds composed of a keyclick and string harmonic */ release: boolean; /** * If the piano should include a 'pedal' sound. */ pedal: boolean; /** * The directory of the salamander grand piano samples */ url: string; /** * The maximum number of notes that can be held at once */ maxPolyphony: number; /** * Volume levels for each of the components (in decibels) */ volume: { pedal: number; strings: number; keybed: number; harmonics: number; }; } interface KeyEvent { time?: Unit.Time; velocity?: number; note?: string; midi?: number; } interface PedalEvent { time?: Unit.Time; } /** * The Piano */ export declare class Piano extends ToneAudioNode { readonly name = "Piano"; readonly input: any; readonly output: Gain<"gain">; /** * The string harmonics */ private _harmonics; /** * The keybed release sound */ private _keybed; /** * The pedal */ private _pedal; /** * The strings */ private _strings; /** * The volume level of the strings output. This is the main piano sound. */ strings: Param<"decibels">; /** * The volume output of the pedal up and down sounds */ pedal: Param<"decibels">; /** * The volume of the string harmonics */ harmonics: Param<"decibels">; /** * The volume of the keybed click sound */ keybed: Param<"decibels">; /** * The maximum number of notes which can be held at once */ maxPolyphony: number; /** * The sustained notes */ private _sustainedNotes; /** * The currently held notes */ private _heldNotes; /** * If it's loaded or not */ private _loaded; constructor(options?: Partial); static getDefaults(): PianoOptions; /** * Load all the samples */ load(): Promise; /** * If all the samples are loaded or not */ get loaded(): boolean; /** * Put the pedal down at the given time. Causes subsequent * notes and currently held notes to sustain. */ pedalDown({ time }?: PedalEvent): this; /** * Put the pedal up. Dampens sustained notes */ pedalUp({ time }?: PedalEvent): this; /** * Play a note. * @param note The note to play. If it is a number, it is assumed to be MIDI * @param velocity The velocity to play the note * @param time The time of the event */ keyDown({ note, midi, time, velocity }: KeyEvent): this; /** * Release a held note. */ keyUp({ note, midi, time, velocity }: KeyEvent): this; stopAll(): this; } export {};