UNPKG

@vincaslt/mp3

Version:
101 lines (73 loc) 2.68 kB
# Etercast MP3 Encoder ![Etercast](https://etercast.com/images/og_landscape.jpg) This repository contains part of the [Etercast](https://etercast.com) MP3 encoding library. It uses [LAME](https://lame.sourceforge.io/) and C/C++ -> WebAssembly compiler [Emscripten](https://emscripten.org). ## How to use it ```javascript 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: ```javascript "staticFiles": { "staticPath": [ "node_modules/@etercast/mp3/dist" ], "excludeGlob": [ "*.{js,mjs,cjs}" ] } ``` ### Webpack TODO: Add webpack documentation ## How to build it If you have [Emscripten](https://emscripten.org) installed locally then you can run: ```sh make ``` Otherwise you can use the [Docker](https://www.docker.com/) image by [trcezi](https://hub.docker.com/r/trzeci/emscripten) to build the MP3 encoder by executing: ```sh 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: ```sh npm run build:docs ``` ## Demo If you want to see a live demo running, run: ```sh npm run serve:examples ``` Made with :heart: by [ROJO 2](https://rojo2.com)