Download raw body.
fluidsynth update 2.3.4
On Sunday, January 21, 2024 14:56 CET, Thomas Frohwein <tfrohwein@fastmail.com> wrote:
> On Sun, Jan 21, 2024 at 01:13:16PM +0100, Sebastian Reitenbach wrote:
> > Hi,
> >
> > On Sunday, January 21, 2024 00:07 CET, Thomas Frohwein <tfrohwein@fastmail.com> wrote:
> >
> > > 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.
> >
> > it's not perfect yet, but makes it better. QSynth starts, takes input from my midi controller,
> > but it also produces a humming noise. tested with a qsynth-0.9.12 (based on @rsadowsi's
> > version he sent August last year)
> >
> > regarding CFLAGS, we should merge in some additional patches I sent off-list, I got it
> > to propagate properly.
> >
> > Sebastian
>
> Thanks, new diff with your cmake-related changes that doesn't need the CFLAGS+=
> anymore.
with that patch, I can at least run:
fluidsynth -a sndio -m sndio -p midithru/0 /usr/local/share/generaluser-gs/GeneralUser_GS.sf2
and connect the midi controller via midish, and it works.
qsynth is updated, still has some odd troubles (bad humming noise) but at least I can manually
get fluidsynth to work until I find time to look into qsynth.
OK sebastia@
>
> ok?
>
> 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 21 Jan 2024 13:53:23 -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
>
> 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 21 Jan 2024 13:53:23 -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 21 Jan 2024 13:53:23 -0000
> @@ -0,0 +1,28 @@
> +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@)
> +@@ -13,6 +14,7 @@ set(FLUIDSYNTH_SUPPORT_PIPEWIRE @PIPEWIRE_SUPPORT@)
> + set(FLUIDSYNTH_SUPPORT_PORTAUDIO @PORTAUDIO_SUPPORT@)
> + set(FLUIDSYNTH_SUPPORT_PULSE @PULSE_SUPPORT@)
> + set(FLUIDSYNTH_SUPPORT_SDL2 @SDL2_SUPPORT@)
> ++set(FLUIDSYNTH_SUPPORT_SNDIO @SNDIO_SUPPORT@)
> + set(FLUIDSYNTH_SUPPORT_WASAPI @WASAPI_SUPPORT@)
> + set(FLUIDSYNTH_SUPPORT_WAVEOUT @WAVEOUT_SUPPORT@)
> + set(FLUIDSYNTH_SUPPORT_WINMIDI @WINMIDI_SUPPORT@)
> +@@ -134,6 +136,10 @@ if(NOT FLUIDSYNTH_IS_SHARED)
> +
> + if(FLUIDSYNTH_SUPPORT_SDL2 AND NOT TARGET SDL2::SDL2)
> + find_dependency(SDL2)
> ++ endif()
> ++
> ++ if(FLUIDSYNTH_SUPPORT_SNDIO AND NOT TARGET SNDIO::SNDIO)
> ++ find_dependency(SNDIO)
> + endif()
> +
> + if(FLUIDSYNTH_SUPPORT_SYSTEMD AND NOT Systemd::libsystemd)
> 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 21 Jan 2024 13:53:23 -0000
> @@ -0,0 +1,16 @@
> +Index: cmake_admin/report.cmake
> +--- cmake_admin/report.cmake.orig
> ++++ cmake_admin/report.cmake
> +@@ -85,6 +85,12 @@ else ( SDL2_SUPPORT )
> + set ( AUDIO_MIDI_REPORT "${AUDIO_MIDI_REPORT} SDL2: no\n" )
> + endif ( SDL2_SUPPORT )
> +
> ++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 ( WASAPI_SUPPORT )
> + set ( AUDIO_MIDI_REPORT "${AUDIO_MIDI_REPORT} WASAPI: yes\n" )
> + else ( WASAPI_SUPPORT )
> Index: patches/patch-src_CMakeLists_txt
> ===================================================================
> RCS file: /cvs/ports/audio/fluidsynth/patches/patch-src_CMakeLists_txt,v
> retrieving revision 1.1
> diff -u -p -r1.1 patch-src_CMakeLists_txt
> --- patches/patch-src_CMakeLists_txt 20 Jan 2024 20:01:56 -0000 1.1
> +++ patches/patch-src_CMakeLists_txt 21 Jan 2024 13:53:23 -0000
> @@ -6,13 +6,21 @@ Index: src/CMakeLists.txt
> # ************ library ************
>
> +if ( SNDIO_SUPPORT )
> -+ set ( fluid_pulse_SOURCES drivers/fluid_sndio.c )
> ++ set ( fluid_sndio_SOURCES drivers/fluid_sndio.c )
> +endif ( SNDIO_SUPPORT )
> +
> if ( PULSE_SUPPORT )
> set ( fluid_pulse_SOURCES drivers/fluid_pulse.c )
> endif ( PULSE_SUPPORT )
> -@@ -366,6 +370,11 @@ target_link_libraries ( libfluidsynth-OBJ PUBLIC GLib2
> +@@ -249,6 +253,7 @@ add_library ( libfluidsynth-OBJ OBJECT
> + ${fluid_waveout_SOURCES}
> + ${fluid_winmidi_SOURCES}
> + ${fluid_sdl2_SOURCES}
> ++ ${fluid_sndio_SOURCES}
> + ${fluid_libinstpatch_SOURCES}
> + ${libfluidsynth_SOURCES}
> + ${public_HEADERS}
> +@@ -366,6 +371,11 @@ target_link_libraries ( libfluidsynth-OBJ PUBLIC GLib2
>
> if ( TARGET SndFile::sndfile AND LIBSNDFILE_SUPPORT )
> target_link_libraries ( libfluidsynth-OBJ PUBLIC SndFile::sndfile )
> Index: patches/patch-src_config_cmake
> ===================================================================
> RCS file: patches/patch-src_config_cmake
> diff -N patches/patch-src_config_cmake
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-src_config_cmake 21 Jan 2024 13:53:23 -0000
> @@ -0,0 +1,13 @@
> +Index: src/config.cmake
> +--- src/config.cmake.orig
> ++++ src/config.cmake
> +@@ -208,6 +208,9 @@
> + /* Define to enable SDL2 audio driver */
> + #cmakedefine SDL2_SUPPORT @SDL2_SUPPORT@
> +
> ++/* Define to enable sndio audio driver */
> ++#cmakedefine SNDIO_SUPPORT @SNDIO_SUPPORT@
> ++
> + /* Define to 1 if you have the ANSI C header files. */
> + #cmakedefine STDC_HEADERS @STDC_HEADERS@
> +
> 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 21 Jan 2024 13:53:23 -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 21 Jan 2024 13:53:23 -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 21 Jan 2024 13:53:23 -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 21 Jan 2024 13:53:23 -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,
fluidsynth update 2.3.4