Skip to content

WetaLab/Mixer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mixer

Mixer is a lightweight audio mixer for Discord bots using @discordjs/voice. It allows you to play multiple audio streams simultaneously with individual stream attribute control.

Features

  • Join voice channel and play raw PCM audio
  • Mix multiple sources into one output
  • Per-stream volume control
  • Auto cleanup after playback

Installation

npm install @wetalabs/mixer

Usage

const { joinVoiceChannel } = require("@discordjs/voice");
const Mixer = require("@wetalabs/mixer");

const mixer = new Mixer();

const connection = joinVoiceChannel({
  channelId: voiceChannel.id,
  guildId: guild.id,
  adapterCreator: guild.voiceAdapterCreator,
});

mixer.attachConnection(connection);

await mixer.playSound("intro", "./sounds/intro.mp3", 0.8);

mixer.resetAll();
connection.destroy();

API

attachConnection(connection)

Attaches an existing Discord voice connection to the mixer. Must be called before playing any sounds.

  • Params:

    • connection: A valid voice connection object from @discordjs/voice.

detachConnection()

Detaches the current voice connection and stops playback. Does not destroy the connection.


playSound(soundId, filePath, volume?)

Plays a sound from the given file path with a unique ID and optional volume. Requires attachConnection() to be called first.

  • Params:

    • soundId: A unique identifier for the sound.
    • filePath: Path to a valid audio file.
    • volume? (optional): A number between 0.0 and 1.0 (default is 1.0).

stopSound(soundId)

Stops and removes a currently playing sound by its ID.

  • Params:

    • soundId: The ID of the sound to stop.

setVolume(soundId, volume)

Changes the volume of a currently playing sound.

  • Params:

    • soundId: The ID of the sound.
    • volume: A number between 0.0 and 1.0.

resetAll()

Stops all currently playing sounds and resets the mixer state. Note: This does not disconnect the voice connection - use detachConnection() for that.

Events

Mixer extends EventEmitter and emits events you can hook into:

Event Description Callback Args
play Emitted when a sound starts playing soundId
end Emitted when a sound finishes playing soundId
stop Emitted when a sound is manually stopped soundId
volume Emitted when volume is changed soundId, volume
error Emitted on playback/streaming error soundId, error
reset Emitted when resetAll() is called -
attached Emitted when a connection is attached -
detached Emitted when the connection is detached -

License

MIT

About

A simple audio mixer for Discord voice bots using discord.js/voice for simultaneous audio playback

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors