A FLAC metadata processor for Node.js, implemented as Transform stream.
npm install flac-metadata2
Some simple examples to get you started:
Does nothing, just pipes a source FLAC through the Processor into a target FLAC.
var fs = require("fs");
var flac = require("flac-metadata2");
var reader = fs.createReadStream("source.flac");
var writer = fs.createWriteStream("target.flac");
var processor = new flac.Processor();
reader.pipe(processor).pipe(writer);
Traces out the metadata from a FLAC file.
var fs = require("fs");
var flac = require("flac-metadata2");
var reader = fs.createReadStream("source.flac");
var processor = new flac.Processor({ parseMetaDataBlocks: true });
processor.on("postprocess", function(mdb) {
console.log(mdb.toString());
});
reader.pipe(processor);
The output should be something like this:
[MetaDataBlockStreamInfo] type: 0, isLast: false
minBlockSize: 4096
maxBlockSize: 4096
minFrameSize: 14
maxFrameSize: 12389
samples: 9750804
sampleRate: 44100
channels: 2
bitsPerSample: 16
duration: 3:41.107
checksum: 1746dff27beb6d1875a88cfeed8a576b
[MetaDataBlockVorbisComment] type: 4, isLast: false
vendor: reference libFLAC 1.2.1 20070917
comments:
ALBUM: Close to the Glass
ARTIST: The Notwist
GENRE: Rock
DATE: 2014
TITLE: Signals
[MetaDataBlockPicture] type: 6, isLast: true
pictureType: 3
mimeType: image/png
description:
width: 120
height: 120
bitsPerPixel: 32
colors: 0
pictureData: 391383
Pipes a source FLAC through the Processor into a target FLAC, removing all metadata.
var fs = require("fs");
var flac = require("flac-metadata2");
var reader = fs.createReadStream("source.flac");
var writer = fs.createWriteStream("target.flac");
var processor = new flac.Processor();
processor.on("preprocess", function(mdb) {
// STREAMINFO is always the first (and only mandatory) metadata block.
if (mdb.type === flac.Processor.MDB_TYPE_STREAMINFO) {
// When a metadata block's isLast flag is set to true in preprocess,
// subsequent blocks are automatically discarded.
mdb.isLast = true;
}
});
reader.pipe(processor).pipe(writer);
Injects a VORBIS_COMMENT block (and removes the existing one, if any).
var fs = require("fs");
var flac = require("flac-metadata2");
var reader = fs.createReadStream("source.flac");
var writer = fs.createWriteStream("target.flac");
var processor = new flac.Processor();
var vendor = "reference libFLAC 1.2.1 20070917";
var comments = [
"ARTIST=Boyracer",
"TITLE=I've Got It And It's Not Worth Having",
"ALBUM=B Is For Boyracer",
"TRACKNUMBER=A1",
"DATE=1993",
"DISCOGS=22379"
];
processor.on("preprocess", function(mdb) {
// Remove existing VORBIS_COMMENT block, if any.
if (mdb.type === flac.Processor.MDB_TYPE_VORBIS_COMMENT) {
mdb.remove();
}
// Inject new VORBIS_COMMENT block.
if (mdb.removed || mdb.isLast) {
var mdbVorbis = flac.data.MetaDataBlockVorbisComment.create(mdb.isLast, vendor, comments);
this.push(mdbVorbis.publish());
}
});
reader.pipe(processor).pipe(writer);
MIT