Debian: FluidSynth als systemd-Service

So kann man FluidSynth gleich beim Systemstart mitstarten lassen – klappt nur wenn man Pulseaudio als Systemdienst, d.h. als system-wide-Daemon, am Laufen hat. Oder nur ALSA und gar kein Pulseaudio:

  1. FluidSynth installieren:
    apt-get install fluidsynth
  2. User für FluidSynth anlegen. Der User muss in der Gruppe „audio“ sein, damit FluidSynth auf den ALSA-MIDI-Sequencer zugreifen darf:
    adduser --home=/var/lib/fluidsynth --shell=/usr/sbin/nologin --ingroup audio --disabled-login --system fluidsynth
  3. Wenn Pulseaudio als Systemdienst läuft den User „fluidsynth“ zur Gruppe „pulse-access“ hinzufügen:
    addgroup fluidsynth pulse-access
  4. systemd-service anlegen. Dazu folgende Datei „/etc/systemd/system/fluidsynth.service“ erstellen:
    [Unit]
    Description=FluidSynth Daemon
    After=sound.target
    
    [Service]
    ExecStart=/usr/bin/fluidsynth -is -a $AUDIO_DRIVER $OTHER_OPTS ${SOUND_FONT}
    EnvironmentFile=/etc/default/fluidsynth
    User=fluidsynth
    
    [Install]
    WantedBy=multi-user.target
  5. In „/etc/default/fluidsynth“ Soundfont, Audiogerät und andere Optionen setzen.
    • Entweder für Pulseaudio:
      SOUND_FONT="/usr/share/sounds/sf2/FluidR3_GM.sf2"
      AUDIO_DRIVER=pulseaudio
      OTHER_OPTS='-m alsa_seq -r 48000 -o synth.cpu-cores=2'
      
    • Oder für ALSA:
      SOUND_FONT="/usr/share/sounds/sf2/FluidR3_GM.sf2"
      AUDIO_DRIVER=alsa
      OTHER_OPTS='-m alsa_seq -r 48000 -o synth.cpu-cores=2'
      
  6. Den Fluidsynth-Service jetzt und dauerhaft einschalten:
    systemctl daemon-reload
    systemctl enable --now fluidsynth.service
    

Mit aconnect -l kann man sich die MIDI-Client- und Portnummer anzeigen lassen, über den man Fluidsynth erreicht. Hier z.B. ist FluidSynth Client Nummer 128, Port 0:

client 0: 'System' [type=Kernel]
    0 'Timer           '
    1 'Announce        '
client 14: 'Midi Through' [type=Kernel]
    0 'Midi Through Port-0'
client 128: 'FLUID Synth (24787)' [type=User,pid=24787]
    0 'Synth input port (24787:0)'

MIDI-Dateien kann man dann so über den FluidSynth-Service abspielen:
pmidi -p 128:0 Beispielmididatei.mid

Für DOSBox werden Client und Port in „dosbox.conf“ in der Sektion „[MIDI]“ unter „midiconfig“ eingetragen, hier z.B. „midiconfig=128:0“.

 

Update:

Wenn man Pulseaudio ganz normal und nicht als systemweiten Dienst verwendet, dann kann man Fluidsynth als Systemd-User-Service laufen lassen. Das dazu nötige Service-File liefert Debian bereits mit.

systemctl --user enable fluidsynth