Coder Social home page Coder Social logo

mp3's Introduction

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

mp3's People

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.