node package manager
Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »



Simple nodejs Audio manipulation library, based on node-wav

This module offers basics nodejs manipuji

  • LowPass : fast and basic (moving average-based) low pass filter
  • Cutter : Basic Stream to handle mp3 streams
  • Wav2energy : Transform
  • getBPM : soundstretch wrapper for nodejs
  • getBuildUp : Build-up detection (when music energy is more than a defined threshold)

Combined with node-lame it can also manage mp3 files.


Install through npm:

$ npm install lowpass


Here's how you would use the lowpass filter on a standard PCM WAVE file out of the speakers using node-wav and node-speaker :

var fs = require('fs');
var wav = require('wav');
var Speaker = require('speaker');
var LowPass = require('lowpass').LowPass;
var file = fs.createReadStream('input1.wav');
var reader = new wav.Reader();
var speaker, lowpass;
// the "format" event gets emitted at the end of the WAVE header 
reader.on('format', function (format) {
  speaker = new Speaker(format);
  lowPass = new LowPass({format : format});
  // the lowpass is piped between file reader and speaker 
// pipe the WAVE file to the Reader instance 

Same example with mp3 file and the node-lame package

var fs = require('fs');
var wav = require('wav');
var Speaker = require('speaker');
var LowPass = require('lowpass').LowPass;
var file = fs.createReadStream('input.mp3');
var lame = require('lame');
var speaker, lowpass;
// start reading the MP3 file from the input 
var decoder = new lame.Decoder();
// we have to wait for the "format" event before we can start encoding 
decoder.on('format', onFormat);
// and start transferring the data 
function onFormat (format) {
  speaker = new Speaker(format);
  lowPass = new LowPass({
   format : format
  // write the decoded MP3 into the lowpass filter then the speaker 


The LowPass class accepts the data from node-wav outputs the raw audio data transformed by the low pass.

it has the following options :

var LowPass = require('lowpass').LowPass;
//First form 
new LowPass({
    format : format, //format from node-wav, mandatory option 
    movAvLength : 128 // moving average window 
//Second Form 
new LowPass({
    format : format, //format from node-wav, mandatory option 
    movAvLength : 152 // Hz 

By default the cut-off correspond to a 128 length moving average window. For a 44100 sampleRate, it is equivalent to 152Hz low pass filter.


The getBPM function call soundstretch utility to get the BPM of a song.

var getBPM = require('lowpass').getBPM;
getBPM("input.wav", function(err, bpm){
    console.log("BPM is ", bpm);

Be carefull, soundstretch must be installed in your system.

Other tools

See examples


Thanks to TooTallNate for the published libraries