node package manager
Easy sharing. Manage teams and permissions with one click. Create a free org »

lowpass

lowpass

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.

Installation

Install through npm:

$ npm install lowpass

Example

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 
  reader.pipe(lowPass);
  lowPass.pipe(speaker);
});
 
// pipe the WAVE file to the Reader instance 
file.pipe(reader);

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 
file.pipe(decoder);
 
function onFormat (format) {
  speaker = new Speaker(format);
 
  lowPass = new LowPass({
   format : format
  });
 
  // write the decoded MP3 into the lowpass filter then the speaker 
  decoder.pipe(lowPass).pipe(speaker);
};

LowPass()

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.

getBPM()

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

Thanks to TooTallNate for the published libraries