node-addon-mpg123
is based on TooTallNate/node-lame and removed lame
related code to keep it simple. And extended the Decoder
to support decoding format options.
For all your async streaming MP3 decoding needs, there's node-addon-mpg123
!
This module hooks into libmpg123, the library that the mpg123
command uses, to
provide Decoder
streams to node.js.
node-addon-mpg123
comes bundled with its own copy of libmpg123
, so
there's no need to have them installed on your system.
Simply compile and install nampg123
using npm
:
$ npm i nampg123
Here's an example of using node-addon-mpg123
to decode an MP3 file coming from
process.stdin
to some raw PCM data that gets piped to process.stdout
:
const mpg123 = require('nampg123');
// create the Decoder instance
const decoder = new mpg123.Decoder();
// MP3 data from stdin gets piped into the decoder
process.stdin.pipe(decoder);
// the raw PCM data gets piped to stdout
decoder.pipe(process.stdout);
See test/decoder.js
for some more example code.
The Decoder
class is a Stream
subclass that accepts MP3 data written to it,
and outputs raw PCM data. It also emits a "format"
event when the format of
the MP3 file is determined (usually right at the beginning). You can specify
the output PCM data format when creating the decoder instance.
const mpg123 = require('nampg123');
const decoder = new mpg123.Decoder({
sampleRate: 44100, // [8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000]
channels: mpg123.STEREO, // [mpg123.MONO, mpg123.STEREO, mpg123.MONO | mpg123.STEREO]
signed: false, // [true, false]
float: true, // [true, false]
bitDepth: 32, // [8, 16, 24, 32]
});
channels
option is different from the TooTallNate/node-lame
encoder.
See more about mpg123 encoding formats: https://github.com/mdluo/node-addon-mpg123/blob/master/deps/mpg123/src/libmpg123/mpg123.h.in#L348-L395