ToneGenerator for node.js
This thing generates raw PCM data, specified by
a frequency and length in seconds.
tone(frequency, lengthInSeconds, volume = 30, sampleRate, = 44100)
volume and sampleRate are optional, the default is shown above.
If you want to specify sampleRate, you have to specify volume!
var tone = require("tonegenerator");
var A440 = tone(440, 20, 30);
var A440_low_sample = tone(440, 20, 30, 22050);
I'm really unsure what the 'volume' value means, but you can use it to create
different tones with different volumes, let me know how it works for you!
The data is returned as a normal array, so you can do operations on it.
Before writing to a file, you need to convert it to a buffer:
var tone = require("tonegenerator");
var header = require("waveheader");
var fs = require("fs");
var tone1 = tone(440, 2, 60);
var tone2 = tone(554.37, 2, 30);
var tone3 = tone(659.26, 2, 30);
var res = [].concat(tone1);
res = res.concat(tone2);
res = res.concat(tone3);
for(var i = 0; i < tone1.length; i++) {
res.push(tone1[i] + tone2[i] + tone3[i]);
}
var writer = new fs.createWriteStream("A-major.wav");
writer.write(header( 44100 * 8 ));
writer.write(new Buffer(res));
writer.end();