lamejs
Version:
Pure JavaScript MP3 Encoder
84 lines (70 loc) • 2.93 kB
JavaScript
var fs = require("fs");
var path = require("path")
var common = require("./common.js");
var lamejs = require("./index");
var WavHeader = lamejs.WavHeader;
var Mp3Encoder = lamejs.Mp3Encoder;
var assert = common.assert;
function testFullLength() {
var r = fs.readFileSync(path.join("testdata", "Left44100.wav"));
var sampleBuf = new Uint8Array(r).buffer;
var w = WavHeader.readHeader(new DataView(sampleBuf));
var samples = new Int16Array(sampleBuf, w.dataOffset, w.dataLen / 2);
var remaining = samples.length;
var lameEnc = new Mp3Encoder(); //w.channels, w.sampleRate, 128);
var maxSamples = 1152;
var fd = fs.openSync(path.join("testdata", "testjs2.mp3"), "w");
var time = new Date().getTime();
for (var i = 0; remaining >= maxSamples; i += maxSamples) {
var left = samples.subarray(i, i + maxSamples);
var right = samples.subarray(i, i + maxSamples);
var mp3buf = lameEnc.encodeBuffer(left, right);
if (mp3buf.length > 0) {
fs.writeSync(fd, new Buffer(mp3buf), 0, mp3buf.length);
}
remaining -= maxSamples;
}
var mp3buf = lameEnc.flush();
if (mp3buf.length > 0) {
fs.writeSync(fd, new Buffer(mp3buf), 0, mp3buf.length);
}
fs.closeSync(fd);
time = new Date().getTime() - time;
console.log('done in ' + time + 'msec');
}
function testStereo44100() {
var r1 = fs.readFileSync(path.join("testdata", "Left44100.wav"));
var r2 = fs.readFileSync(path.join("testdata", "Right44100.wav"));
var fd = fs.openSync(path.join("testdata", "stereo.mp3"), "w");
var sampleBuf1 = new Uint8Array(r1).buffer;
var sampleBuf2 = new Uint8Array(r2).buffer;
var w1 = WavHeader.readHeader(new DataView(sampleBuf1));
var w2 = WavHeader.readHeader(new DataView(sampleBuf2));
var samples1 = new Int16Array(sampleBuf1, w1.dataOffset, w1.dataLen / 2);
var samples2 = new Int16Array(sampleBuf2, w2.dataOffset, w2.dataLen / 2);
var remaining1 = samples1.length;
var remaining2 = samples2.length;
assert(remaining1 == remaining2);
assert(w1.sampleRate == w2.sampleRate);
var lameEnc = new Mp3Encoder(2, w1.sampleRate, 128);
var maxSamples = 1152;
var time = new Date().getTime();
for (var i = 0; remaining1 >= maxSamples; i += maxSamples) {
var left = samples1.subarray(i, i + maxSamples);
var right = samples2.subarray(i, i + maxSamples);
var mp3buf = lameEnc.encodeBuffer(left, right);
if (mp3buf.length > 0) {
fs.writeSync(fd, new Buffer(mp3buf), 0, mp3buf.length);
}
remaining1 -= maxSamples;
}
var mp3buf = lameEnc.flush();
if (mp3buf.length > 0) {
fs.writeSync(fd, new Buffer(mp3buf), 0, mp3buf.length);
}
fs.closeSync(fd);
time = new Date().getTime() - time;
console.log('done in ' + time + 'msec');
}
testStereo44100();
testFullLength();