gamebooster / soundboard

cross-platform desktop application to spice up your audio/video conferences
GNU Affero General Public License v3.0
70 stars 7 forks source link
audio cross-platform desktop fun rust soundboard

soundboard

cratesio BuildDebug BuildRelease

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

nativeui
(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)

config, env and command line options

install

    • 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 libclang-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}
$XDG_CONFIG_HOME/soundboard/
$HOME/.config/soundboard/
$HOME/.soundboard/
soundboard.toml ``` # 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 ```
soundboards/favorites.toml ``` name = 'favorites' position = 0 # always position ahead of other soundboards [[sound]] name = 'steam incoming' source = {http = {url = 'https://www.myinstants.com/media/sounds/message_2.mp3'}} [[sound]] hotkey = 'CTRL-P' name = 'Nicht so tief, Rüdiger!' source = {local = {path = 'nicht-so-tief-rudiger.mp3'}} [[sound]] 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 [[sound]] end = 18.5 name = "dreams" source = {youtube = {id = "ZXsQAXx_ao0"}} start = 14 [[sound]] end = 58 name = "tired" source = {youtube = {id = "ZXsQAXx_ao0"}} start = 53 [[sound]] 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/'}]}} [[sound]] name = "Hello World" source = {tts = {ssml = ''' Hello World! ''', lang = "en-GB"}} ```
soundboards/myinstants_soundboard.toml ``` name = "Myinstants.com" [[sound]] name = 'Falcon Punch' source = {http = {url = 'https://www.myinstants.com//media/sounds/falconpunch.swf.mp3'}} [[sound]] name = 'Knaller' source = {http = {url = 'https://www.myinstants.com//media/sounds/videoplayback-2-online-audio-converter.mp3'}} ```
expected directory structure for example config files ``` soundboard.toml soundboards/ favorites/ nicht-so-tief-rudiger.mp3 favorites.toml myinstants_soundboard.toml ```

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