Euterpea: setting up audio on linux
Saturday, 3rd November, 2018
Euterpea requires ALSA:
$ apt-get install libasound2-dev
How to install Euterpea & HSoM, repeated from the Euterpea website:
Install the Haskell Platform from https://www.haskell.org/platform/, then:
$ cabal update
$ cabal install Euterpea
$ cabal install HSoM
Audio might work out of the box:
$ gchi GHCi, version 8.4.3: http://www.haskell.org/ghc/ :? for help Prelude> import Euterpea Prelude Euterpea> play $ c 4 qn Prelude Euterpea> devices -- Lists audio devices available. Input devices: InputDeviceID 1 Midi Through Port-0 Output devices: OutputDeviceID 0 Midi Through Port-0 Prelude Euterpea> playDev 0 $ c 4 qn
If either play or playDev (play to device) actually play a middle C out of your speakers, you are done. Hooray!
Otherwise, …
The Euterpea site links to Ted’s Linux MIDI Guide which gave me all the information I needed to set things up. It’s a very interesting article which I encourage you to read. I repeat the bare necessities below for convenience.
Ted provides this script which runs the software synthesizer (or “softsynth”) FluidSynth (so that, e.g., MIDI files can be converted to audio) and the sound server JACK (so that audio applications can communicate with each other).
Requirements:
$ apt-get install fluidsynth jackd2
You’ll have to logout and login again after installing JACK.
The script:
#!/bin/bash # Script to launch audio servers for music-making. case $1 in start ) echo Starting JACK... # Start JACK # As of Ubuntu 12.10, a period of 128 is needed for good fluidsynth # timing. (jackd 1.9.9, fluidsynth 1.1.5) # If you aren't running pulseaudio, you can remove the pasuspender line. pasuspender -- \ jackd -d alsa --device hw:0 --rate 44100 --period 128 \ &>/tmp/jackd.out & sleep .5 echo Starting fluidsynth... # Start fluidsynth fluidsynth --server --no-shell --audio-driver=jack \ --connect-jack-outputs --reverb=0 --chorus=0 --gain=0.8 \ /usr/share/sounds/sf2/FluidR3_GM.sf2 \ &>/tmp/fluidsynth.out & sleep 1 if pgrep -l jackd && pgrep -l fluidsynth then echo Audio servers running. else echo There was a problem starting the audio servers. fi ;; stop ) killall fluidsynth killall jackd echo Audio servers stopped. ;; * ) echo Please specify start or stop... ;; esac
You can call it “audio”, keep it in ~/bin, and use `audio start` and `audio stop` to start and stop the apps.
So now this should work:
$ audio start $ gchi GHCi, version 8.4.3: http://www.haskell.org/ghc/ :? for help Prelude> import Euterpea Prelude Euterpea> devices Input devices: InputDeviceID 1 Midi Through Port-0 Output devices: OutputDeviceID 0 Midi Through Port-0 OutputDeviceID 2 Synth input port (4424:0) Prelude Euterpea> playDev 2 $ c 4 qn