This program is a simple graphical synthesizer interface, for managing soundfont files with FluidSynth. It allows you to easily cycle through the soundfonts and instruments, search for soundfonts, select channels, and set levels for gain/reverb/chorus. This interface is a Gnome alternative to Qsynth. See screenshots below. (Written in Python)
License
sevkeifert/fluidsynth-gui
master
Name already in use
Code
-
Clone
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.
- Open with GitHub Desktop
- Download ZIP
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Kevin Seifert - 2015 GPL
-------------------------------------------------------------------------------
SYSTEM REQUIREMENTS
-------------------------------------------------------------------------------
You'll need:
FluidSynth (you should configure for command line first)
Python 2.7+
python-wxgtk2.8+
on Linux you'll also need:
jack (and QjackCtl is recommended)
In theory this GUI can work with Windows, Mac and Linux since it's just using
fluidsynth's socket interface (over port 9800). I use Linux as my primary OS,
however, and so far I've only tested it with:
xubuntu 14.04
Ubuntu Mate 16.04, 18.04
FluidSynth 1.1.6, 1.1.9
-------------------------------------------------------------------------------
HOW TO USE THE GRAPHICAL USER INTERFACE
-------------------------------------------------------------------------------
1. Select a folder that contains *.sf2 files.
Either browse for a folder or type it directly in the text box.
2. UP/DOWN arrows will cycle through the SoundFont files.
3. LEFT/RIGHT arrows will cycle through the instruments in each file
4. Also, you can type a search filter while the SoundFont list has focus.
SPACE is translated to a wildcard
ESCAPE completely clear the search filter
BACKSPACE/DELETE delete the last character(s) typed
The search box can use regular expressions as well. use --regex switch
5. You can navigate folders from directly inside the SoundFont list box.
ENTER or DOUBLE-CLICK open the folder
select ".." go up to the parent folder.
6. You can set the midi channel you want to use (default = 1)
So, you can load 16 different fonts on 16 midi channels.
7. Click the button "All notes off" to reset your midi controller.
8. On the Levels tab, you can set levels for gain, reverb, and chorus.
-------------------------------------------------------------------------------
RUN THE GUI
-------------------------------------------------------------------------------
To start the GUI, just run:
python fluidsynthgui.py
This is the only file.
-------------------------------------------------------------------------------
SOUNDFONTS
-------------------------------------------------------------------------------
The .sf2 files are not included here. You can download them online (for free).
There are also commercial soundfonts available.
-------------------------------------------------------------------------------
TROUBLESHOOTING/CONFIGURING FLUIDSYNTH ON LINUX
-------------------------------------------------------------------------------
Before you run the GUI, it's assumed that fluidsynth is already installed and
setup. Here's how I configured fluidsynth on Ubuntu 14.04 through 18.04.
# you'll need the fluidsynth command line program
sudo apt-get install fluidsynth
# and the jack service
sudo apt-get install jackd qjackctl jack-tools
# config jack for real time
sudo dpkg-reconfigure -p high jackd2
# if you run `ulimit -r -l` should should see output like this:
$ ulimit -r -l
real-time priority (-r) 95
max locked memory (kbytes, -l) unlimited
# check that your user has perms to use rt.
# you need to be part of the `audio` group.
# NOTE: Group membership is only updated on login,
# so you need to log out and in again if you make changes.
# to add your user to the audio group, run:
sudo adduser YOUR_USERNAME audio
# then, check the limits on the audo group.
# edit this file with sudo:
/etc/security/limits.conf
# you should have these lines
@audio - rtprio 99
@audio - memlock unlimited
# then, if everything is configured correctly, you should be
# able to play a test midi file on the command line like this:
fluidsynth your_sound_font.sf2 your_midi_file.mid
# for best results, use "Also sprach Zarathustra" as your test file. ;-)
My recommendation is to start jack first (with qjackctl), then start all your
dependent audio programs.
LATENCY:
You will probably need to lower the latency settings in Jack. The default
setting is high, and you will probably notice a delay between pressing a key
and hearing sound.
The setting can be changed here:
QjackCtl -> Settings -> Frames/Period (textbox)
I use a value like 256 (or 11.6 ms). Restart Jack for the change to take
effect. You can experiment with lower settings, if your hardware can handle
it. If this value is too low your system will create xrun (buffer overruns)
which sound like small clicks in the audio. For example, all my settings may
look like:
Realtime: checked
Interface: (default)
Sample Rate: 44100
Frames/Period: 256
Periods/Buffer: 2
-------------------------------------------------------------------------------
HOW TO CONFIGURE JACK CONNECTIONS ON LINUX
-------------------------------------------------------------------------------
By default your jack connections will probably not be connected to
fluidsynth. These connections are similar to physical wires. Open up
the jack Connect tab and wire up
Audio
fluidsynth -> system
Alsa
YourMidiController -> FluidSynth-GUI
After that, you can take a snapshot of your connections and restore
these in a startup script. For example, using:
aj-snapshot jack_connections.cfg
Then start the program with a script like:
#!/bin/bash
# start the GUI
./fluidsynthgui.py > /tmp/fluidsynthgui.log &
sleep 2
# restore jack connections
aj-snapshot -r jack_connections.cfg
-------------------------------------------------------------------------------
COMMAND LINE OPTIONS
-------------------------------------------------------------------------------
Usage:
./fluidsynthgui.py [option ...] [arg1 arg2 arg3 ...]
Example:
./fluidsynthgui.py -d /home/Music/Public/sf2/ "gain 5"
Options:
-d sf2_dir the default path to your sound fonts
-f FluidSynth_command override the start command
--regex allow regular expressions in search box
[arg1 arg2 arg3] are executed as commands in FluidSynth
-------------------------------------------------------------------------------
FLUIDSYNTH COMMAND LINE INTERFACE
-------------------------------------------------------------------------------
This program just runs the fluidsynth command line program, sending input,
parsing output, the same way you would use the command line interface.
To connect a CLI to a running fluidsynth service, you can use netcat:
nc localhost 9800
The only significant difference between the socket interface and running
`fluidsynth` on the command line, is the socket interface does NOT have a
prompt (for example >).
-------------------------------------------------------------------------------
FUTURE MAINTENANCE
-------------------------------------------------------------------------------
If the software breaks at some point, one possible cause is syntax or Python
libraries have changed, and the code needs to be updated to use your version of
Python.
Another likely cause is the fluidsynth commands have changed (or the format
of the returned data has changed). You can use the command line interface to
verify that the string formats are the same as referenced in the comments above
each low-level cmd() function call.
Here are all the FluidSynth command definitions used:
echo Echo data back
load file Load SoundFont
unload id Unload SoundFont by ID
fonts Display the list of loaded SoundFonts
inst font Print out the available instruments for the font
select chan font bank prog Combination of bank-select and program-change
get var
set var value
synth.gain 0 - 10
synth.reverb.active 1 or 0
synth.chorus.active 1 or 0
gain value Set the master gain (0 < gain < 5)
reverb [0|1|on|off] Turn the reverb on or off
rev_setroomsize num Change reverb room size. 0-1
rev_setdamp num Change reverb damping. 0-1
rev_setwidth num Change reverb width. 0-1
rev_setlevel num Change reverb level. 0-1
chorus [0|1|on|off] Turn the chorus on or off
cho_set_nr n Use n delay lines (default 3)
cho_set_level num Set output level of each chorus line to num
cho_set_speed num Set mod speed of chorus to num (Hz)
cho_set_depth num Set chorus modulation depth to num (ms)
reset All notes off
I split the API out from the GUI so it can be used or extended for other
projects if needed. It's similar to the library pyfluidsynth, except the API
is using the fluidsynth socket interface instead of lower level c calls.
-------------------------------------------------------------------------------
HELP, MY AUDIO STOPPED WORKING
-------------------------------------------------------------------------------
Occasionally, if jackd does not exit cleanly, it will prevent other audio from
playing. This seemed to be a more frequent problem in Linux years ago, though
audio seems largely stable now.
On linux, you can stop the jackd service with the command:
killall jackd
This will bring back all standard audio.
About
This program is a simple graphical synthesizer interface, for managing soundfont files with FluidSynth. It allows you to easily cycle through the soundfonts and instruments, search for soundfonts, select channels, and set levels for gain/reverb/chorus. This interface is a Gnome alternative to Qsynth. See screenshots below. (Written in Python)