Browse Source

Fix SF2 plugin

tags/1.9.4
falkTX 11 years ago
parent
commit
639bbc90d7
3 changed files with 72 additions and 49 deletions
  1. +5
    -5
      source/backend/Makefile.mk
  2. +62
    -39
      source/backend/plugin/FluidSynthPlugin.cpp
  3. +5
    -5
      source/discovery/Makefile

+ 5
- 5
source/backend/Makefile.mk View File

@@ -31,11 +31,11 @@ endif
# ifeq ($(HAVE_CSOUND),true) # ifeq ($(HAVE_CSOUND),true)
# BUILD_CXX_FLAGS += -DWANT_CSOUND # BUILD_CXX_FLAGS += -DWANT_CSOUND
# endif # endif
#
# ifeq ($(HAVE_FLUIDSYNTH),true)
# BUILD_CXX_FLAGS += -DWANT_FLUIDSYNTH
# endif
#
ifeq ($(HAVE_FLUIDSYNTH),true)
BUILD_CXX_FLAGS += -DWANT_FLUIDSYNTH
endif
# ifeq ($(HAVE_LINUXSAMPLER),true) # ifeq ($(HAVE_LINUXSAMPLER),true)
# BUILD_CXX_FLAGS += -DWANT_LINUXSAMPLER # BUILD_CXX_FLAGS += -DWANT_LINUXSAMPLER
# endif # endif


+ 62
- 39
source/backend/plugin/FluidSynthPlugin.cpp View File

@@ -42,14 +42,12 @@ public:
fSettings(nullptr), fSettings(nullptr),
fSynth(nullptr), fSynth(nullptr),
fSynthId(-1), fSynthId(-1),
fAudio16Buffers(nullptr)
fAudio16Buffers(nullptr),
fLabel(nullptr)
{ {
carla_debug("FluidSynthPlugin::FluidSynthPlugin(%p, %i, %s)", engine, id, bool2str(use16Outs)); carla_debug("FluidSynthPlugin::FluidSynthPlugin(%p, %i, %s)", engine, id, bool2str(use16Outs));


#ifdef HAVE_JUCE
FloatVectorOperations::clear(fParamBuffers, FluidSynthParametersMax);
#else
#endif
FLOAT_CLEAR(fParamBuffers, FluidSynthParametersMax);
carla_fill<int32_t>(fCurMidiProgs, MAX_MIDI_CHANNELS, 0); carla_fill<int32_t>(fCurMidiProgs, MAX_MIDI_CHANNELS, 0);


// create settings // create settings
@@ -69,7 +67,7 @@ public:
CARLA_SAFE_ASSERT_RETURN(fSynth != nullptr,); CARLA_SAFE_ASSERT_RETURN(fSynth != nullptr,);


#ifdef FLUIDSYNTH_VERSION_NEW_API #ifdef FLUIDSYNTH_VERSION_NEW_API
fluid_synth_set_sample_rate(fSynth, pData->engine->getSampleRate());
fluid_synth_set_sample_rate(fSynth, (float)pData->engine->getSampleRate());
#endif #endif


// set default values // set default values
@@ -114,6 +112,12 @@ public:
fSettings = nullptr; fSettings = nullptr;
} }


if (fLabel != nullptr)
{
delete[] fLabel;
fLabel = nullptr;
}

clearBuffers(); clearBuffers();
} }


@@ -214,8 +218,8 @@ public:


void getLabel(char* const strBuf) const override void getLabel(char* const strBuf) const override
{ {
if (fLabel.isNotEmpty())
std::strncpy(strBuf, (const char*)fLabel, STR_MAX);
if (fLabel != nullptr)
std::strncpy(strBuf, fLabel, STR_MAX);
else else
CarlaPlugin::getLabel(strBuf); CarlaPlugin::getLabel(strBuf);
} }
@@ -407,16 +411,16 @@ public:
case FluidSynthChorusSpeedHz: case FluidSynthChorusSpeedHz:
case FluidSynthChorusDepthMs: case FluidSynthChorusDepthMs:
case FluidSynthChorusType: case FluidSynthChorusType:
fluid_synth_set_chorus(fSynth, fParamBuffers[FluidSynthChorusNr], fParamBuffers[FluidSynthChorusLevel], fParamBuffers[FluidSynthChorusSpeedHz], fParamBuffers[FluidSynthChorusDepthMs], fParamBuffers[FluidSynthChorusType]);
fluid_synth_set_chorus(fSynth, (int)fParamBuffers[FluidSynthChorusNr], fParamBuffers[FluidSynthChorusLevel], fParamBuffers[FluidSynthChorusSpeedHz], fParamBuffers[FluidSynthChorusDepthMs], (int)fParamBuffers[FluidSynthChorusType]);
break; break;


