Here is a version that restores sndio support again. I'm not sure how best to test that what audio I'm hearing is from sndio and not sdl2, but with this, sndio shows up again with fluidsynth -h as audio and midi driver and a quick test with shockolate and simutrans still gives me working audio.
Please test and provide comments! I admit the CFLAGS+=-DSNDIO_SUPPORT is a hack, but was the quickest way to a solution to the build system pending a more thorough look where cmake needs to set this. On Sat, Jan 20, 2024 at 09:22:15PM +0100, Sebastian Reitenbach wrote: > On Saturday, January 20, 2024 20:51 CET, "Sebastian Reitenbach" > <sebas...@l00-bugdead-prods.de> wrote: > > > Hi, > > > > qsynth doesn't seem to be happy. I tried @rsadowskis version from August > > last year, but also updated to 0.9.12. > > > > 20:40:55.637 Qsynth1: Synthesizer engine terminated. > > 20:40:58.001 Qsynth1: Creating synthesizer engine... > > 20:40:58.004 Qsynth1: Loading soundfont: > > "/usr/local/share/generaluser-gs/GeneralUser_GS.sf2" (bank offset 0)... > > 20:40:58.193 Qsynth1: Loading soundfont: > > "/home/sebastia/mucke/downloads/_MIDI/arachno/Arachno SoundFont - Version > > 1.0.sf2" (bank offset 1)... > > 20:40:58.794 Qsynth1: Creating audio driver (file)... > > 20:40:58.795 Qsynth1: Failed to create the audio driver (file). Cannot > > continue without it. > > fluidsynth: error: Unknown string setting 'midi.sndio.device' > > fluidsynth: error: Unknown string setting 'audio.jack.id' > > fluidsynth: error: Unknown integer parameter 'audio.jack.autoconnect' > > fluidsynth: error: Unknown integer parameter 'audio.jack.multi' > > > > > > also, in the past, the audio driver was "sndio", now fluidsynth only has > > "file" and "sdl2" available. > > > > > FluidSynth -h output of old version: > > -a, --audio-driver=[label] > The name of the audio driver to use. > Valid values: file, sndio > ... > -m, --midi-driver=[label] > The name of the midi driver to use. > Valid values: sndio > ... > > New FluidSynth version: > -a, --audio-driver=[label] > The name of the audio driver to use. > Valid values: file, sdl2 > ... > -m, --midi-driver=[label] > The name of the midi driver to use. > Valid values: > ... > > Sebastian Index: Makefile =================================================================== RCS file: /cvs/ports/audio/fluidsynth/Makefile,v retrieving revision 1.35 diff -u -p -r1.35 Makefile --- Makefile 20 Jan 2024 20:01:56 -0000 1.35 +++ Makefile 20 Jan 2024 23:03:10 -0000 @@ -3,6 +3,7 @@ COMMENT = SoundFont2 software synthesiz GH_ACCOUNT = FluidSynth GH_PROJECT = fluidsynth GH_TAGNAME = v2.3.4 +REVISION = 0 SHARED_LIBS += fluidsynth 3.0 # 6.0 @@ -36,6 +37,8 @@ CONFIGURE_ARGS = -DCMAKE_DISABLE_FIND_PA -Denable-oss=OFF \ -Denable-pipewire=OFF \ -Denable-pulseaudio=OFF + +CFLAGS += -DSNDIO_SUPPORT post-patch: cp ${FILESDIR}/fluid_sndio.c ${WRKSRC}/src/drivers/ Index: files/fluid_sndio.c =================================================================== RCS file: /cvs/ports/audio/fluidsynth/files/fluid_sndio.c,v retrieving revision 1.4 diff -u -p -r1.4 fluid_sndio.c --- files/fluid_sndio.c 29 Mar 2013 12:37:43 -0000 1.4 +++ files/fluid_sndio.c 20 Jan 2024 23:03:10 -0000 @@ -66,8 +66,6 @@ typedef struct { fluid_midi_parser_t *parser; } fluid_sndio_midi_driver_t; -int delete_fluid_sndio_audio_driver(fluid_audio_driver_t* p); - /* local utilities */ static void* fluid_sndio_audio_run(void* d); static void* fluid_sndio_audio_run2(void* d); @@ -76,7 +74,7 @@ static void* fluid_sndio_audio_run2(void void fluid_sndio_audio_driver_settings(fluid_settings_t* settings) { - fluid_settings_register_str(settings, "audio.sndio.device", "default", 0, NULL, NULL); + fluid_settings_register_str(settings, "audio.sndio.device", "default", 0); } /* @@ -109,7 +107,7 @@ new_fluid_sndio_audio_driver(fluid_setti dev->data = NULL; dev->cont = 1; - if (!fluid_settings_getstr(settings, "audio.sndio.device", &devname)) { + if (!fluid_settings_getstr_default(settings, "audio.sndio.device", &devname)) { devname = NULL; } @@ -210,7 +208,7 @@ new_fluid_sndio_audio_driver2(fluid_sett dev->data = data; dev->cont = 1; - if (!fluid_settings_getstr(settings, "audio.sndio.device", &devname)) { + if (!fluid_settings_getstr_default(settings, "audio.sndio.device", &devname)) { devname = NULL; } @@ -286,19 +284,19 @@ error_recovery: /* * delete_fluid_sndio_audio_driver */ -int +void delete_fluid_sndio_audio_driver(fluid_audio_driver_t* p) { fluid_sndio_audio_driver_t* dev = (fluid_sndio_audio_driver_t*) p; if (dev == NULL) { - return FLUID_OK; + return; } dev->cont = 0; if (dev->thread) { if (pthread_join(dev->thread, NULL)) { FLUID_LOG(FLUID_ERR, "Failed to join the audio thread"); - return FLUID_FAILED; + return; } } if (dev->hdl) { @@ -308,7 +306,7 @@ delete_fluid_sndio_audio_driver(fluid_au FLUID_FREE(dev->buffer); } FLUID_FREE(dev); - return FLUID_OK; + return; } /* @@ -372,17 +370,17 @@ fluid_sndio_audio_run2(void* d) void fluid_sndio_midi_driver_settings(fluid_settings_t* settings) { - fluid_settings_register_str(settings, "midi.sndio.device", "default", 0, NULL, NULL); + fluid_settings_register_str(settings, "midi.sndio.device", "default", 0); } -int +void delete_fluid_sndio_midi_driver(fluid_midi_driver_t *addr) { int err; fluid_sndio_midi_driver_t *dev = (fluid_sndio_midi_driver_t *)addr; if (dev == NULL) { - return FLUID_OK; + return; } dev->status = FLUID_MIDI_DONE; @@ -391,11 +389,11 @@ delete_fluid_sndio_midi_driver(fluid_mid err = pthread_cancel(dev->thread); if (err) { FLUID_LOG(FLUID_ERR, "Failed to cancel the midi thread"); - return FLUID_FAILED; + return; } if (pthread_join(dev->thread, NULL)) { FLUID_LOG(FLUID_ERR, "Failed to join the midi thread"); - return FLUID_FAILED; + return; } } if (dev->hdl != NULL) { @@ -405,7 +403,7 @@ delete_fluid_sndio_midi_driver(fluid_mid delete_fluid_midi_parser(dev->parser); } FLUID_FREE(dev); - return FLUID_OK; + return; } void * @@ -493,7 +491,7 @@ new_fluid_sndio_midi_driver(fluid_settin } /* get the device name. if none is specified, use the default device. */ - if (!fluid_settings_getstr(settings, "midi.sndio.device", &device)) { + if (!fluid_settings_getstr_default(settings, "midi.sndio.device", &device)) { device = NULL; } Index: patches/patch-FluidSynthConfig_cmake_in =================================================================== RCS file: patches/patch-FluidSynthConfig_cmake_in diff -N patches/patch-FluidSynthConfig_cmake_in --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-FluidSynthConfig_cmake_in 20 Jan 2024 23:03:10 -0000 @@ -0,0 +1,9 @@ +Index: FluidSynthConfig.cmake.in +--- FluidSynthConfig.cmake.in.orig ++++ FluidSynthConfig.cmake.in +@@ -1,4 +1,5 @@ + # Audio / MIDI driver support ++set(FLUIDSYNTH_SUPPORT_SNDIO @SNDIO_SUPPORT@) + set(FLUIDSYNTH_SUPPORT_ALSA @ALSA_SUPPORT@) + set(FLUIDSYNTH_SUPPORT_COREAUDIO @COREAUDIO_SUPPORT@) + set(FLUIDSYNTH_SUPPORT_COREMIDI @COREMIDI_SUPPORT@) Index: patches/patch-cmake_admin_report_cmake =================================================================== RCS file: patches/patch-cmake_admin_report_cmake diff -N patches/patch-cmake_admin_report_cmake --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-cmake_admin_report_cmake 20 Jan 2024 23:03:10 -0000 @@ -0,0 +1,16 @@ +Index: cmake_admin/report.cmake +--- cmake_admin/report.cmake.orig ++++ cmake_admin/report.cmake +@@ -1,6 +1,12 @@ + + set ( AUDIO_MIDI_REPORT "\n" ) + ++if ( SNDIO_SUPPORT ) ++ set ( AUDIO_MIDI_REPORT "${AUDIO_MIDI_REPORT} sndio yes\n" ) ++else ( SNDIO_SUPPORT ) ++ set ( AUDIO_MIDI_REPORT "${AUDIO_MIDI_REPORT} sndio no\n" ) ++endif ( SNDIO_SUPPORT ) ++ + if ( ALSA_SUPPORT ) + set ( AUDIO_MIDI_REPORT "${AUDIO_MIDI_REPORT} ALSA: yes\n" ) + else ( ALSA_SUPPORT ) Index: patches/patch-src_drivers_fluid_adriver_c =================================================================== RCS file: patches/patch-src_drivers_fluid_adriver_c diff -N patches/patch-src_drivers_fluid_adriver_c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_drivers_fluid_adriver_c 20 Jan 2024 23:03:10 -0000 @@ -0,0 +1,20 @@ +Index: src/drivers/fluid_adriver.c +--- src/drivers/fluid_adriver.c.orig ++++ src/drivers/fluid_adriver.c +@@ -40,6 +40,16 @@ struct _fluid_audriver_definition_t + /* Available audio drivers, listed in order of preference */ + static const fluid_audriver_definition_t fluid_audio_drivers[] = + { ++#if SNDIO_SUPPORT ++ { ++ "sndio", ++ new_fluid_sndio_audio_driver, ++ new_fluid_sndio_audio_driver2, ++ delete_fluid_sndio_audio_driver, ++ fluid_sndio_audio_driver_settings ++ }, ++#endif ++ + #if ALSA_SUPPORT + { + "alsa", Index: patches/patch-src_drivers_fluid_adriver_h =================================================================== RCS file: patches/patch-src_drivers_fluid_adriver_h diff -N patches/patch-src_drivers_fluid_adriver_h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_drivers_fluid_adriver_h 20 Jan 2024 23:03:10 -0000 @@ -0,0 +1,19 @@ +Index: src/drivers/fluid_adriver.h +--- src/drivers/fluid_adriver.h.orig ++++ src/drivers/fluid_adriver.h +@@ -43,6 +43,15 @@ void fluid_audio_driver_settings(fluid_settings_t *set + /* Defined in fluid_filerenderer.c */ + void fluid_file_renderer_settings(fluid_settings_t *settings); + ++#if SNDIO_SUPPORT ++fluid_audio_driver_t *new_fluid_sndio_audio_driver(fluid_settings_t *settings, ++ fluid_synth_t *synth); ++fluid_audio_driver_t *new_fluid_sndio_audio_driver2(fluid_settings_t *settings, ++ fluid_audio_func_t func, void *data); ++void delete_fluid_sndio_audio_driver(fluid_audio_driver_t *p); ++void fluid_sndio_audio_driver_settings(fluid_settings_t *settings); ++#endif ++ + #if PULSE_SUPPORT + fluid_audio_driver_t *new_fluid_pulse_audio_driver(fluid_settings_t *settings, + fluid_synth_t *synth); Index: patches/patch-src_drivers_fluid_mdriver_c =================================================================== RCS file: patches/patch-src_drivers_fluid_mdriver_c diff -N patches/patch-src_drivers_fluid_mdriver_c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_drivers_fluid_mdriver_c 20 Jan 2024 23:03:10 -0000 @@ -0,0 +1,18 @@ +Index: src/drivers/fluid_mdriver.c +--- src/drivers/fluid_mdriver.c.orig ++++ src/drivers/fluid_mdriver.c +@@ -38,6 +38,14 @@ struct _fluid_mdriver_definition_t + + static const fluid_mdriver_definition_t fluid_midi_drivers[] = + { ++#if SNDIO_SUPPORT ++ { ++ "sndio", ++ new_fluid_sndio_midi_driver, ++ delete_fluid_sndio_midi_driver, ++ fluid_sndio_midi_driver_settings ++ }, ++#endif + #if ALSA_SUPPORT + { + "alsa_seq", Index: patches/patch-src_drivers_fluid_mdriver_h =================================================================== RCS file: patches/patch-src_drivers_fluid_mdriver_h diff -N patches/patch-src_drivers_fluid_mdriver_h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_drivers_fluid_mdriver_h 20 Jan 2024 23:03:10 -0000 @@ -0,0 +1,19 @@ +Index: src/drivers/fluid_mdriver.h +--- src/drivers/fluid_mdriver.h.orig ++++ src/drivers/fluid_mdriver.h +@@ -38,6 +38,15 @@ struct _fluid_midi_driver_t + + void fluid_midi_driver_settings(fluid_settings_t *settings); + ++/* sndio */ ++#if SNDIO_SUPPORT ++fluid_midi_driver_t *new_fluid_sndio_midi_driver(fluid_settings_t *settings, ++ handle_midi_event_func_t handler, ++ void *event_handler_data); ++void delete_fluid_sndio_midi_driver(fluid_midi_driver_t *p); ++void fluid_sndio_midi_driver_settings(fluid_settings_t *settings); ++#endif ++ + /* ALSA */ + #if ALSA_SUPPORT + fluid_midi_driver_t *new_fluid_alsa_rawmidi_driver(fluid_settings_t *settings,