UNPKG

sfxr.js

Version:

8-bit sound effects generator based on sfxr

284 lines 9.96 kB
/** * SFXR.ts - 8-bit sound generator for HTML5 (TypeScript port) * Original: Based on the C++ sfxr by Tomas Pettersson * JavaScript port: Copyleft 2011 by Thomas Vian * TypeScript modernization: Complete rewrite with modern ES6+ features and proper typing * * Public Domain */ import { RiffWave } from './riffwave'; export declare const SQUARE = 0; export declare const SAWTOOTH = 1; export declare const SINE = 2; export declare const NOISE = 3; export type WaveType = typeof SQUARE | typeof SAWTOOTH | typeof SINE | typeof NOISE; declare let masterVolume: number; declare const paramsOrder: readonly ["wave_type", "p_env_attack", "p_env_sustain", "p_env_punch", "p_env_decay", "p_base_freq", "p_freq_limit", "p_freq_ramp", "p_freq_dramp", "p_vib_strength", "p_vib_speed", "p_arp_mod", "p_arp_speed", "p_duty", "p_duty_ramp", "p_repeat_speed", "p_pha_offset", "p_pha_ramp", "p_lpf_freq", "p_lpf_ramp", "p_lpf_resonance", "p_hpf_freq", "p_hpf_ramp"]; declare const paramsSigned: string[]; export interface SynthParameters { oldParams?: boolean; wave_type: WaveType; p_env_attack: number; p_env_sustain: number; p_env_punch: number; p_env_decay: number; p_base_freq: number; p_freq_limit: number; p_freq_ramp: number; p_freq_dramp: number; p_vib_strength: number; p_vib_speed: number; p_arp_mod: number; p_arp_speed: number; p_duty: number; p_duty_ramp: number; p_repeat_speed: number; p_pha_offset: number; p_pha_ramp: number; p_lpf_freq: number; p_lpf_ramp: number; p_lpf_resonance: number; p_hpf_freq: number; p_hpf_ramp: number; sound_vol: number; sample_rate: number; sample_size: number; } export interface RenderResult { buffer: number[]; normalized: number[]; clipped: number; } export interface AudioSource { channels: any[]; setVolume(volume: number): AudioSource; play(): any; } export interface ExtendedRiffWave extends RiffWave { clipping?: number; buffer?: number[]; getAudio?: () => AudioSource | HTMLAudioElement; } export declare class Params implements SynthParameters { oldParams: boolean; wave_type: WaveType; p_env_attack: number; p_env_sustain: number; p_env_punch: number; p_env_decay: number; p_base_freq: number; p_freq_limit: number; p_freq_ramp: number; p_freq_dramp: number; p_vib_strength: number; p_vib_speed: number; p_arp_mod: number; p_arp_speed: number; p_duty: number; p_duty_ramp: number; p_repeat_speed: number; p_pha_offset: number; p_pha_ramp: number; p_lpf_freq: number; p_lpf_ramp: number; p_lpf_resonance: number; p_hpf_freq: number; p_hpf_ramp: number; sound_vol: number; sample_rate: number; sample_size: number; toB58(): string; private base58Encode; fromB58(b58encoded: string): this; fromJSON(struct: Partial<SynthParameters>): this; pickupCoin(): this; laserShoot(): this; explosion(): this; powerUp(): this; hitHurt(): this; jump(): this; blipSelect(): this; synth(): this; tone(): this; click(): this; random(): this; mutate(): this; } export declare class SoundEffect { private parameters; private elapsedSinceRepeat; private period; private periodMax; private enableFrequencyCutoff; private periodMult; private periodMultSlide; private dutyCycle; private dutyCycleSlide; private arpeggioMultiplier; private arpeggioTime; private waveShape; private fltw; private enableLowPassFilter; private fltw_d; private fltdmp; private flthp; private flthp_d; private vibratoSpeed; private vibratoAmplitude; private envelopeLength; private envelopePunch; private flangerOffset; private flangerOffsetSlide; private repeatTime; private gain; sampleRate: number; private bitsPerChannel; constructor(params: SynthParameters | string); private init; private initForRepeat; getRawBuffer(): RenderResult; generate(): ExtendedRiffWave; } export declare const sfxr: { toBuffer: (synthdef: SynthParameters) => number[]; toWebAudio: (synthdef: SynthParameters, audiocontext?: AudioContext) => AudioBufferSourceNode | undefined; toWave: (synthdef: SynthParameters) => ExtendedRiffWave; toAudio: (synthdef: SynthParameters) => AudioSource | HTMLAudioElement; play: (synthdef: SynthParameters) => any; b58decode: (b58encoded: string) => Partial<SynthParameters>; b58encode: (synthdef: Partial<SynthParameters>) => string; generate: (algorithm: string, options?: { sound_vol?: number; sample_rate?: number; sample_size?: number; }) => Params; }; export declare const sliders: { p_env_attack: (v: number) => number; p_env_sustain: (v: number) => number; p_env_punch: (v: number) => number; p_env_decay: (v: number) => number; p_base_freq: (v: number) => number; p_freq_limit: (v: number) => number; p_freq_ramp: (v: number) => number; p_freq_dramp: (v: number) => number; p_vib_speed: (v: number) => number; p_vib_strength: (v: number) => number; p_arp_mod: (v: number) => number; p_arp_speed: (v: number) => number; p_duty: (v: number) => number; p_duty_ramp: (v: number) => number; p_repeat_speed: (v: number) => number; p_pha_offset: (v: number) => number; p_pha_ramp: (v: number) => number; p_lpf_freq: (v: number) => number; p_lpf_ramp: (v: number) => number; p_lpf_resonance: (v: number) => number; p_hpf_freq: (v: number) => number; p_hpf_ramp: (v: number) => number; sound_vol: (v: number) => number; }; export declare const slidersInverse: { p_env_attack: (v: number) => number; p_env_sustain: (v: number) => number; p_env_punch: (v: number) => number; p_env_decay: (v: number) => number; p_base_freq: (v: number) => number; p_freq_limit: (v: number) => number; p_freq_ramp: (v: number) => number; p_freq_dramp: (v: number) => number; p_vib_speed: (v: number) => number; p_vib_strength: (v: number) => number; p_arp_mod: (v: number) => number; p_arp_speed: (v: number) => number; p_duty: (v: number) => number; p_duty_ramp: (v: number) => number; p_repeat_speed: (v: number) => number; p_pha_offset: (v: number) => number; p_pha_ramp: (v: number) => number; p_lpf_freq: (v: number) => number; p_lpf_ramp: (v: number) => number; p_lpf_resonance: (v: number) => number; p_hpf_freq: (v: number) => number; p_hpf_ramp: (v: number) => number; sound_vol: (v: number) => number; }; export { masterVolume, paramsOrder, paramsSigned }; export declare const setMasterVolume: (volume: number) => void; export declare const getMasterVolume: () => number; declare const _default: { sfxr: { toBuffer: (synthdef: SynthParameters) => number[]; toWebAudio: (synthdef: SynthParameters, audiocontext?: AudioContext) => AudioBufferSourceNode | undefined; toWave: (synthdef: SynthParameters) => ExtendedRiffWave; toAudio: (synthdef: SynthParameters) => AudioSource | HTMLAudioElement; play: (synthdef: SynthParameters) => any; b58decode: (b58encoded: string) => Partial<SynthParameters>; b58encode: (synthdef: Partial<SynthParameters>) => string; generate: (algorithm: string, options?: { sound_vol?: number; sample_rate?: number; sample_size?: number; }) => Params; }; Params: typeof Params; SoundEffect: typeof SoundEffect; SQUARE: number; SAWTOOTH: number; SINE: number; NOISE: number; sliders: { p_env_attack: (v: number) => number; p_env_sustain: (v: number) => number; p_env_punch: (v: number) => number; p_env_decay: (v: number) => number; p_base_freq: (v: number) => number; p_freq_limit: (v: number) => number; p_freq_ramp: (v: number) => number; p_freq_dramp: (v: number) => number; p_vib_speed: (v: number) => number; p_vib_strength: (v: number) => number; p_arp_mod: (v: number) => number; p_arp_speed: (v: number) => number; p_duty: (v: number) => number; p_duty_ramp: (v: number) => number; p_repeat_speed: (v: number) => number; p_pha_offset: (v: number) => number; p_pha_ramp: (v: number) => number; p_lpf_freq: (v: number) => number; p_lpf_ramp: (v: number) => number; p_lpf_resonance: (v: number) => number; p_hpf_freq: (v: number) => number; p_hpf_ramp: (v: number) => number; sound_vol: (v: number) => number; }; slidersInverse: { p_env_attack: (v: number) => number; p_env_sustain: (v: number) => number; p_env_punch: (v: number) => number; p_env_decay: (v: number) => number; p_base_freq: (v: number) => number; p_freq_limit: (v: number) => number; p_freq_ramp: (v: number) => number; p_freq_dramp: (v: number) => number; p_vib_speed: (v: number) => number; p_vib_strength: (v: number) => number; p_arp_mod: (v: number) => number; p_arp_speed: (v: number) => number; p_duty: (v: number) => number; p_duty_ramp: (v: number) => number; p_repeat_speed: (v: number) => number; p_pha_offset: (v: number) => number; p_pha_ramp: (v: number) => number; p_lpf_freq: (v: number) => number; p_lpf_ramp: (v: number) => number; p_lpf_resonance: (v: number) => number; p_hpf_freq: (v: number) => number; p_hpf_ramp: (v: number) => number; sound_vol: (v: number) => number; }; setMasterVolume: (volume: number) => void; getMasterVolume: () => number; }; export default _default; //# sourceMappingURL=sfxr.d.ts.map