I'd like adopt the fluidsynth package. Thanks in advance. -- Takashi Yano <takashi.y...@nifty.ne.jp>
inherit cmake
NAME="fluidsynth" VERSION=2.3.2 RELEASE=1 LICENSE="LGPL-2.1-or-later" CATEGORY="Audio" SUMMARY="SoundFont software synthesizer" DESCRIPTION="FluidSynth is a real-time software synthesizer based on the SoundFont 2 specifications." HOMEPAGE="http://www.fluidsynth.org/" SRC_URI="https://github.com/FluidSynth/fluidsynth/archive/v${VERSION}/fluidsynth-${VERSION}.tar.gz" PKG_NAMES="${NAME} lib${NAME}3 lib${NAME}-devel" fluidsynth_CONTENTS="usr/bin/*.exe usr/share/" libfluidsynth3_CATEGORY="Libs" libfluidsynth3_SUMMARY="${SUMMARY} library" libfluidsynth3_CONTENTS="usr/bin/cygfluidsynth-3.dll" libfluidsynth_devel_CATEGORY="Libs" libfluidsynth_devel_SUMMARY="${SUMMARY} library" libfluidsynth_devel_CONTENTS=" usr/include/fluidsynth* usr/lib/libfluidsynth.dll.a usr/lib/pkgconfig/fluidsynth.pc " PKG_IGNORE="usr/lib/cmake/fluidsynth/*.cmake" # dbus: only for RealtimeKit # portaudio: playback is just static CYGCMAKE_ARGS=" -Denable-dbus=OFF -Denable-midishare=OFF -Denable-portaudio=ON "
--- origsrc/fluidsynth-2.3.2/src/drivers/fluid_dsound.c 2023-04-03 00:54:17.000000000 +0900 +++ src/fluidsynth-2.3.2/src/drivers/fluid_dsound.c 2023-09-16 00:02:53.038824600 +0900 @@ -28,6 +28,7 @@ #if DSOUND_SUPPORT +#include <windows.h> #include <mmsystem.h> #include <dsound.h> #include <mmreg.h> --- origsrc/fluidsynth-2.3.2/src/drivers/fluid_oss.c 2023-04-03 00:54:17.000000000 +0900 +++ src/fluidsynth-2.3.2/src/drivers/fluid_oss.c 2023-09-16 12:35:49.965676900 +0900 @@ -109,6 +109,22 @@ fluid_oss_audio_driver_settings(fluid_se fluid_settings_register_str(settings, "audio.oss.device", "/dev/dsp", 0); } +#ifdef __CYGWIN__ +#include <sys/cygwin.h> +static int get_cygwin_version(void); +static int cygwin_version; +static int get_cygwin_version(void) +{ + int cygwin_version = 3004006; + char *ver = (char *) (intptr_t) cygwin_internal(CW_GETVERSIONINFO); + int major, minor; + if (2 == sscanf(ver, "%*s\n%%%%%% Cygwin dll major: %d\n" + "%%%%%% Cygwin dll minor: %d", &major, &minor)) + cygwin_version = major * 1000 + minor; + return cygwin_version; +} +#endif + /* * new_fluid_oss_audio_driver */ @@ -133,6 +149,10 @@ new_fluid_oss_audio_driver(fluid_setting return NULL; } +#ifdef __CYGWIN__ + cygwin_version = get_cygwin_version(); +#endif + FLUID_MEMSET(dev, 0, sizeof(fluid_oss_audio_driver_t)); fluid_settings_getint(settings, "audio.periods", &periods); @@ -306,6 +326,10 @@ new_fluid_oss_audio_driver2(fluid_settin return NULL; } +#ifdef __CYGWIN + cygwin_version = get_cygwin_version(); +#endif + FLUID_MEMSET(dev, 0, sizeof(fluid_oss_audio_driver_t)); fluid_settings_getint(settings, "audio.periods", &periods); @@ -540,6 +572,19 @@ fluid_oss_audio_run(void *d) { dev->read(synth, len, buffer, 0, 2, buffer, 1, 2); +#ifdef __CYGWIN__ + for (;;) + { + audio_buf_info info; + ioctl(dev->dspfd, SNDCTL_DSP_GETOSPACE, &info); + /* Reduce latency in cygwin before 3.5.0. */ + if (cygwin_version < 3005000) + info.bytes -= info.fragsize * (info.fragstotal - 4); + if (info.bytes >= dev->buffer_byte_size) + break; + usleep(100); + } +#endif if(write(dev->dspfd, buffer, dev->buffer_byte_size) < 0) { FLUID_LOG(FLUID_ERR, "Error writing to OSS sound device: %s", --- origsrc/fluidsynth-2.3.2/src/drivers/fluid_winmidi.c 2023-04-03 00:54:17.000000000 +0900 +++ src/fluidsynth-2.3.2/src/drivers/fluid_winmidi.c 2023-09-16 00:02:53.038824600 +0900 @@ -75,6 +75,8 @@ #include "fluid_midi.h" #include "fluid_mdriver.h" #include "fluid_settings.h" +#include <windows.h> +#include <mmsystem.h> #define MIDI_SYSEX_MAX_SIZE 512 #define MIDI_SYSEX_BUF_COUNT 16 --- origsrc/fluidsynth-2.3.2/src/fluidsynth.c 2023-04-03 00:54:17.000000000 +0900 +++ src/fluidsynth-2.3.2/src/fluidsynth.c 2023-09-16 00:02:53.038824600 +0900 @@ -39,6 +39,7 @@ #endif #if SDL2_SUPPORT +#define SDL_MAIN_HANDLED 1 #include <SDL.h> #endif --- origsrc/fluidsynth-2.3.2/src/utils/fluid_sys.h 2023-04-03 00:54:17.000000000 +0900 +++ src/fluidsynth-2.3.2/src/utils/fluid_sys.h 2023-09-16 00:02:53.048837900 +0900 @@ -137,6 +137,7 @@ typedef gintptr intptr_t; */ #if defined(__CYGWIN__) && HAVE_WINDOWS_H #include <windows.h> +#undef __MINGW64_VERSION_MAJOR #include <wchar.h> #endif --- origsrc/fluidsynth-2.3.2/src/utils/fluidsynth_priv.h 2023-04-03 00:54:17.000000000 +0900 +++ src/fluidsynth-2.3.2/src/utils/fluidsynth_priv.h 2023-09-16 00:02:53.048837900 +0900 @@ -45,6 +45,11 @@ #include <string.h> #endif +#ifdef __CYGWIN__ +#define DSOUND_SUPPORT 1 +#define WINMIDI_SUPPORT 1 +#endif + #include "fluidsynth.h"