case FluidSynthPolyphony: case FluidSynthPolyphony:
fluid_synth_set_polyphony(fSynth, value);
fluid_synth_set_polyphony(fSynth, (int)value);
break; break;


case FluidSynthInterpolation: case FluidSynthInterpolation:
for (int i=0; i < MAX_MIDI_CHANNELS; ++i) for (int i=0; i < MAX_MIDI_CHANNELS; ++i)
fluid_synth_set_interp_method(fSynth, i, value);
fluid_synth_set_interp_method(fSynth, i, (int)value);
break; break;


default: default:
@@ -642,9 +646,10 @@ public:


// ---------------------- // ----------------------
j = FluidSynthReverbOnOff; j = FluidSynthReverbOnOff;
pData->param.data[j].type = PARAMETER_INPUT;
pData->param.data[j].hints = PARAMETER_IS_ENABLED /*| PARAMETER_IS_AUTOMABLE*/ | PARAMETER_IS_BOOLEAN;
pData->param.data[j].index = j; pData->param.data[j].index = j;
pData->param.data[j].rindex = j; pData->param.data[j].rindex = j;
pData->param.data[j].hints = PARAMETER_IS_INPUT | PARAMETER_IS_ENABLED /*| PARAMETER_IS_AUTOMABLE*/ | PARAMETER_IS_BOOLEAN;
pData->param.data[j].midiChannel = 0; pData->param.data[j].midiChannel = 0;
pData->param.data[j].midiCC = -1; pData->param.data[j].midiCC = -1;
pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].min = 0.0f;
@@ -657,9 +662,10 @@ public:


// ---------------------- // ----------------------
j = FluidSynthReverbRoomSize; j = FluidSynthReverbRoomSize;
pData->param.data[j].type = PARAMETER_INPUT;
pData->param.data[j].hints = PARAMETER_IS_ENABLED /*| PARAMETER_IS_AUTOMABLE*/;
pData->param.data[j].index = j; pData->param.data[j].index = j;
pData->param.data[j].rindex = j; pData->param.data[j].rindex = j;
pData->param.data[j].hints = PARAMETER_IS_INPUT | PARAMETER_IS_ENABLED /*| PARAMETER_IS_AUTOMABLE*/;
pData->param.data[j].midiChannel = 0; pData->param.data[j].midiChannel = 0;
pData->param.data[j].midiCC = -1; pData->param.data[j].midiCC = -1;
pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].min = 0.0f;
@@ -672,9 +678,10 @@ public:


// ---------------------- // ----------------------
j = FluidSynthReverbDamp; j = FluidSynthReverbDamp;
pData->param.data[j].type = PARAMETER_INPUT;
pData->param.data[j].hints = PARAMETER_IS_ENABLED /*| PARAMETER_IS_AUTOMABLE*/;
pData->param.data[j].index = j; pData->param.data[j].index = j;
pData->param.data[j].rindex = j; pData->param.data[j].rindex = j;
pData->param.data[j].hints = PARAMETER_IS_INPUT | PARAMETER_IS_ENABLED /*| PARAMETER_IS_AUTOMABLE*/;
pData->param.data[j].midiChannel = 0; pData->param.data[j].midiChannel = 0;
pData->param.data[j].midiCC = -1; pData->param.data[j].midiCC = -1;
pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].min = 0.0f;
@@ -687,9 +694,10 @@ public:


