@etercast/mp3
v1.0.2
Published
Etercast MP3 encoder
Downloads
6
Readme
Etercast MP3 Encoder
This repository contains part of the Etercast MP3 encoding library. It uses LAME and C/C++ -> WebAssembly compiler Emscripten.
How to use it
import instantiate from '@etercast/mp3'
// instantiate() function fetches and instantiates the WASM module
// and returns a Encoder class.
// If you upload the mp3.wasm to a CDN you can specify the
// WASM url by passing it to instantiate.
// const Encoder = await instantiate('https://mycdn.com/mp3.wasm')
const Encoder = await instantiate()
// You can also use Encoder.create()
const encoder = new Encoder({
sampleRate: audioContext.sampleRate,
samples: 2048,
numChannels: 1
})
// leftChannelData must be a Float32Array with 2048 (the
// specified in the encoder samples option) samples.
// rightChannelData is optional (can be null or undefined).
const encodedMP3Frames = encoder.encode(leftChannelData, rightChannelData)
// Remaining MP3 encoded frames. It flushes available MP3
// frames not returned in the previous call.
const remainingEncodedMP3Frames = encoder.encode()
const blob = new Blob([
encodedMP3Frames,
remainingEncodedMP3Frames
], {
type: 'audio/mp3'
})
const url = URL.createObjectURL(blob)
const a = document.createElement('a')
a.href = url
a.download = 'audio.mp3'
a.dispatchEvent(new MouseEvent('click'))
You need to copy mp3.wasm
from node_modules/@etercast/mp3/dist/mp3.wasm
into your dist
or public
folder.
Parcel
If you're using parcel you can achieve this by using the plugin parcel-plugin-static-files-copy
and modifying
your package.json
to include this:
"staticFiles": {
"staticPath": [
"node_modules/@etercast/mp3/dist"
],
"excludeGlob": [
"*.{js,mjs,cjs}"
]
}
Webpack
TODO: Add webpack documentation
How to build it
If you have Emscripten installed locally then you can run:
make
Otherwise you can use the Docker image by trcezi to build the MP3 encoder by executing:
npm run build:emscripten
How to build documentation
Calling npm run build
will build this documentation but if you want to build documentation specifically you can run:
npm run build:docs
Demo
If you want to see a live demo running, run:
npm run serve:examples
Made with :heart: by ROJO 2