wav
Version:
`Reader` and `Writer` streams for Microsoft WAVE audio files
51 lines (44 loc) • 1.83 kB
JavaScript
/**
* Pipe a WAVE file to stdin, or specify the filename as the first argument,
* and information about the wave file will be printed out.
*
* Mimics the `wavinfo` program:
* http://www.morphet.org.uk/comp/wavtools.html
*/
var fs = require('fs');
var wav = require('../');
var filename = process.argv[2];
var input;
var reader = new wav.Reader();
if (filename) {
console.log('Header info for: %s', filename);
input = fs.createReadStream(filename);
} else {
console.log('Header info for: STDIN');
input = process.stdin;
}
input.pipe(reader);
// the "readable" event will always come *after* the "format" event, but by now
// a few final properties will have been parsed like "subchunk2Size" that we want
// to print out to simulate the wavinfo(1) command
reader.once('readable', function () {
console.log('WaveHeader Size:\t%d', 12);
console.log('ChunkHeader Size:\t%d', 8);
console.log('FormatChunk Size:\t%d', reader.subchunk1Size);
console.log('RIFF ID:\t%s', reader.riffId);
console.log('Total Size:\t%d', reader.chunkSize);
console.log('Wave ID:\t%s', reader.waveId);
console.log('Chunk ID:\t%s', reader.chunkId);
console.log('Chunk Size:\t%d', reader.subchunk1Size);
console.log('Compression format is of type: %d', reader.audioFormat);
console.log('Channels:\t%d', reader.channels);
console.log('Sample Rate:\t%d', reader.sampleRate);
console.log('Bytes / Sec:\t%d', reader.byteRate);
console.log('wBlockAlign:\t%d', reader.blockAlign);
console.log('Bits Per Sample Point:\t%d', reader.bitDepth);
// TODO: this should end up being "44" or whatever the total length of the WAV
// header is. maybe emit "format" at this point rather than earlier???
console.log('wavDataPtr: %d', 0);
console.log('wavDataSize: %d', reader.subchunk2Size);
console.log();
});