JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 10
  • Score
    100M100P100Q53094F
  • License Unlimited Free

WASM (WebAssembly) encode/decode mp3/ogg/opus/vorbis from/to Float32Array. Well tested @ffmpeg/ffmpeg wrapper.

Package Exports

  • @flemist/ffmpeg-encode-decode
  • @flemist/ffmpeg-encode-decode/dist/index.cjs
  • @flemist/ffmpeg-encode-decode/dist/index.mjs

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@flemist/ffmpeg-encode-decode) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

NPM Version NPM Downloads Build Status Test Coverage

Well tested WASM (WebAssembly) in-memory encoder/decoder mp3/ogg/opus/vorbis from/to Float32Array based on @flemist/ffmpeg.wasm-st

I think this should work in the browser, but I haven't tested.

import {
  ffmpegDecode,
  ffmpegEncode,
  AudioSamples,
  ffmpegEncodeVorbisParams,
  ffmpegEncodeMp3Params,
  ffmpegEncodeOpusParams,
  getFFmpeg,
} from '@flemist/ffmpeg-encode-decode'

// Optional: preload ffmpeg library and enable logger
getFFmpeg({
  log   : true,
  logger: ({message}) => console.log(message),
})

export async function example() {
  const samples: AudioSamples = {
    data      : new Float32Array(16000 * 2 * 7), // 7 seconds of silence
    sampleRate: 16000,
    channels  : 2,
  }

  // encode mp3
  const mp3Data: Uint8Array = await ffmpegEncode(samples, {
    outputFormat: 'mp3', // same as file extension
    channels    : 1, // auto convert to mono
    // docs: http://ffmpeg.org/ffmpeg-codecs.html#libmp3lame
    params      : ffmpegEncodeMp3Params({
      bitrate    : 64,
      mode       : 'abr',
      jointStereo: true,
    }),
  })

  // encode ogg vorbis
  const oggVorbisData: Uint8Array = await ffmpegEncode(samples, {
    outputFormat: 'ogg', // same as file extension
    channels    : 1, // auto convert to mono
    // docs: http://ffmpeg.org/ffmpeg-codecs.html#libvorbis
    params      : ffmpegEncodeVorbisParams({
      vbr       : true,
      vbrQuality: 3,
    }),
  })

  // encode ogg opus
  // !! Attention opus encoder heavily distorts samples data
  const oggOpusData: Uint8Array = await ffmpegEncode(samples, {
    outputFormat: 'opus', // same as file extension
    channels    : 1, // auto convert to mono
    // docs: http://ffmpeg.org/ffmpeg-codecs.html#libopus-1
    params      : ffmpegEncodeOpusParams({
      bitrate      : 32,
      vbr          : 'on',
      frameDuration: 40,
    }),
  })

  // Auto recognize/detect/determine and decode any audio formats that supports in @flemist/ffmpeg.wasm-st library:
  
  const mp3Samples: AudioSamples = await ffmpegDecode(mp3Data, {
    channels  : 2, // auto convert mono to stereo (notice - this will turn the volume down to 60%)
    sampleRate: 32000, // auto convert sampleRate
  })

  const oggVorbisSamples: AudioSamples = await ffmpegDecode(oggVorbisData, {
    channels  : 2, // auto convert mono to stereo (notice - this will turn the volume down to 60%)
    sampleRate: 32000, // auto convert sampleRate
  })

  const oggOpusSamples: AudioSamples = await ffmpegDecode(oggOpusData, {
    channels  : 2, // auto convert mono to stereo (notice - this will turn the volume down to 60%)
    sampleRate: 32000, // auto convert sampleRate
  })
}

License

Unlimited Free