// ---------------------- // ----------------------
j = FluidSynthReverbLevel; j = FluidSynthReverbLevel;
pData->param.data[j].type = PARAMETER_INPUT;
pData->param.data[j].hints = PARAMETER_IS_ENABLED /*| PARAMETER_IS_AUTOMABLE*/;
pData->param.data[j].index = j; pData->param.data[j].index = j;
pData->param.data[j].rindex = j; pData->param.data[j].rindex = j;
pData->param.data[j].hints = PARAMETER_IS_INPUT | PARAMETER_IS_ENABLED /*| PARAMETER_IS_AUTOMABLE*/;
pData->param.data[j].midiChannel = 0; pData->param.data[j].midiChannel = 0;
pData->param.data[j].midiCC = MIDI_CONTROL_REVERB_SEND_LEVEL; pData->param.data[j].midiCC = MIDI_CONTROL_REVERB_SEND_LEVEL;
pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].min = 0.0f;
@@ -702,9 +710,10 @@ public:


// ---------------------- // ----------------------
j = FluidSynthReverbWidth; j = FluidSynthReverbWidth;
pData->param.data[j].type = PARAMETER_INPUT;
pData->param.data[j].hints = PARAMETER_IS_ENABLED /*| PARAMETER_IS_AUTOMABLE*/;
pData->param.data[j].index = j; pData->param.data[j].index = j;
pData->param.data[j].rindex = j; pData->param.data[j].rindex = j;
pData->param.data[j].hints = PARAMETER_IS_INPUT | PARAMETER_IS_ENABLED /*| PARAMETER_IS_AUTOMABLE*/;
pData->param.data[j].midiChannel = 0; pData->param.data[j].midiChannel = 0;
pData->param.data[j].midiCC = -1; pData->param.data[j].midiCC = -1;
pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].min = 0.0f;
@@ -717,9 +726,10 @@ public:


// ---------------------- // ----------------------
j = FluidSynthChorusOnOff; j = FluidSynthChorusOnOff;
pData->param.data[j].type = PARAMETER_INPUT;
pData->param.data[j].hints = PARAMETER_IS_ENABLED | PARAMETER_IS_BOOLEAN;
pData->param.data[j].index = j; pData->param.data[j].index = j;
pData->param.data[j].rindex = j; pData->param.data[j].rindex = j;
pData->param.data[j].hints = PARAMETER_IS_INPUT | PARAMETER_IS_ENABLED | PARAMETER_IS_BOOLEAN;
pData->param.data[j].midiChannel = 0; pData->param.data[j].midiChannel = 0;
pData->param.data[j].midiCC = -1; pData->param.data[j].midiCC = -1;
pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].min = 0.0f;
@@ -732,9 +742,10 @@ public:


// ---------------------- // ----------------------
j = FluidSynthChorusNr; j = FluidSynthChorusNr;
pData->param.data[j].type = PARAMETER_INPUT;
pData->param.data[j].hints = PARAMETER_IS_ENABLED | PARAMETER_IS_INTEGER;
pData->param.data[j].index = j; pData->param.data[j].index = j;
pData->param.data[j].rindex = j; pData->param.data[j].rindex = j;
pData->param.data[j].hints = PARAMETER_IS_INPUT | PARAMETER_IS_ENABLED | PARAMETER_IS_INTEGER;
pData->param.data[j].midiChannel = 0; pData->param.data[j].midiChannel = 0;
pData->param.data[j].midiCC = -1; pData->param.data[j].midiCC = -1;
pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].min = 0.0f;
@@ -747,9 +758,10 @@ public:


// ---------------------- // ----------------------
j = FluidSynthChorusLevel; j = FluidSynthChorusLevel;
pData->param.data[j].type = PARAMETER_INPUT;
pData->param.data[j].hints = PARAMETER_IS_ENABLED;
pData->param.data[j].index = j; pData->param.data[j].index = j;
pData->param.data[j].rindex = j; pData->param.data[j].rindex = j;
pData->param.data[j].hints = PARAMETER_IS_INPUT | PARAMETER_IS_ENABLED;
pData->param.data[j].midiChannel = 0; pData->param.data[j].midiChannel = 0;
pData->param.data[j].midiCC = 0; //MIDI_CONTROL_CHORUS_SEND_LEVEL; pData->param.data[j].midiCC = 0; //MIDI_CONTROL_CHORUS_SEND_LEVEL;
pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].min = 0.0f;
@@ -762,9 +774,10 @@ public:


