making music in the shell -- with Soundb0ard
Damn. What a rabbit hole! Live Coding. I’ve never been into this too much in the past, but currently I have read this nice interview from Cycling74 with Thorsten Sideboard.
…and then I stumbled across this video of him. Hell yes, what a cool dude!
…and an awesome performance with his handcrafted live coding platform Soundb0ard. A treasure and all open-source. 🔥
I wanted to try it out immediately. Here are my steps.
Building and running Soundb0ard
First clone
git clone git@github.com:sideb0ard/SoundB0ard.git
My steps on my Mac OS system were:
Install some libraries
PortAudio
http://www.portaudio.com/download.html
./configure --disable-mac-universal && make
make install
This is the only library I installed without using brew. I thought this would be fun, but brew is so much less pain:
brew install portaudio
PortMidi
http://portmedia.sourceforge.net/portmidi/
brew install portmidi
libsndfile
http://www.mega-nerd.com/libsndfile/
brew install libsndfile
ctags
brew install ctags
cscope
http://cscope.sourceforge.net/
brew install cscope
liblo
brew install liblo
readline
brew install readline
Ableton Link
Clone Link from https://github.com/ableton/link
|
|
Range-v3
https://github.com/ericniebler/range-v3
Googletest
https://github.com/google/googletest
Google Performance Tools
https://github.com/gperftools/gperftools
brew install gperftools
Update CMakeLists.txt
mkdir -p cmake wget -O cmake/CPM.cmake https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake
Update the Makefile
There are some path settings which needs to be changed in the Makefile
.
|
|
These are of course specific to my current system.
make it
…and then a simple make
is enough to build the application.
$ make
$ Boom! make some noise...
Good point. Lets try it out.
How to play with it
You can start the shell by running ./sbsh
from the command line and you are presented a nice colorful intro screen:
I want to collect some infos about the commands and keyboard shortcuts. I haven’t found a full documentation yet, but try to figure some stuff by playing around.
WORK IN PROGRESS
keyboard shortcuts
- control + D : Exit soundb0ard shell
shell commands
ps
: show running processes with instruments and algorithmsls
: list samples inwavs/
folder
Looping a sample
|
|
VEH4-24.wav
is in this case a wav file I put into the wavs/loops/
folder.
Setting BPM
|
|
Loading and playing a sample
Trying to play a simple kick.
|
|
Play it using a pattern
|
|
it seems that you can have up to 99
pattern (p1
- p99
).
Adding effects to a loop
|
|
With addFx
you can add couple of effects:
bitcrush
compressor
delay
(default delay 200ms)filter
reverb
sidechain
moddelay
modfilter
waveshape
sidechain
requires a second argument, which defines the trigger signal used for sidechaining (What is sidechaing? See this nice article by Ableton). For example a kick:
|
|
Set volume of a track
You can set the volume to a track with a value range of [0.0, 1.0]
|
|
Modify the looper loops
In the examples above I have used the looper using the loop
command.
The looper allows some modifications:
active
:set l1:active 0
to deactivate andset l1:active 1
to activatepitch
mode
gate_mode
idx
len
scamble
stutter
step
reverse
grain_dur_ms
grains_per_sec
density_dur_sync
quasi_grain_fudge
fill_factor
grain_spray_ms
selection_mode
env_mode
The Moog MiniSynth
There is this minisynth included callled moog
. And there are a bunch of presets already included in the file moogpresets.dat which can be loaded using loadPreset
:
|
|
Presets include e.g.
sharpie
wiffle
rumbllrrSQR2
androidDreams
For a full list take a look on the .dat
file.
with #
instead of $
you can send MIDI notes to the device:
|
|
Pattern
This is currently the most confusing part on my side.
|
|
[]
: pattern group<>
: multi step pattern()
: setting euclidian rhythm e.g. ((3,8)
,(5,13)
)$
: prepending this allows you to access values from the[Env]
environment – like your loaded samples etc.#
: this allows you to work with values and assign it to a target (e.g. sending MIDI notes to a synth)
…only the beginning. Will continue to add more infos when I am ready :)