Using Supercollider with Vim on Linux

Supercollider is an open source programming language used for real time audio synthesis and music making. It’s really cool. When I first looked into it I found it a little confusing to set up on Linux as it requires you use the JACK sound server, so I’m going to outline how I set it up to work with Vim, my favourite editor.

1: Install Supercollider and JACK

Supercollider and JACK are mature and well established projects, so they’re most likely in your distribution’s package manager.

sudo apt-get install supercollider jackd2

2. Configure JACK

Rather than manually starting JACK each time we want to use Supercollider we can configure JACK to automatically start when required. First we need to find out the name of our audio interface.

louis ~ $ cat /proc/asound/cards
0 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xf6110000 irq 44
1 [NVidia         ]: HDA-Intel - HDA NVidia
                      HDA NVidia at 0xf6080000 irq 17
2 [UDJ6           ]: USB-Audio - UDJ6
                  ESI Audiotechnik GmbH UDJ6...

Here we can see the name of my ESI UDJ6 USB audio interface is UDJ6. We can now write the command that will launch the JACK server. Here’s mine:

/usr/bin/jackd -R -P 95 -d alsa -d hw:UDJ6 -r 44100 -p 256

Once you’ve written your command, and ensured that it works save it in ~/.jackdrc- this will result in JACK automatically starting when required.

Check out the jackd man page for more info on the flags used in the command above.

3. Configure Vim

Install Stephen ‘sbl’ Lumenta’s version of the scvim plugin. I like to use gmarik’s plugin manager Vundle for this.

With the plugin installed, open a .sc file and run the :SClangStart command to start Supercollider in a new terminal emulator window. scvim now has a sensible default terminal on Linux, so if you’re lucky this will just work. If it doesn’t you probably need to set the g:sclangTerm value in your .vimrc. Here’s an example for gnome-terminal:

let g:sclangTerm = "gnome-terminal -x $SHELL -ic"

4. Profit

That’s it for setup. Lets see if it works.

Open a new .sc file in Vim, run :SClangStart, and insert the following Supercollider code into vim.

s.boot;
(
  Pbind(
    \freq, Pn(Pseries(110, 111, 10), 2),
    \dur, 1/2,
    \legato, Pwhite(0.1, 1)
  ).play;
    Pbind(
    \freq, Pn(Pseries(220, 222, 10), 4),
    \dur, 1/4,
    \legato, Pwhite(0.1, 1)
  ).play;
  Pbind(
    \freq, Pn(Pseries(330, 333, 10), 6),
    \dur, 1/6,
    \legato, 0.1
  ).play;
)

Place your cursor on the s.boot; line, and hit F6 to evaluate that line, and start the Supercollider server. Then place your cursor within the ( ) block and press F5 to evaluate that block. Hear some jangly piano noises? Then you’re ready to start making music with Supercollider and Vim :)


Special thanks to Carlo Capocasa for his super useful blog post on JACK.