@etercast/mp3

1.0.2 • Public • Published

Etercast MP3 Encoder

Etercast

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 ❤️ by ROJO 2

Readme

Keywords

Package Sidebar

Install

npm i @etercast/mp3

Weekly Downloads

0

Version

1.0.2

License

GPL-3.0

Unpacked Size

39.2 kB

Total Files

3

Last publish

Collaborators

  • aitormm
  • azazeln28