sfxr.js
Version:
8-bit sound effects generator based on sfxr
284 lines • 9.96 kB
TypeScript
/**
* 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