# Java findet FluidSynth nicht



## cyclohexan (21. Mrz 2019)

Ich würde gerne aus einem Javaprogramm heraus FluidSynth verwenden.
Ich arbeite auf Linux und habe fluidsynth folgendermaßen gestartet:

```
fluidsynth /usr/share/sounds/sf2/FluidR3_GM.sf2
```
Dann mit *pmidi -l* kontrolliert, dass das eigentlich funktionieren müsste:

```
pmidi -l
 Port     Client name                       Port name
 14:0     Midi Through                      Midi Through Port-0
128:0     FLUID Synth (7252)                Synth input port (7252:0)
```
Die 3. Zeile zeigt, dass FluidSynth tatsächlich läuft.

Aber aus Java heraus finde ich FluidSynth nicht.
Hier mein Code:

```
MidiDevice.Info[] deviceInfo = MidiSystem.getMidiDeviceInfo();
for (MidiDevice.Info currentDevice : deviceInfo) {
    System.out.println(currentDevice.getName() + " / " + currentDevice.getDescription());
}
```
Und hier die Ausgabe:

```
Gervill / Software MIDI Synthesizer
Real Time Sequencer / Software sequencer
```
Gervill ist der von Java mitgelieferte Synthesizer, und der 2. Eintrag ist der eingebaute Sequencer.
Beide Einträge bekomme ich auch dann, wenn fluidsynth *nicht* gestartet ist.
Aber den EXTERNEN Synthesizer (also FluidSynth) bekomme ich so nicht.
Was mache ich da falsch?


----------



## Neumi5694 (26. Mrz 2019)

Java-seitig machst du nichts falsch.
Mit deinem Code hab ich VirtualMidiSynth in meinem System finden können.

```
Gervill / Software MIDI Synthesizer
Microsoft MIDI Mapper / Windows MIDI_MAPPER
CoolSoft MIDIMapper / Windows MIDI_MAPPER
Microsoft GS Wavetable Synth / Internal software synthesizer
VirtualMIDISynth #1 / Internal software synthesizer
VirtualMIDISynth #2 / Internal software synthesizer
Real Time Sequencer / Software sequencer
```

Ich gehe also davon aus, dass FluidSynth sich nicht sauber im System anmeldet. Kannst du Fluidsynth in anderen Midi-Applikationen auswählen? In neueren Windows-Versionen muss - was den Midi-Mapper angeht - etwas getrickst werden, lies dir mal die Doku zu FluidSynth durch.
VMS installiert z.b. einen eigenen Mapper ("Coolsoft MIDIMapper"), damit alte Programme ihn finden können.

Edit: Ich hab davon 2 Instanzen laufen, deshalb die verschiedenen Einträge.

Edit2: Hab gerade festgestellt, dass es zu FluidSynth Java-Klassen für die native Ansteuerung gibt. Kann es sein, dass das Teil gar nicht als Standard-Midi-Mapper funktioniert? Sonst würde die direkte Ansteuerung per JNI wenig Sinn ergeben.









						fluidsynth/bindings/fluidsynth_jni at master · jonathanslenders/fluidsynth
					

*Branch* of fluidsynth. Contribute to jonathanslenders/fluidsynth development by creating an account on GitHub.




					github.com
				





			Java Code Examples


----------



## cyclohexan (27. Mrz 2019)

Danke schon mal.
Kann schon sein, dass in meinem Betriebssystem irgendetwas nicht richtig funktioniert.
Timidity hab ich auch mal gestartet und per Java nicht gefunden, obwohl es von *pmidi -l* gefunden wurde.
Ich sehe weiterhin nur den eingebauten Gervill, und über den kann ich auch Musik spielen.

Aber Coolsoft würde mir nicht helfen, da ich wie gesagt Linux benutze.

Die *fluidsynth_jni* hab ich auch schon gefunden, bin aber zu blöd, die zu compilieren. Und irgendwie hab ich auch das Gefühl, dass die nicht mehr gepflegt wird bzw. aus den offiziellen Paketquellen der Betriebssysteme verschwunden ist. Hab auch keine vorkompilierten Binaries davon gefunden.

Aber eigentlich sollte ich die JNI gar nicht brauchen. Denn man sollte externe Synthesizer ja wie jedes andere MIDI-Gerät mit MIDI-Messages ansprechen können.
Siehe die akzeptierte Antwort von hier:








						MidiSystem.getMidiDevice(...) returns unexpected class
					

I'm trying to write a simple program using javax.sound.midi that reads, edits, and then plays midi files through FluidSynth. Here is a snippet of my code:    Synthesizer synth;    // Look through the




					stackoverflow.com
				



Nur so weit wie der Thread-Ersteller dort komme ich ja gar nicht erst, da ich die Devices gar nicht finde.


----------

