soniwave
v1.0.5
Published
Node.js wrapper for rzurad/waveform with forthcoming extra fanciness
Downloads
8
Readme
Soniwave
Node.js wrapper for Waveform with some extra features and extra extra features coming soon.
###Warning!!!111one *This module is under active development and so don't trust any of it as it hasn't been tested :P This documentation also may refer to stuff that hasnae been implemented yet. For example, the contents of the second param for the save callback. You've been warned! *
Installation
npm install --save soniwave
Dependencies
Optional dependencies (for "extras" such as Bandify)
Installing Waveform
Waveform comes with a Makefile, but it doesn't really work as of yet and has to be modified slightly, so here is a version that has worked on both Centos 7 and Mac OSX:
sudo gcc -I/usr/local/bin/ffmpeg \
-L /usr/local/lib/ffmpeg -I /usr/local/include -L /usr/local/lib \
-o /usr/local/bin/waveform main.c \
-Wall -g -O3 -lavcodec -lavutil -lavformat -lpng -lm
Simplest Usage
var soniwave = require('soniwave');
soniwave('path/to/audio.mp3', {output: 'output.png'}, function (err, image) {
if (err) return console.log('Error :(', err);
console.log('Generated waveform!');
});
Alternative Usage Methods
var soniwave = require('soniwave');
// Soniwave can be instantiated with or without the 'new' keyword.
var sw = new soniwave();
// Options can be set using direct methods.
sw.setInput('path/to/audio.mp3');
sw.setWidth(800);
sw.setHeight('200px');
// These methods can all be chained.
sw.setMono().setBackground('black').setForeground('red');
// The save method generates the output. Aliases: write, exec.
sw.save('output.png', function (err, image) {});
var soniwave = require('soniwave');
// Options can all be specified in a big ol' object.
var opts = {
height: 500,
width: 2000,
backgroundColor: 'green',
backgroundOpacity: 0.5,
foregroundColor: 'fff',
foregroundOpacity: 1,
mono: true,
input: 'path/to/audio.mp3',
output: 'output.png'
}
var callback = function () {
console.log('Done!');
};
var sw2 = soniwave(null, opts, callback);
// Not to mention events:
sw2.on('error', function (err) {
console.log('An error occurred!', err);
});
sw2.on('event', function (event) {
console.log('Something happened: ' + event);
});
sw2.on('start', function () {
console.log('Soniwave has started doing stuff.');
});
Bandify (to be renamed, probably)
var soniwave = require('soniwave');
soniwave('path/to/audio.mp3')
.setWidth(1200).setHeight(200)
.setbandify(true)
.setBandifyOpts({
// Whether to run operations in parallel (faster)
// or series (less RAM intensive).
sync: false,
// The amount to multiply each band by. Lower numbers
// mean smaller bands. Make sure it's above 1!
bandFactor: 1.5,
// The filter slope of each band's edges, in dB.
bandSlope: 4,
// The antialiasing multiplication factor. Basically how many times
// wider should the image be created to then be scaled back down.
// Higher numbers create smoother images but can cause the waves
//to become too light, also uses up more memory.
antialiasing: 6
})
.save('output.png', function (err, image) {
// How pretty!
});