// ---------------------- // ----------------------
j = FluidSynthChorusSpeedHz; j = FluidSynthChorusSpeedHz;
pData->param.data[j].type = PARAMETER_INPUT;
pData->param.data[j].hints = PARAMETER_IS_ENABLED;
pData->param.data[j].index = j; pData->param.data[j].index = j;
pData->param.data[j].rindex = j; pData->param.data[j].rindex = j;
pData->param.data[j].hints = PARAMETER_IS_INPUT | PARAMETER_IS_ENABLED;
pData->param.data[j].midiChannel = 0; pData->param.data[j].midiChannel = 0;
pData->param.data[j].midiCC = -1; pData->param.data[j].midiCC = -1;
pData->param.ranges[j].min = 0.29f; pData->param.ranges[j].min = 0.29f;
@@ -777,13 +790,14 @@ public:


// ---------------------- // ----------------------
j = FluidSynthChorusDepthMs; j = FluidSynthChorusDepthMs;
pData->param.data[j].type = PARAMETER_INPUT;
pData->param.data[j].hints = PARAMETER_IS_ENABLED;
pData->param.data[j].index = j; pData->param.data[j].index = j;
pData->param.data[j].rindex = j; pData->param.data[j].rindex = j;
pData->param.data[j].hints = PARAMETER_IS_INPUT | PARAMETER_IS_ENABLED;
pData->param.data[j].midiChannel = 0; pData->param.data[j].midiChannel = 0;
pData->param.data[j].midiCC = -1; pData->param.data[j].midiCC = -1;
pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].min = 0.0f;
pData->param.ranges[j].max = 2048.0 * 1000.0 / pData->engine->getSampleRate(); // FIXME?
pData->param.ranges[j].max = float(2048.0 * 1000.0 / pData->engine->getSampleRate()); // FIXME?
pData->param.ranges[j].def = FLUID_CHORUS_DEFAULT_DEPTH; pData->param.ranges[j].def = FLUID_CHORUS_DEFAULT_DEPTH;
pData->param.ranges[j].step = 0.01f; pData->param.ranges[j].step = 0.01f;
pData->param.ranges[j].stepSmall = 0.0001f; pData->param.ranges[j].stepSmall = 0.0001f;
@@ -792,9 +806,10 @@ public:


// ---------------------- // ----------------------
j = FluidSynthChorusType; j = FluidSynthChorusType;
pData->param.data[j].type = PARAMETER_INPUT;
pData->param.data[j].hints = PARAMETER_IS_ENABLED | PARAMETER_IS_INTEGER | PARAMETER_USES_SCALEPOINTS;
pData->param.data[j].index = j; pData->param.data[j].index = j;
pData->param.data[j].rindex = j; pData->param.data[j].rindex = j;
pData->param.data[j].hints = PARAMETER_IS_INPUT | PARAMETER_IS_ENABLED | PARAMETER_IS_INTEGER | PARAMETER_USES_SCALEPOINTS;
pData->param.data[j].midiChannel = 0; pData->param.data[j].midiChannel = 0;
pData->param.data[j].midiCC = -1; pData->param.data[j].midiCC = -1;
pData->param.ranges[j].min = FLUID_CHORUS_MOD_SINE; pData->param.ranges[j].min = FLUID_CHORUS_MOD_SINE;
@@ -807,14 +822,15 @@ public:


