1.0.2 • Published 6 years ago
@etercast/mp3 v1.0.2
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:
makeOtherwise you can use the Docker image by trcezi to build the MP3 encoder by executing:
npm run build:emscriptenHow 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:docsDemo
If you want to see a live demo running, run:
npm run serve:examplesMade with :heart: by ROJO 2