Index: head/audio/lmms/Makefile =================================================================== --- head/audio/lmms/Makefile (revision 486932) +++ head/audio/lmms/Makefile (revision 486933) @@ -1,83 +1,84 @@ # Created by: Jean-Yves Lefort # $FreeBSD$ PORTNAME= lmms DISTVERSIONPREFIX= v DISTVERSION= 1.2.0-rc7 +PORTREVISION= 1 PORTEPOCH= 2 CATEGORIES= audio MAINTAINER= rodrigo@FreeBSD.org COMMENT= All-in-one sequencer, drum machine, sampler, and more LICENSE= GPLv2 LICENSE_FILE= ${WRKSRC}/LICENSE.txt DEPRECATED= Qt4 has been EOL since december 2015 EXPIRATION_DATE= 2019-03-15 BUILD_DEPENDS= ${LOCALBASE}/include/ladspa.h:audio/ladspa LIB_DEPENDS= libFLAC.so:audio/flac \ libfluidsynth.so:audio/fluidsynth \ libsamplerate.so:audio/libsamplerate \ libsndfile.so:audio/libsndfile \ libvorbis.so:audio/libvorbis \ libogg.so:audio/libogg \ libfftw3.so:math/fftw3 \ libfftw3f.so:math/fftw3-float \ libfltk.so:x11-toolkits/fltk RUN_DEPENDS= ${LOCALBASE}/share/ladspa/rdf/caps.rdf:audio/caps-plugins \ ${LOCALBASE}/lib/ladspa/cmt.so:audio/cmt \ ${LOCALBASE}/share/ladspa/rdf/swh-plugins.rdf:audio/swhplugins \ ${LOCALBASE}/share/ladspa/rdf/tap-plugins.rdf:audio/tap-plugins USES= cmake:outsource desktop-file-utils localbase:ldflags pkgconfig \ qt:4 shared-mime-info USE_GITHUB= yes GH_ACCOUNT= LMMS GH_TUPLE= rampantpixels:rpmalloc:1.3.1:rpmalloc/src/3rdparty/rpmalloc/rpmalloc USE_LDCONFIG= yes USE_QT= corelib gui linguisttools xml moc_build uic_build rcc_build qmake_build USE_XORG= x11 xext xft ice sm CMAKE_OFF= WANT_ALSA WANT_CALF WANT_CAPS WANT_CMT WANT_SWH WANT_STK \ WANT_TAP WANT_VST INSTALLS_ICONS= yes OPTIONS_DEFINE= OSS JACK PULSEAUDIO PORTAUDIO SDL SNDIO OPTIONS_DEFAULT= OSS JACK_CMAKE_BOOL= WANT_JACK JACK_LIB_DEPENDS= libjack.so:audio/jack PULSEAUDIO_CMAKE_BOOL= WANT_PULSEAUDIO PULSEAUDIO_LIB_DEPENDS= libpulse.so:audio/pulseaudio PORTAUDIO_CMAKE_BOOL= WANT_PORTAUDIO PORTAUDIO_LIB_DEPENDS= libportaudio.so:audio/portaudio SDL_CMAKE_OFF= WANT_SDL SDL_USE= SDL=sdl SNDIO_CMAKE_BOOL= WANT_SNDIO SNDIO_LIB_DEPENDS= libsndio.so:audio/sndio post-patch: @${REINPLACE_CMD} 's|/usr|${LOCALBASE}|g' ${WRKSRC}/src/core/ConfigManager.cpp @${REINPLACE_CMD} 's|/usr/local|${LOCALBASE}|g' \ ${WRKSRC}/src/core/LadspaManager.cpp @${REINPLACE_CMD} -e 's/lib64/lib/' \ ${WRKSRC}/cmake/modules/DetectMachine.cmake @${REINPLACE_CMD} 's,share/man/,man/,g' ${WRKSRC}/src/CMakeLists.txt post-patch-OSS-off: @${REINPLACE_CMD} \ -e 's|SET(LMMS_HAVE_OSS TRUE)|SET(LMMS_HAVE_OSS FALSE)|; \ s|SET(STATUS_OSS "OK")|SET(STATUS_OSS "")|' \ ${WRKSRC}/CMakeLists.txt post-install: @${RLN} ${STAGEDIR}${DATADIR}/themes/default/icon.png \ ${STAGEDIR}${PREFIX}/share/pixmaps/lmms.png .include Index: head/audio/lmms/files/patch-fluidsynth2 =================================================================== --- head/audio/lmms/files/patch-fluidsynth2 (nonexistent) +++ head/audio/lmms/files/patch-fluidsynth2 (revision 486933) @@ -0,0 +1,304 @@ +From 1f7cd3ed5af6640c0e38a2dc2d9be5a9ae036dc8 Mon Sep 17 00:00:00 2001 +From: Hyunjin Song +Date: Sun, 28 Oct 2018 10:31:33 +0900 +Subject: [PATCH] Allow building SF2 player with FluidSynth 2.x (#4678) + +Resolves the incompatibility between FluidSynth 1.x and 2.x +due to some API changes by shimming some functions. + +Note that 1.x and 2.x are not binary compatible. +--- plugins/sf2_player/fluidsynthshims.h.orig 2018-12-08 09:48:11 UTC ++++ plugins/sf2_player/fluidsynthshims.h +@@ -0,0 +1,88 @@ ++/* ++ * fluidsynthshims.h - a shim header for FluidSynth 2.0 API changes ++ * ++ * Copyright (c) 2018 Hyunjin Song ++ * ++ * This file is part of LMMS - https://lmms.io ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public ++ * License along with this program (see COPYING); if not, write to the ++ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ * Boston, MA 02110-1301 USA. ++ * ++ */ ++ ++ ++#ifndef FLUIDSYNTHSHIMS_H ++#define FLUIDSYNTHSHIMS_H ++ ++#include ++ ++#if FLUIDSYNTH_VERSION_MAJOR < 2 ++ ++inline const char* fluid_preset_get_name(fluid_preset_t* preset) ++{ ++ return preset->get_name(preset); ++} ++ ++inline int fluid_preset_get_banknum(fluid_preset_t* preset) ++{ ++ return preset->get_banknum(preset); ++} ++ ++inline int fluid_preset_get_num(fluid_preset_t* preset) ++{ ++ return preset->get_num(preset); ++} ++ ++inline fluid_sfont_t* fluid_preset_get_sfont(fluid_preset_t* preset) ++{ ++ return preset->sfont; ++} ++ ++inline char* fluid_sfont_get_name(fluid_sfont_t* sfont) ++{ ++ return sfont->get_name(sfont); ++} ++ ++inline void fluid_sfont_iteration_start(fluid_sfont_t* sfont) ++{ ++ sfont->iteration_start(sfont); ++} ++ ++// Due to the API change, we can't simply shim the 'fluid_sfont_iteration_next' function ++inline fluid_preset_t* fluid_sfont_iteration_next_wrapper(fluid_sfont_t* sfont, fluid_preset_t* preset) ++{ ++ return sfont->iteration_next(sfont, preset) ? preset : nullptr; ++} ++ ++#else // FLUIDSYNTH_VERSION_MAJOR < 2 ++ ++#define FLUID_REVERB_DEFAULT_ROOMSIZE 0.2f ++#define FLUID_REVERB_DEFAULT_DAMP 0.0f ++#define FLUID_REVERB_DEFAULT_WIDTH 0.5f ++#define FLUID_REVERB_DEFAULT_LEVEL 0.9f ++ ++#define FLUID_CHORUS_DEFAULT_N 3 ++#define FLUID_CHORUS_DEFAULT_LEVEL 2.0f ++#define FLUID_CHORUS_DEFAULT_SPEED 0.3f ++#define FLUID_CHORUS_DEFAULT_DEPTH 8.0f ++ ++inline fluid_preset_t* fluid_sfont_iteration_next_wrapper(fluid_sfont_t* sfont, fluid_preset_t*) ++{ ++ return fluid_sfont_iteration_next(sfont); ++} ++ ++#endif // FLUIDSYNTH_VERSION_MAJOR < 2 ++ ++#endif // FLUIDSYNTHSHIMS_H + plugins/sf2_player/fluidsynthshims.h | 88 +++++++++++++++++++++++++++ + plugins/sf2_player/patches_dialog.cpp | 44 ++++++++------ + plugins/sf2_player/patches_dialog.h | 2 +- + plugins/sf2_player/sf2_player.cpp | 43 ++++++++++--- + plugins/sf2_player/sf2_player.h | 2 +- + 5 files changed, 152 insertions(+), 27 deletions(-) + create mode 100644 plugins/sf2_player/fluidsynthshims.h + +new file mode 100644 +--- plugins/sf2_player/patches_dialog.cpp.orig 2018-09-25 07:47:51 UTC ++++ plugins/sf2_player/patches_dialog.cpp +@@ -143,7 +143,6 @@ void patchesDialog::setup ( fluid_synth_t * pSynth, in + m_iChan = iChan; + + +- fluid_preset_t preset; + QTreeWidgetItem *pBankItem = NULL; + // For all soundfonts (in reversed stack order) fill the available banks... + int cSoundFonts = ::fluid_synth_sfcount(m_pSynth); +@@ -151,11 +150,17 @@ void patchesDialog::setup ( fluid_synth_t * pSynth, in + fluid_sfont_t *pSoundFont = ::fluid_synth_get_sfont(m_pSynth, i); + if (pSoundFont) { + #ifdef CONFIG_FLUID_BANK_OFFSET +- int iBankOffset = ::fluid_synth_get_bank_offset(m_pSynth, pSoundFont->id); ++ int iBankOffset = ::fluid_synth_get_bank_offset(m_pSynth, fluid_sfont_get_id(pSoundFont)); + #endif +- pSoundFont->iteration_start(pSoundFont); +- while (pSoundFont->iteration_next(pSoundFont, &preset)) { +- int iBank = preset.get_banknum(&preset); ++ fluid_sfont_iteration_start(pSoundFont); ++#if FLUIDSYNTH_VERSION_MAJOR < 2 ++ fluid_preset_t preset; ++ fluid_preset_t *pCurPreset = &preset; ++#else ++ fluid_preset_t *pCurPreset; ++#endif ++ while ((pCurPreset = fluid_sfont_iteration_next_wrapper(pSoundFont, pCurPreset))) { ++ int iBank = fluid_preset_get_banknum(pCurPreset); + #ifdef CONFIG_FLUID_BANK_OFFSET + iBank += iBankOffset; + #endif +@@ -173,9 +178,9 @@ void patchesDialog::setup ( fluid_synth_t * pSynth, in + m_iBank = 0; + fluid_preset_t *pPreset = ::fluid_synth_get_channel_preset(m_pSynth, m_iChan); + if (pPreset) { +- m_iBank = pPreset->get_banknum(pPreset); ++ m_iBank = fluid_preset_get_banknum(pPreset); + #ifdef CONFIG_FLUID_BANK_OFFSET +- m_iBank += ::fluid_synth_get_bank_offset(m_pSynth, (pPreset->sfont)->id); ++ m_iBank += ::fluid_synth_get_bank_offset(m_pSynth, fluid_sfont_get_id(fluid_preset_get_sfont(sfont))); + #endif + } + +@@ -186,7 +191,7 @@ void patchesDialog::setup ( fluid_synth_t * pSynth, in + + // Set the selected program. + if (pPreset) +- m_iProg = pPreset->get_num(pPreset); ++ m_iProg = fluid_preset_get_num(pPreset); + QTreeWidgetItem *pProgItem = findProgItem(m_iProg); + m_progListView->setCurrentItem(pProgItem); + m_progListView->scrollToItem(pProgItem); +@@ -312,7 +317,6 @@ void patchesDialog::bankChanged (void) + // Clear up the program listview. + m_progListView->setSortingEnabled(false); + m_progListView->clear(); +- fluid_preset_t preset; + QTreeWidgetItem *pProgItem = NULL; + // For all soundfonts (in reversed stack order) fill the available programs... + int cSoundFonts = ::fluid_synth_sfcount(m_pSynth); +@@ -320,23 +324,29 @@ void patchesDialog::bankChanged (void) + fluid_sfont_t *pSoundFont = ::fluid_synth_get_sfont(m_pSynth, i); + if (pSoundFont) { + #ifdef CONFIG_FLUID_BANK_OFFSET +- int iBankOffset = ::fluid_synth_get_bank_offset(m_pSynth, pSoundFont->id); ++ int iBankOffset = ::fluid_synth_get_bank_offset(m_pSynth, fluid_sfont_get_id(pSoundFont)); + #endif +- pSoundFont->iteration_start(pSoundFont); +- while (pSoundFont->iteration_next(pSoundFont, &preset)) { +- int iBank = preset.get_banknum(&preset); ++ fluid_sfont_iteration_start(pSoundFont); ++#if FLUIDSYNTH_VERSION_MAJOR < 2 ++ fluid_preset_t preset; ++ fluid_preset_t *pCurPreset = &preset; ++#else ++ fluid_preset_t *pCurPreset; ++#endif ++ while ((pCurPreset = fluid_sfont_iteration_next_wrapper(pSoundFont, pCurPreset))) { ++ int iBank = fluid_preset_get_banknum(pCurPreset); + #ifdef CONFIG_FLUID_BANK_OFFSET + iBank += iBankOffset; + #endif +- int iProg = preset.get_num(&preset); ++ int iProg = fluid_preset_get_num(pCurPreset); + if (iBank == iBankSelected && !findProgItem(iProg)) { + pProgItem = new patchItem(m_progListView, pProgItem); + if (pProgItem) { + pProgItem->setText(0, QString::number(iProg)); +- pProgItem->setText(1, preset.get_name(&preset)); +- //pProgItem->setText(2, QString::number(pSoundFont->id)); ++ pProgItem->setText(1, fluid_preset_get_name(pCurPreset)); ++ //pProgItem->setText(2, QString::number(fluid_sfont_get_id(pSoundFont))); + //pProgItem->setText(3, QFileInfo( +- // pSoundFont->get_name(pSoundFont)).baseName()); ++ // fluid_sfont_get_name(pSoundFont).baseName()); + } + } + } +--- plugins/sf2_player/patches_dialog.h.orig 2018-09-25 07:47:51 UTC ++++ plugins/sf2_player/patches_dialog.h +@@ -29,7 +29,7 @@ + #include "ui_patches_dialog.h" + #include "LcdSpinBox.h" + +-#include ++#include "fluidsynthshims.h" + #include + #include + +--- plugins/sf2_player/sf2_player.cpp.orig 2018-09-25 07:47:51 UTC ++++ plugins/sf2_player/sf2_player.cpp +@@ -127,6 +127,29 @@ sf2Instrument::sf2Instrument( InstrumentTrack * _instr + // everytime we load a new soundfont. + m_synth = new_fluid_synth( m_settings ); + ++#if FLUIDSYNTH_VERSION_MAJOR >= 2 ++ // Get the default values from the setting ++ double settingVal; ++ ++ fluid_settings_getnum_default(m_settings, "synth.reverb.room-size", &settingVal); ++ m_reverbRoomSize.setInitValue(settingVal); ++ fluid_settings_getnum_default(m_settings, "synth.reverb.damping", &settingVal); ++ m_reverbDamping.setInitValue(settingVal); ++ fluid_settings_getnum_default(m_settings, "synth.reverb.width", &settingVal); ++ m_reverbWidth.setInitValue(settingVal); ++ fluid_settings_getnum_default(m_settings, "synth.reverb.level", &settingVal); ++ m_reverbLevel.setInitValue(settingVal); ++ ++ fluid_settings_getnum_default(m_settings, "synth.chorus.nr", &settingVal); ++ m_chorusNum.setInitValue(settingVal); ++ fluid_settings_getnum_default(m_settings, "synth.chorus.level", &settingVal); ++ m_chorusLevel.setInitValue(settingVal); ++ fluid_settings_getnum_default(m_settings, "synth.chorus.speed", &settingVal); ++ m_chorusSpeed.setInitValue(settingVal); ++ fluid_settings_getnum_default(m_settings, "synth.chorus.depth", &settingVal); ++ m_chorusDepth.setInitValue(settingVal); ++#endif ++ + loadFile( ConfigManager::inst()->defaultSoundfont() ); + + updateSampleRate(); +@@ -392,7 +415,6 @@ QString sf2Instrument::getCurrentPatchName() + int iBankSelected = m_bankNum.value(); + int iProgSelected = m_patchNum.value(); + +- fluid_preset_t preset; + // For all soundfonts (in reversed stack order) fill the available programs... + int cSoundFonts = ::fluid_synth_sfcount( m_synth ); + for( int i = 0; i < cSoundFonts; i++ ) +@@ -403,21 +425,26 @@ QString sf2Instrument::getCurrentPatchName() + #ifdef CONFIG_FLUID_BANK_OFFSET + int iBankOffset = + fluid_synth_get_bank_offset( +- m_synth, pSoundFont->id ); ++ m_synth, fluid_sfont_get_id(pSoundFont) ); + #endif +- pSoundFont->iteration_start( pSoundFont ); +- while( pSoundFont->iteration_next( pSoundFont, +- &preset ) ) ++ fluid_sfont_iteration_start( pSoundFont ); ++#if FLUIDSYNTH_VERSION_MAJOR < 2 ++ fluid_preset_t preset; ++ fluid_preset_t *pCurPreset = &preset; ++#else ++ fluid_preset_t *pCurPreset; ++#endif ++ while ((pCurPreset = fluid_sfont_iteration_next_wrapper(pSoundFont, pCurPreset))) + { +- int iBank = preset.get_banknum( &preset ); ++ int iBank = fluid_preset_get_banknum( pCurPreset ); + #ifdef CONFIG_FLUID_BANK_OFFSET + iBank += iBankOffset; + #endif +- int iProg = preset.get_num( &preset ); ++ int iProg = fluid_preset_get_num( pCurPreset ); + if( iBank == iBankSelected && iProg == + iProgSelected ) + { +- return preset.get_name( &preset ); ++ return fluid_preset_get_name( pCurPreset ); + } + } + } +--- plugins/sf2_player/sf2_player.h.orig 2018-09-25 07:47:51 UTC ++++ plugins/sf2_player/sf2_player.h +@@ -36,7 +36,7 @@ + #include "Knob.h" + #include "LcdSpinBox.h" + #include "LedCheckbox.h" +-#include "fluidsynth.h" ++#include "fluidsynthshims.h" + #include "MemoryManager.h" + + class sf2InstrumentView; Property changes on: head/audio/lmms/files/patch-fluidsynth2 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property