// ---------------------- // ----------------------
j = FluidSynthPolyphony; j = FluidSynthPolyphony;
pData->param.data[j].type = PARAMETER_INPUT;
pData->param.data[j].hints = PARAMETER_IS_ENABLED | PARAMETER_IS_INTEGER;
pData->param.data[j].index = j; pData->param.data[j].index = j;
pData->param.data[j].rindex = j; pData->param.data[j].rindex = j;
pData->param.data[j].hints = PARAMETER_IS_INPUT | PARAMETER_IS_ENABLED | PARAMETER_IS_INTEGER;
pData->param.data[j].midiChannel = 0; pData->param.data[j].midiChannel = 0;
pData->param.data[j].midiCC = -1; pData->param.data[j].midiCC = -1;
pData->param.ranges[j].min = 1.0f; pData->param.ranges[j].min = 1.0f;
pData->param.ranges[j].max = 512.0f; // max theoric is 65535 pData->param.ranges[j].max = 512.0f; // max theoric is 65535
pData->param.ranges[j].def = fluid_synth_get_polyphony(fSynth);
pData->param.ranges[j].def = (float)fluid_synth_get_polyphony(fSynth);
pData->param.ranges[j].step = 1.0f; pData->param.ranges[j].step = 1.0f;
pData->param.ranges[j].stepSmall = 1.0f; pData->param.ranges[j].stepSmall = 1.0f;
pData->param.ranges[j].stepLarge = 10.0f; pData->param.ranges[j].stepLarge = 10.0f;
@@ -822,9 +838,10 @@ public:


// ---------------------- // ----------------------
j = FluidSynthInterpolation; j = FluidSynthInterpolation;
pData->param.data[j].type = PARAMETER_INPUT;
pData->param.data[j].hints = PARAMETER_IS_ENABLED | PARAMETER_IS_INTEGER | PARAMETER_USES_SCALEPOINTS;
pData->param.data[j].index = j; pData->param.data[j].index = j;
pData->param.data[j].rindex = j; pData->param.data[j].rindex = j;
pData->param.data[j].hints = PARAMETER_IS_INPUT | PARAMETER_IS_ENABLED | PARAMETER_IS_INTEGER | PARAMETER_USES_SCALEPOINTS;
pData->param.data[j].midiChannel = 0; pData->param.data[j].midiChannel = 0;
pData->param.data[j].midiCC = -1; pData->param.data[j].midiCC = -1;
pData->param.ranges[j].min = FLUID_INTERP_NONE; pData->param.ranges[j].min = FLUID_INTERP_NONE;
@@ -837,9 +854,10 @@ public:


// ---------------------- // ----------------------
j = FluidSynthVoiceCount; j = FluidSynthVoiceCount;
pData->param.data[j].type = PARAMETER_OUTPUT;
pData->param.data[j].hints = PARAMETER_IS_ENABLED | PARAMETER_IS_AUTOMABLE | PARAMETER_IS_INTEGER;
pData->param.data[j].index = j; pData->param.data[j].index = j;
pData->param.data[j].rindex = j; pData->param.data[j].rindex = j;
pData->param.data[j].hints = PARAMETER_IS_ENABLED | PARAMETER_IS_AUTOMABLE | PARAMETER_IS_INTEGER;
pData->param.data[j].midiChannel = 0; pData->param.data[j].midiChannel = 0;
pData->param.data[j].midiCC = -1; pData->param.data[j].midiCC = -1;
pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].min = 0.0f;
@@ -1162,7 +1180,7 @@ public:
continue; continue;
if (pData->param.data[k].midiCC != ctrlEvent.param) if (pData->param.data[k].midiCC != ctrlEvent.param)
continue; continue;
if ((pData->param.data[k].hints & PARAMETER_IS_INPUT) == 0)
if (pData->param.data[k].hints != PARAMETER_INPUT)
continue; continue;
if ((pData->param.data[k].hints & PARAMETER_IS_AUTOMABLE) == 0) if ((pData->param.data[k].hints & PARAMETER_IS_AUTOMABLE) == 0)
continue; continue;
@@ -1187,7 +1205,7 @@ public:


