discord-opus

JS bindings for libopus 1.3.1, ported with Emscripten.

Usage no npm install needed!

<script type="module">
  import discordOpus from 'https://cdn.skypack.dev/discord-opus';
</script>

README

discord-opus

JS bindings for libopus 1.3.1, ported with Emscripten.


Usage

const OpusEncoder = require("discord-opus");

// 48kHz sampling rate, 20ms frame duration, stereo audio (2 channels)
var samplingRate = 48000;
var frameDuration = 20;
var channels = 2;

// Optimize encoding for audio. Available applications are VOIP, AUDIO, and RESTRICTED_LOWDELAY
var encoder = new OpusEncoder(samplingRate, channels, OpusEncoder.Application.AUDIO);

var frameSize = samplingRate * frameDuration / 1000;

// Get PCM data from somewhere and encode it into OpusEncoder
var pcmData = new Buffer(pcmSource);
var encodedPacket = encoder.encode(pcmData, frameSize);

// Decode the OpusEncoder packet back into PCM
var decodedPacket = encoder.decode(encodedPacket);

// Delete the encoder when finished with it (Emscripten does not automatically call C++ object destructors)
encoder.delete();

Note: WASM

If your environment doesn't support WASM, you can try the JS-only module. Do note that the JS-only version barely has optimizations due to compiler/toolchain limitations, and should only be used as a last resort.

var encoder = new OpusEncoder(samplingRate, channels, OpusEncoder.Application.AUDIO, {
  wasm: false
});