Unlike Windows/MacOS, Linux does not provide default software synth. But you can install one.
Tough Linux guys are not looking for easy ways! Right?
Below are the steps that work for 64-bit Ubuntu 13.10. You will need to do something similar on other systems.
Most likely, you have ALSA already installed on your system.
Download and install TiMidity++ or/and any other soft synth.
To make sure your software synth is installed correctly, try to play some MIDI file with it:
>> timidity some-file.mid
Chech the list of available MIDI-Out ports:
>> aconnect -lo client 14: 'Midi Through' [type=kernel] 0 'Midi Through Port-0' client 20: 'XStation' [type=kernel] 0 'XStation MIDI 1 '
The output above only shows the USB MIDI keyboard connected to the computer. If Virtual MIDI is not there, we can start it:
>> sudo modprobe snd-virmidi
Now you can see it in the list:
>> aconnect -lo client 14: 'Midi Through' [type=kernel] 0 'Midi Through Port-0' client 20: 'XStation' [type=kernel] 0 'XStation MIDI 1 ' client 24: 'Virtual Raw MIDI 2-0' [type=kernel] 0 'VirMIDI 2-0 ' client 25: 'Virtual Raw MIDI 2-1' [type=kernel] 0 'VirMIDI 2-1 ' client 26: 'Virtual Raw MIDI 2-2' [type=kernel] 0 'VirMIDI 2-2 ' client 27: 'Virtual Raw MIDI 2-3' [type=kernel] 0 'VirMIDI 2-3 '
Start your soft synth in a server mode:
>> timidity -iAD Requested buffer size 32768, fragment size 8192 ALSA pcm 'default' set buffer size 32768, period size 8192 bytes TiMidity starting in ALSA server mode Opening sequencer port: 128:0 128:1 128:2 128:3
TiMidity++ is quite a powerful synth, and there are a lot of useful options you can add to the command line above. Please check the documentation for more details.
Connect the ports:
>> aconnect 24:0 128:0
>> aconnect -lo client 14: 'Midi Through' [type=kernel] 0 'Midi Through Port-0' client 20: 'XStation' [type=kernel] 0 'XStation MIDI 1 ' client 24: 'Virtual Raw MIDI 2-0' [type=kernel] 0 'VirMIDI 2-0 ' Connecting To: 128:0 client 25: 'Virtual Raw MIDI 2-1' [type=kernel] 0 'VirMIDI 2-1 ' client 26: 'Virtual Raw MIDI 2-2' [type=kernel] 0 'VirMIDI 2-2 ' client 27: 'Virtual Raw MIDI 2-3' [type=kernel] 0 'VirMIDI 2-3 ' client 128: 'TiMidity' [type=user] 0 'TiMidity port 0 ' Connected From: 24:0 1 'TiMidity port 1 ' 2 'TiMidity port 2 ' 3 'TiMidity port 3 '
Jazz-Plugin will use the first Virtual MIDI port as the defaulf MIDI-Out.
Here is the bash script I use to automate the above steps.
It starts Virtual MIDI and TiMidity++ unless they are already running, looks for the available connection ports, and connects them if they are not yet connected.
Hopefully, it will work on your system with no or few modofications...
#!/bin/bash sudo modprobe snd-virmidi if aconnect -lo | grep TiMidity > /dev/null; then echo TiMidity is already running! else echo Starting TiMidity... timidity -iAD > /dev/null sleep 1 fi IFS=$'\n'; arr=`aconnect -lo` for str in ${arr[@]}; do if echo $str | grep -e '^client' > /dev/null; then client=`echo $str | sed 's/:.*$//' | sed 's/^.* //'` tmdt_curr=""; vrmd_curr="" elif echo $str | grep -e '^ *[0-9]* ' > /dev/null; then port=`echo $str | sed 's/^ *//' | sed 's/ .*$//'` if echo $str | grep TiMidity > /dev/null; then tmdt_curr="$client:$port" [ ! "$tmdt" ] && tmdt="$tmdt_curr" elif echo $str | grep VirMIDI > /dev/null; then vrmd_curr="$client:$port" [ ! "$vrmd" ] && vrmd="$vrmd_curr" fi elif echo $str | grep 'Connecting To:' > /dev/null && [ "$vrmd_curr" ]; then conn=`echo $str | sed 's/.*Connecting To: *//'` [ "$vrmd_conn" ] && vrmd_conn="$vrmd_conn " vrmd_conn="$vrmd_conn$vrmd_curr=$conn" vrmd="" elif echo $str | grep 'Connected From:' > /dev/null && [ "$tmdt_curr" ]; then conn=`echo $str | sed 's/.*Connected From: *//'` [ "$tmdt_conn" ] && tmdt_conn="$tmdt_conn " tmdt_conn="$tmdt_conn$conn=$tmdt_curr" tmdt="" fi done IFS=' '; arr=`echo $tmdt_conn` for str in ${arr[@]}; do echo $vrmd_conn | grep $str > /dev/null && already_connected=1 done if [ "$already_connected" ]; then echo Already connected! elif [ "$vrmd" ] && [ "$tmdt" ]; then echo Connecting $vrmd to $tmdt... aconnect $vrmd $tmdt else echo Cannot connect... fi echo aconnect -lo
And this script will stop TiMidity++ and Virtual MIDI:
#!/bin/bash aconnect -x ps -aux | grep timidity | awk '{print $2,$11}' | while read pid name do [ "$name" == timidity ] && kill -9 $pid done sudo modprobe -r snd-virmidi