On Sun, Jan 21, 2024 at 01:13:16PM +0100, Sebastian Reitenbach wrote:
> Hi,
> 
> On Sunday, January 21, 2024 00:07 CET, Thomas Frohwein 
> <tfrohw...@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.

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,

Reply via email to