Skip to content

coffey-dev/dsp.js

 
 

Repository files navigation

DSP.js

NOTE: This project is no longer maintained (and hasnt been for years). I wrote this when I was much younger and experimenting in Audio and DSP. This is no longer much of a passion of mine.

🎵 NEW: Audio Analysis Features (2026)

This fork has been modernized with comprehensive audio analysis features inspired by librosa, optimized for React Native and Expo Go:

  • Duration, BPM (Tempo), Key Detection
  • Danceability, Energy, Loudness, Valence
  • STFT (Short-Time Fourier Transform)
  • Spectral features: Centroid, Rolloff, Bandwidth
  • Zero Crossing Rate (ZCR)
  • Audio loading utilities for React Native

📖 See full Audio Features documentation


DSP.js is a digital signal processing library for javascript. It includes many functions for signal analysis and generation, including Oscillators (sine, saw, square, triangle), Window functions (Hann, Hamming, etc), Envelopes (ADSR), IIR Filters (lowpass, highpass, bandpass, notch), FFT and DFT transforms, Delays, Reverb.

Modules

  • DFT(bufferSize, sampleRate): Discrete Fourier Transform

    • Usage:
      var dft = new DFT(1024, 44100);
      dft.forward(signal);
      var spectrum = dft.spectrum;
  • FFT(bufferSize, sampleRate): Fast Fourier Transform

    • Usage:
      var fft = new FFT(2048, 44100);
      fft.forward(signal);
      var spectrum = fft.spectrum;
  • Oscillator(waveform, frequency, amplitude, bufferSize, sampleRate): Signal Generator

    • Sine wave
    • Square wave
    • Saw wave
    • Triangle wave
    • Usage:
      var osc = new Oscillator(SINEWAVE, 440, 1, 2048, 22050);
      osc.generate();
      var signal = osc.signal;
  • ADSR(attack, decay, sustainLevel, sustain, release, sampleRate): Attack-Decay-Sustain-Release Envelope

    • Usage:
      var envelope = new ADSR(0.01, 0.1, 0.5, 0.1, 0.2, 44100);
      envelope.process(signal);
  • IIRFilter(filter, cutoff, sampleRate): Infinite Impulse Response Filters

    • Low Pass Filter
    • High Pass Filter
    • Usage:
      var filter = IIRFilter(LOWPASS, 200, 44100);
      filter.process(signal);
  • MultiDelay(maxDelayInSamplesSize, delayInSamples, masterVolume, delayVolume): Delay which feeds back its own delayed signal

    • Usage:
      var delay = MultiDelay(44100*5, 44100*1, 1.0, 0.6);
      delay.process(signal);  
  • Reverb(maxDelayInSamplesSize, delayInSamples, masterVolume, mixVolume, delayVolume, dampFrequency): Reverb

    • Usage:
      var reverb = Reverb(20000, 6500, 0.8, 0.5, 0.9, 4500);
      reverb.process(signal);

About

Digital Signal Processing for Javascript

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • TypeScript 52.8%
  • JavaScript 46.8%
  • Makefile 0.4%