0.1.4 • Published 3 years ago

mp3-header v0.1.4

Weekly downloads
5
License
MIT
Repository
github
Last release
3 years ago

Node.js MP3 Header Parsing

npm install mp3-header

Full working example (mp3)

const fs        = require("fs");
const Mp3Header = require("mp3-header").Mp3Header;

const HEADER_LENGTH = 4;

fs.open("filename.mp3", 'r', function(err, fd) {

    var buffer  = new Buffer(HEADER_LENGTH);

    // The offset in the mp3 file where there is a valid MP3 frame
    var offset  = 0;

    fs.read(fd, buffer, 0, HEADER_LENGTH, offset, function(err, bytesRead, buffer) {

        if (err) {
            return fs.close(fd);
        }

        var header = new Mp3Header(buffer);
        if (header.parsed && header.is_valid) {
            console.info("MP3 Sample Rate: ", header.mpeg_samplerate);
        }

        fs.close(fd);
    });
});

Full working example (XING)

const fs         = require("fs");
const XingHeader = require("mp3-header").XingHeader;

const MAX_FRAME_LENGTH = 2881; // Theoretical max mp3 frame length

fs.open( "filename.mp3", 'r', function(err, fd) {

    var buffer  = new Buffer(MAX_FRAME_LENGTH);

    // The offset in the mp3 file where there is a valid Xing header
    var offset  = 0;

    fs.read(fd, buffer, 0, MAX_FRAME_LENGTH, offset, function(err, bytesRead, buffer) {

        if (err) {
            return fs.close(fd);
        }

        var header = new XingHeader(buffer);
        if (header.parsed && header.is_valid) {
            console.info("Number of audio frames: ", header.xing_frames);
        }

        fs.close(fd);
    });
});

Classes

The package exports two classes for parsing MP3 file headers: Mp3Header and XingHeader.

Mp3Header is the one that takes care of parsing the MPEG header of an MP3 audio frame, and provides informations about the encoding.

XingHeader is an extension Mp3Header that also takes care of parsing the metadata related to the Xing table of the MP3 file.

Properties

Once you parse a header, these are the properties you can access from the package classes:

ParameterTypePresent inExample
parsedBooleanBothtrue
is_validBooleanBothtrue
mpeg_versionIntegerBoth2
mpeg_layerIntegerBoth3
mpeg_has_paddingBooleanBothtrue
mpeg_channelsIntegerBoth1 (mono) or 2 (stereo)
mpeg_bitrateIntegerBoth128000
mpeg_samplerateIntegerBoth44100
mpeg_num_samplesIntegerBoth1152
mpeg_frame_lengthIntegerBoth384
xing_offsetIntegerXingHeader21
xing_framesIntegerXingHeader223
xing_bytesIntegerXingHeader43008
xing_keywordStringXingHeaderXing (VBR) or Info (CBR)
xing_flagsIntegerXingHeader
xing_has_framesBooleanXingHeadertrue
xing_has_bytesBooleanXingHeadertrue
xing_frames_offsetIntegerXingHeader
xing_bytes_offsetIntegerXingHeader

Run test suite

grunt test

More info

License

MIT

0.1.4

3 years ago

0.1.3

6 years ago

0.1.2

7 years ago

0.1.1

7 years ago

0.1.0

7 years ago