if ((pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0 && ctrlEvent.param <= 0x5F) if ((pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0 && ctrlEvent.param <= 0x5F)
{ {
fluid_synth_cc(fSynth, event.channel, ctrlEvent.param, ctrlEvent.value*127.0f);
fluid_synth_cc(fSynth, event.channel, ctrlEvent.param, int(ctrlEvent.value*127.0f));
} }


break; break;
@@ -1261,7 +1279,7 @@ public:


// Fix bad note-off // Fix bad note-off
if (MIDI_IS_STATUS_NOTE_ON(status) && midiEvent.data[2] == 0) if (MIDI_IS_STATUS_NOTE_ON(status) && midiEvent.data[2] == 0)
status -= 0x10;
status = MIDI_STATUS_NOTE_OFF;


if (MIDI_IS_STATUS_NOTE_OFF(status)) if (MIDI_IS_STATUS_NOTE_OFF(status))
{ {
@@ -1327,7 +1345,7 @@ public:


{ {
k = FluidSynthVoiceCount; k = FluidSynthVoiceCount;
fParamBuffers[k] = fluid_synth_get_active_voice_count(fSynth);
fParamBuffers[k] = (float)fluid_synth_get_active_voice_count(fSynth);
pData->param.ranges[k].fixValue(fParamBuffers[k]); pData->param.ranges[k].fixValue(fParamBuffers[k]);


if (pData->param.data[k].midiCC > 0) if (pData->param.data[k].midiCC > 0)
@@ -1556,11 +1574,13 @@ public:
// --------------------------------------------------------------- // ---------------------------------------------------------------
// get info // get info


pData->filename = filename;
fLabel = label;
CarlaString label2(label);

if (kUses16Outs && ! label2.endsWith(" (16 outs)"))
label2 += " (16 outs)";


if (kUses16Outs && ! fLabel.endsWith(" (16 outs)"))
fLabel += " (16 outs)";
pData->filename = carla_strdup(filename);
fLabel = label2.dup();


if (name != nullptr) if (name != nullptr)
pData->name = pData->engine->getUniquePluginName(name); pData->name = pData->engine->getUniquePluginName(name);
@@ -1591,9 +1611,12 @@ public:
pData->options |= PLUGIN_OPTION_SEND_PITCHBEND; pData->options |= PLUGIN_OPTION_SEND_PITCHBEND;
pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF;


// set identifier string
CarlaString identifier("SF2/");
identifier += label;
pData->identifier = identifier.dup();

// load settings // load settings
pData->idStr = "SF2/";
pData->idStr += label;
pData->options = pData->loadSettings(pData->options, getOptionsAvailable()); pData->options = pData->loadSettings(pData->options, getOptionsAvailable());
} }


@@ -1621,8 +1644,6 @@ private:


const bool kUses16Outs; const bool kUses16Outs;


CarlaString fLabel;

fluid_settings_t* fSettings; fluid_settings_t* fSettings;
fluid_synth_t* fSynth; fluid_synth_t* fSynth;
int fSynthId; int fSynthId;
@@ -1632,6 +1653,8 @@ private:


int32_t fCurMidiProgs[MAX_MIDI_CHANNELS]; int32_t fCurMidiProgs[MAX_MIDI_CHANNELS];


const char* fLabel;

CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(FluidSynthPlugin) CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(FluidSynthPlugin)
}; };




+ 5
- 5
source/discovery/Makefile View File

@@ -30,11 +30,11 @@ endif
# ifeq ($(HAVE_CSOUND),true) # ifeq ($(HAVE_CSOUND),true)
# NATIVE_FLAGS += $(shell pkg-config --cflags --libs sndfile) -lcsound64 -DWANT_CSOUND # NATIVE_FLAGS += $(shell pkg-config --cflags --libs sndfile) -lcsound64 -DWANT_CSOUND
# endif # endif
#
# ifeq ($(HAVE_FLUIDSYNTH),true)
# NATIVE_FLAGS += $(shell pkg-config --cflags --libs fluidsynth) -DWANT_FLUIDSYNTH
# endif
#
ifeq ($(HAVE_FLUIDSYNTH),true)
NATIVE_FLAGS += $(FLUIDSYNTH_FLAGS) $(FLUIDSYNTH_LIBS) -DWANT_FLUIDSYNTH
endif
# ifeq ($(HAVE_LINUXSAMPLER),true) # ifeq ($(HAVE_LINUXSAMPLER),true)
# NATIVE_FLAGS += $(shell pkg-config --cflags --libs linuxsampler) -DWANT_LINUXSAMPLER # NATIVE_FLAGS += $(shell pkg-config --cflags --libs linuxsampler) -DWANT_LINUXSAMPLER
# endif # endif


Loading…
Cancel
Save