70 lines
2.0 KiB
Markdown
70 lines
2.0 KiB
Markdown
|
node-lame
|
||
|
=========
|
||
|
### NodeJS native bindings to libmp3lame & libmpg123
|
||
|
[![Build Status](https://travis-ci.org/TooTallNate/node-lame.svg?branch=master)](https://travis-ci.org/TooTallNate/node-lame)
|
||
|
|
||
|
For all your async streaming MP3 encoding/decoding needs, there's `node-lame`!
|
||
|
This module hooks into libmp3lame, the library that the `lame` command uses, to
|
||
|
provide `Encoder` and `Decoder` streams to NodeJS.
|
||
|
|
||
|
|
||
|
Installation
|
||
|
------------
|
||
|
|
||
|
`node-lame` comes bundled with its own copy of `libmp3lame` and `libmpg123`, so
|
||
|
there's no need to have them installed on your system.
|
||
|
|
||
|
Simply compile and install `node-lame` using `npm`:
|
||
|
|
||
|
``` bash
|
||
|
$ npm install lame
|
||
|
```
|
||
|
|
||
|
|
||
|
Example
|
||
|
-------
|
||
|
|
||
|
Here's an example of using `node-lame` to encode some raw PCM data coming from
|
||
|
`process.stdin` to an MP3 file that gets piped to `process.stdout`:
|
||
|
|
||
|
``` javascript
|
||
|
var lame = require('lame');
|
||
|
|
||
|
// create the Encoder instance
|
||
|
var encoder = new lame.Encoder({
|
||
|
// input
|
||
|
channels: 2, // 2 channels (left and right)
|
||
|
bitDepth: 16, // 16-bit samples
|
||
|
sampleRate: 44100, // 44,100 Hz sample rate
|
||
|
|
||
|
// output
|
||
|
bitRate: 128,
|
||
|
outSampleRate: 22050,
|
||
|
mode: lame.STEREO // STEREO (default), JOINTSTEREO, DUALCHANNEL or MONO
|
||
|
});
|
||
|
|
||
|
// raw PCM data from stdin gets piped into the encoder
|
||
|
process.stdin.pipe(encoder);
|
||
|
|
||
|
// the generated MP3 file gets piped to stdout
|
||
|
encoder.pipe(process.stdout);
|
||
|
```
|
||
|
|
||
|
See the `examples` directory for some more example code.
|
||
|
|
||
|
API
|
||
|
---
|
||
|
|
||
|
### Decoder class
|
||
|
|
||
|
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).
|
||
|
|
||
|
### Encoder class
|
||
|
|
||
|
The `Encoder` class is a `Stream` subclass that accepts raw PCM data written to
|
||
|
it, and outputs a valid MP3 file. You must specify the PCM data format when
|
||
|
creating the encoder instance. Only 16-bit signed samples are currently
|
||
|
supported (rescale before passing to the encoder if necessary)...
|