Use this guide to get MIDI sound working unless:


  2. you are using external MIDI instruments

Most people need to setup MIDI sound using software synthesis.

There are three main programs that do software synthesis: TiMidity++, Fluidsynth and ZynAddSubFX.

ZynAddSubFX is easiest to use when you want to output a single instrument, as it does not require samples or soundfonts. When you want to play a MIDI stream with multiple instruments, such as a General MIDI file, FluidSynth or Timidity++ are an easier fit. FluidSynth has a nice GUI, but you will have to search for a suitable soundfont to go with it. TiMidity++ is a bit harder to install and use, but you can easily install a sample set for it from the repostories.

As soon as you have TiMidity++, FluidSynth or ZynAddSubFX running, you can test it by connecting your MIDI source to it. The most common way to route MIDI streams from one application to another is currently ALSA MIDI. To test if your software synth is correctly installed, install and start vkeybd and connect it to your softsynth as described at HowToQjackCtlConnections

Installing ZynAddSubFX

For basic output, ZynAddSubFX requires little installation: simply install the zynaddsubfx package and run it.

Installing FluidSynth

If you wish to use FluidSynth instead, which is better for SoundFont files, there's a nice GUI front-end for it. The easiest way to use this on Feisty and above is to install the low-latency kernel (package "linux-lowlatency") and qsynth, then reboot. Then run Qsynth from the Multimedia or Sound and Video menu.

It will probably complain about JACK not running, but JACK isn't required to run Qsynth. Change the audio output driver to "alsa" if you want to run it without JACK. Once you do this, you should be able to use any MIDI player to play MIDI files.

Installing TiMidity++

Install TiMidity++


Install samples


If you want better sound, you may add the eawpatches repository from fbriere.net to your /etc/apt/sources.list file:

deb http://www.fbriere.net/debian stable misc

You may then install the package 'eawpatches' and the repository key package 'fbriere.net-keyring'.

Once you have installed the package, change the following line in the /etc/timidity/timidity.cfg file:

source /etc/timidity/freepats.cfg

It should read:

source /etc/timidity/eawpatches.cfg

To use other samples, read 'Finding and setting up a soundfont' below.

See if midi plays

Once you've done that, you can try playing a midi file:

timidity myfile.mid

If all is well, you should hear delicate strains of synthesised music. If you have problems, read 'Reducing CPU usage' below.

Setting up TiMidity++ as a MIDI server

Issue the following commands: You may not need all these (I found it worked with just the first two).

sudo modprobe snd-seq-device
sudo modprobe snd-seq-midi
sudo modprobe snd-seq-oss
sudo modprobe snd-seq-midi-event
sudo modprobe snd-seq

This loads missing modules. Then enter:

timidity -iA

This loads TiMidity++ as a midi server and opens several midi ports, including 128:0 and 128:1. After issuing it, you should have midi players working. You can open another terminal and issue a command such as one of the following:

aplaymidi --port 128:0 music.mid
pmidi -p 128:0 music.mid
kmid music.mid

To close TiMidity++, press CTRL-C in the terminal it's running in.

Launching the server as root may improve performance because of higher priorities given to the process.

Notedit, or your score editor of choice can then be loaded and recognised the midi ports.

If the computer is busy doing something else other than playing music, you may hear scratches or have latency problems. This might be solved with a realtime kernel patch, but that is out of the scope of this HOWTO. If you're running Feisty, there is a supported kernel image available to you if you install the package 'linux-lowlatency'.

Automatically starting TiMidity++ on boot

Ubuntu sets up scripts in /etc/init.d when you install TiMidity++. To start it on boot, edit /etc/default/timidity and uncomment the line


You'll also need to add the modules you loaded earlier to /etc/modules.

Finding and setting up a soundfont

Websites: http://www.personalcopy.com (try Unison.sf2) http://www.hammersound.net/ or look up soundfonts in a search engine. A big list may be found at http://timidity.s11.xrea.com/files/readme_cfgp.htm in which the fifth soundfont from the top (SGM-whatever) is quite complete for general use with TiMidity++.

If you end up with a file ending with .sfArk, it's compressed in a deprecated format. You may need a windows machine to decompress it, depending which version they've used. Details at http://melodymachine.com/sfark.htm . There is a Linux version available on the website.

Then you need to edit the file /etc/timidity/timidity.cfg and add the following line (edit as appropriate):

soundfont /pathtothesoundfontfile/soundfontfile.sf2

sfArk on Linux

If you need to decompress sfArk compressed Soundfonts and the Linux version of the extractor from http://melodymachine.com/sfark.htm does not work, then you can install the Windows sfArk into linux using WINE. If you don't have WINE installed on your machine then you can install it with the following command:

sudo apt-get install wine

Next, you must obtain sfArk from this URL listed above. Once you have WINE installed, all you must do is change to the directory where you have downloaded sfArk and issue the following command:

wine nameoffile

sfArk also works beautifully in Crossover Office 5 as well.

Reducing CPU usage

If TiMidity++ uses too much CPU on your slow machine, and you're running a version prior to Breezy Badger, try adding these lines to the start of /etc/timidity/timidity.cfg (you may need to create this file)

opt EFresamp=l          #use linear resampling
opt EFvlpf=d            #disable VLPF
opt EFreverb=d          #disable reverb
opt EFchorus=d          #disable chorus
opt EFdelay=d           #disable delay

On Breezy Badger and Dapper Drake, simply uncomment all the lines in the section of the file that deals with a slow CPU. However, one of the lines contains a mistake. The "opt no-antialias" line should read "opt --no-anti-alias" instead. Also, make "opt p32a" say "opt p64a" because 32 voices just isn't enough, and keep "opt s32kHz" commented out because it greatly reduces quality for no noticeable gain at all.


Ask questions at http://ubuntuforums.org/showthread.php?p=336935


Midi/SoftwareSynthesisHowTo (last edited 2015-10-31 15:19:05 by jpaugh)