soundboard
cross-platform desktop application to spice up your audio/video conferences
(screenshot is out of date but captures the essence.)
More screenshots
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:
127.0.0.1:8080
- 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
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)
- provide virtual microphone (instructions below)
- (optional) add
youtube-dl
and mkvextract
to PATH variable or besides the soundboard executable to use youtube as source
- (optional) provide
spotify-user
and spotify-pass
via args, config, or env to use spotify as source. You need a premium account.
default usage
- run
soundboard --print-possible-devices
- run
soundboard --loopback-device "<name>"
or put in config file
- loopback-device should be the installed virtual output device name
- Press hotkeys or use native gui or open web ui http://localhost:3030
???
- Press
CTRL-C
to exit or press x on window
providing virtual microphone on windows
- download and install vb-audio virtual cable from https://download.vb-audio.com/Download_CABLE/VBCABLE_Driver_Pack43.zip
- start soundboard with loopback device
CABLE Input
- use applications with input
CABLE Output
providing virtual microphone on linux
- create and choose loopback device
a. use flag --auto-loop-device
b. alternative: enter command pactl load-module module-null-sink sink_name=virtualSink
- start soundboard with loopback device
null sink
- use applications with input
Monitor of Null Sink
or Monitor of SoundboadLoopbackDevice
providing virtual microphone on macos
- download and install soundflower kernel extension from https://github.com/mattingalls/Soundflower/releases
- set sample rate via Audio MIDI Setup for Soundflower (2ch) to 48000 hz
- start soundboard with loopback device:
Soundflower (2ch)
- 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