#spice #desktop #cross-platform #play #application #microphone #sounds #up

app soundboard

cross-plattform soundboard: play sounds over your microphone

3 unstable releases

0.1.1 Dec 25, 2020
0.1.0 Aug 4, 2020
0.0.2 Jun 30, 2020

#54 in Audio

21 downloads per month


10K SLoC

Rust 8K SLoC // 0.0% comments C 712 SLoC // 0.1% comments JavaScript 671 SLoC // 0.0% comments Python 165 SLoC // 0.0% comments Vue 26 SLoC


cratesio BuildDebug BuildRelease

cross-platform desktop application to spice up your audio/video conferences

(screenshot is out of date but captures the essence.)
More screenshots

webui telegramtextui gui

webui, telegram-bot, textui and gui

features (rust feature name: rfm)

  • play local and remote sounds to your microphone and output device
    • supported codecs
      • mp3 (rfm: mp3)
      • flac (rfm: flac)
      • wav (rfm: wav)
      • vorbis (rfm: vorbis)
      • opus (rfm: opus)
      • xm (rfm: xm, non-default)
    • supported sources (config example at the bottom):
      • local (files)
      • http
      • tts (rfm: text-to-speech)
      • spotify (rfm: spotify)
      • youtube
  • global hotkeys
    • default stop-hotkey for all sounds is CTRL-ALT-E
  • web user interface and http api (rfm: http)
    • default socket addr:
  • text user interface (rfm: textui)
  • native graphical user interface (rfm: gui, non-default)
    • First iteration. The web user interface is slicker and performs better.
  • telegram bot (rfm: telegram, non-default)
    • you need to create a bot and then specify your telegram-token
  • automatic handling of loopback device in pulse audio (rfm: auto-loop, non-default)

config, env and command line options

  • you can provide all options via the config file soundboard.toml, env variables SB_<option> or via the command line --<option>
    • example: gui = true or SB_GUI=true or --gui=true
  • use --help to see all options


  • simple: download compiled release package from https://github.com/gamebooster/soundboard/releases/
  • or via cargo: cargo install soundboard (compile time is a coffee break)
    • cargo install needed dependencies:
      • windows: llvm in PATH
      • unix: sudo apt-get install llvm autoconf libtool automake libpulse0 libgtk-3-dev
      • mac: brew install llvm opus
    • create soundboards directory with at least one soundboard (see below for example config)
  1. provide virtual microphone (instructions below)
  2. (optional) add youtube-dl and mkvextract to PATH variable or besides the soundboard executable to use youtube as source
  3. (optional) provide spotify-user and spotify-pass via args, config, or env to use spotify as source. You need a premium account.

default usage

  1. run soundboard --print-possible-devices
  2. run soundboard --loopback-device "<name>" or put in config file
    • loopback-device should be the installed virtual output device name
  3. Press hotkeys or use native gui or open web ui http://localhost:3030
  4. ???
  5. Press CTRL-C to exit or press x on window

providing virtual microphone on windows

  1. download and install vb-audio virtual cable from https://download.vb-audio.com/Download_CABLE/VBCABLE_Driver_Pack43.zip
  2. start soundboard with loopback device CABLE Input
  3. use applications with input CABLE Output

providing virtual microphone on linux

  1. create and choose loopback device
    a. use flag --auto-loop-device
    b. alternative: enter command pactl load-module module-null-sink sink_name=virtualSink
  2. start soundboard with loopback device null sink
  3. use applications with input Monitor of Null Sink or Monitor of SoundboadLoopbackDevice

providing virtual microphone on macos

  1. download and install soundflower kernel extension from https://github.com/mattingalls/Soundflower/releases
  2. set sample rate via Audio MIDI Setup for Soundflower (2ch) to 48000 hz
  3. start soundboard with loopback device: Soundflower (2ch)
  4. use applications with input: Soundflower (2ch)

config file example

soundboard.toml is optional. soundboards directory is mandatory.

config search path:

{soundboard exe location}
# input_device = "Mikrofonarray (Realtek High Definition Audio(SST))" # optional else default device
# output_device = "Speaker/HP (Realtek High Definition Audio(SST))" # optional else default device
loopback_device = "CABLE Input (VB-Audio Virtual Cable)" # required: change to your virtual loopback output

stop_hotkey = "CTRL-ALT-E" # stop all sound
name = 'favorites'
position = 0 # always position ahead of other soundboards

name = 'steam incoming'
source = {http = {url = 'https://www.myinstants.com/media/sounds/message_2.mp3'}}

hotkey = 'CTRL-P'
name = 'Nicht so tief, Rüdiger!'
source = {local = {path = 'nicht-so-tief-rudiger.mp3'}}

end = 10.5 # end sound timestamp, supported for all sources
name = "Sound of Silence"
source = {spotify = {id = "5y788ya4NvwhBznoDIcXwK"}}
start = 2 # start sound timestamp, supported for all sources

end = 18.5
name = "dreams"
source = {youtube = {id = "ZXsQAXx_ao0"}}
start = 14

end = 58
name = "tired"
source = {youtube = {id = "ZXsQAXx_ao0"}}
start = 53

name = '''Looks Like You're F'd'''
source = {http = {url = 'https://www.soundboard.com/handler/playTrack.ashx?id=893190', headers = [{name = 'referer', value = 'https://www.soundboard.com/'}]}}

name = "Hello World"
source = {tts = {ssml = '''
Hello World!
''', lang = "en-GB"}}
name = "Myinstants.com"

name = 'Falcon Punch'
source = {http = {url = 'https://www.myinstants.com//media/sounds/falconpunch.swf.mp3'}}

name = 'Knaller'
source = {http = {url = 'https://www.myinstants.com//media/sounds/videoplayback-2-online-audio-converter.mp3'}}
expected directory structure for example config files

For more examples: https://github.com/gamebooster/soundboard/tree/master/soundboards


~703K SLoC