import { Cents, Degrees, Frequency, Seconds, Time } from "../../core/type/Units.js"; import { Signal } from "../../signal/Signal.js"; import { Source } from "../Source.js"; import { AMOscillator } from "./AMOscillator.js"; import { FatOscillator } from "./FatOscillator.js"; import { FMOscillator } from "./FMOscillator.js"; import { Oscillator } from "./Oscillator.js"; import { OmniOscillatorOptions, OmniOscillatorType, ToneOscillatorInterface, ToneOscillatorType } from "./OscillatorInterface.js"; import { PulseOscillator } from "./PulseOscillator.js"; import { PWMOscillator } from "./PWMOscillator.js"; export { OmniOscillatorOptions } from "./OscillatorInterface.js"; /** * All of the oscillator types that OmniOscillator can take on */ type AnyOscillator = Oscillator | PWMOscillator | PulseOscillator | FatOscillator | AMOscillator | FMOscillator; /** * All of the Oscillator constructor types mapped to their name. */ interface OmniOscillatorSource { fm: FMOscillator; am: AMOscillator; pwm: PWMOscillator; pulse: PulseOscillator; oscillator: Oscillator; fat: FatOscillator; } /** * The available oscillator types. */ export type OmniOscSourceType = keyof OmniOscillatorSource; type IsAmOrFmOscillator = Osc extends AMOscillator ? Ret : Osc extends FMOscillator ? Ret : undefined; type IsFatOscillator = Osc extends FatOscillator ? Ret : undefined; type IsPWMOscillator = Osc extends PWMOscillator ? Ret : undefined; type IsPulseOscillator = Osc extends PulseOscillator ? Ret : undefined; type IsFMOscillator = Osc extends FMOscillator ? Ret : undefined; /** * OmniOscillator aggregates all of the oscillator types into one. * @example * return Tone.Offline(() => { * const omniOsc = new Tone.OmniOscillator("C#4", "pwm").toDestination().start(); * }, 0.1, 1); * @category Source */ export declare class OmniOscillator extends Source implements Omit { readonly name: string; readonly frequency: Signal<"frequency">; readonly detune: Signal<"cents">; /** * The oscillator that can switch types */ private _oscillator; /** * the type of the oscillator source */ private _sourceType; /** * @param frequency The initial frequency of the oscillator. * @param type The type of the oscillator. */ constructor(frequency?: Frequency, type?: OmniOscillatorType); constructor(options?: Partial); static getDefaults(): OmniOscillatorOptions; /** * start the oscillator */ protected _start(time: Time): void; /** * start the oscillator */ protected _stop(time: Time): void; protected _restart(time: Seconds): this; /** * The type of the oscillator. Can be any of the basic types: sine, square, triangle, sawtooth. Or * prefix the basic types with "fm", "am", or "fat" to use the FMOscillator, AMOscillator or FatOscillator * types. The oscillator could also be set to "pwm" or "pulse". All of the parameters of the * oscillator's class are accessible when the oscillator is set to that type, but throws an error * when it's not. * @example * const omniOsc = new Tone.OmniOscillator().toDestination().start(); * omniOsc.type = "pwm"; * // modulationFrequency is parameter which is available * // only when the type is "pwm". * omniOsc.modulationFrequency.value = 0.5; */ get type(): OmniOscillatorType; set type(type: OmniOscillatorType); /** * The value is an empty array when the type is not "custom". * This is not available on "pwm" and "pulse" oscillator types. * @see {@link Oscillator.partials} */ get partials(): number[]; set partials(partials: number[]); get partialCount(): number; set partialCount(partialCount: number); set(props: Partial): this; /** * connect the oscillator to the frequency and detune signals */ private _createNewOscillator; get phase(): Degrees; set phase(phase: Degrees); /** * The source type of the oscillator. * @example * const omniOsc = new Tone.OmniOscillator(440, "fmsquare"); * console.log(omniOsc.sourceType); // 'fm' */ get sourceType(): OmniOscSourceType; set sourceType(sType: OmniOscSourceType); private _getOscType; /** * The base type of the oscillator. * @see {@link Oscillator.baseType} * @example * const omniOsc = new Tone.OmniOscillator(440, "fmsquare4"); * console.log(omniOsc.sourceType, omniOsc.baseType, omniOsc.partialCount); */ get baseType(): OscillatorType | "pwm" | "pulse"; set baseType(baseType: OscillatorType | "pwm" | "pulse"); /** * The width of the oscillator when sourceType === "pulse". * @see {@link PWMOscillator} */ get width(): IsPulseOscillator>; /** * The number of detuned oscillators when sourceType === "fat". * @see {@link FatOscillator.count} */ get count(): IsFatOscillator; set count(count: IsFatOscillator); /** * The detune spread between the oscillators when sourceType === "fat". * @see {@link FatOscillator.count} */ get spread(): IsFatOscillator; set spread(spread: IsFatOscillator); /** * The type of the modulator oscillator. Only if the oscillator is set to "am" or "fm" types. * @see {@link AMOscillator} or {@link FMOscillator} */ get modulationType(): IsAmOrFmOscillator; set modulationType(mType: IsAmOrFmOscillator); /** * The modulation index when the sourceType === "fm" * @see {@link FMOscillator}. */ get modulationIndex(): IsFMOscillator>; /** * Harmonicity is the frequency ratio between the carrier and the modulator oscillators. * @see {@link AMOscillator} or {@link FMOscillator} */ get harmonicity(): IsAmOrFmOscillator>; /** * The modulationFrequency Signal of the oscillator when sourceType === "pwm" * see {@link PWMOscillator} * @min 0.1 * @max 5 */ get modulationFrequency(): IsPWMOscillator>; asArray(length?: number): Promise; dispose(): this; }