Keyboard piano on the Raspberry Pi (with FluidSynth)

A while ago I wrote about the plans of using the Raspberry Pi as a synthesizer for the Midi keyboard. You can read about the steps to get this working on Windows over here. But this post is about getting it to work with the Raspberry Pi step-by-step.

First connect your keyboard (with USB) to the RPi (Raspberry Pi).

Install Fluidsynth

$ sudo apt-get update
$ sudo apt-get install fluidsynth

And run Fluidsynth with ALSA as audio driver

$ fluidsynth --audio-driver=alsa --gain=5 /usr/share/sounds/sf2/FluidR3_GM.sf2

Now load the sf2 sound font file in the Fluidsynth shell (>) and set the gain at maximum (needed with my headphones).

> load /usr/share/sounds/sf2/FluidR3_GM.sf2
> gain 5

Also make sure the system volume is not to low with the following command (use screen or another console to keep Fluidsynth running)

$ alsamixer

With the following command you can check if it is recognized as an Midi Keyboard and at which channel Fluidsynth is listening

$ aconnect -o

This should give an output like this:

client 14: 'Midi Through' [type=kernel]
0 'Midi Through Port-0'
client 20: 'USB Keystation 61es' [type=kernel]
0 'USB Keystation 61es MIDI 1'
client 128: 'FLUID Synth (2975)' [type=user]
0 'Synth input port (2975:0)'

In order to test if the key strokes are received from the keyboard use this command.

$ aseqdump -p xx

Where xx is the client number of the keyboard from the previous command which is 20 for me.

To connect the keyboard to Fluidsynth use

$ aconnect xx:0 yy:0

Where xx is again the Midi client id of the keyboard and yy is the client id of Fluidsynth.

Now enjoy your beautiful piano tunes without the need of a full blown computer!

References:

https://wiki.archlinux.org/index.php/USB_Midi_Keyboards

http://tedfelix.com/linux/linux-midi.html

9 Comments

  1. Thanks for the info, very helpful. My M-Audio Axiom 49 keyboard and Raspberry Pi running Fluidsynth are now connected- working well and sounding good.

  2. I tried this with a Raspberry Pi 2B running Raspbian and there's too much latency sadly. Sometimes it delays before playing a note or switching between notes. Bummer. Maybe with a Pi 3 it would work better??

  3. A bit far removed from your last comment; I'm new to Pi/Linux, any idea how to set this up so it's automatically loaded every time you switch the Pi on?

  4. The latency is a consequence of the PWM-audio of the plain vanilla Rasbperry. Although it is possible to reduce it by fiddeling with the audio parameters, it never vanishes completely.
    Your best bet is to buy a simple USB audio sound card. Those are inexpensive in our days and once installed (which is simple, if Rasbian knows the chipset), the latency is immediately gone.

    As for autostarting fluidsynth: Once you figured the the entire startup sequence for fluidsynth (in server mode) and how to connect it the keyboard, you include those commands in /etc/rc.local
    After trying a lot of different ways on how to configure fluidsynth without the help of the fluidsynth command line, I figured out that it is possible to specify a command file to fluidsynth (-f option). Just include your commands in a file and specify it to fluidsynth. This was necessary as I wanted to load multiple soundfonts and needed to modify the bank numbers during the load to differentiate them.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.