@@ -52,10 +52,15 @@ public: | |||||
: NativePluginClass(host), | : NativePluginClass(host), | ||||
fLoopMode(false), | fLoopMode(false), | ||||
fDoProcess(false), | fDoProcess(false), | ||||
fLength(0) | |||||
//fThread("AudioFilePluginThread") | |||||
fLength(0), | |||||
//fThread("AudioFilePluginThread"), | |||||
fReaderBuffer(), | |||||
fReaderMutex(), | |||||
fReader(), | |||||
fReaderSource(), | |||||
leakDetector_AudioFilePlugin() | |||||
{ | { | ||||
fReaderBuffer.setSize(2, getBufferSize()); | |||||
fReaderBuffer.setSize(2, static_cast<int>(getBufferSize())); | |||||
} | } | ||||
~AudioFilePlugin() override | ~AudioFilePlugin() override | ||||
@@ -142,6 +147,7 @@ protected: | |||||
void process(float**, float** const outBuffer, const uint32_t frames, const NativeMidiEvent* const, const uint32_t) override | void process(float**, float** const outBuffer, const uint32_t frames, const NativeMidiEvent* const, const uint32_t) override | ||||
{ | { | ||||
const NativeTimeInfo* const timePos(getTimeInfo()); | const NativeTimeInfo* const timePos(getTimeInfo()); | ||||
const int iframes(static_cast<int>(frames)); | |||||
float* const out1(outBuffer[0]); | float* const out1(outBuffer[0]); | ||||
float* const out2(outBuffer[1]); | float* const out2(outBuffer[1]); | ||||
@@ -149,19 +155,19 @@ protected: | |||||
if (fLength == 0 || ! fDoProcess) | if (fLength == 0 || ! fDoProcess) | ||||
{ | { | ||||
//carla_stderr("P: no process"); | //carla_stderr("P: no process"); | ||||
FloatVectorOperations::clear(out1, frames); | |||||
FloatVectorOperations::clear(out2, frames); | |||||
FloatVectorOperations::clear(out1, iframes); | |||||
FloatVectorOperations::clear(out2, iframes); | |||||
return; | return; | ||||
} | } | ||||
const int64_t nextReadPos(fLoopMode ? (timePos->frame % fLength) : timePos->frame); | |||||
const int64_t nextReadPos(fLoopMode ? (static_cast<int64_t>(timePos->frame) % fLength) : static_cast<int64_t>(timePos->frame)); | |||||
// not playing | // not playing | ||||
if (! timePos->playing) | if (! timePos->playing) | ||||
{ | { | ||||
//carla_stderr("P: not playing"); | //carla_stderr("P: not playing"); | ||||
FloatVectorOperations::clear(out1, frames); | |||||
FloatVectorOperations::clear(out2, frames); | |||||
FloatVectorOperations::clear(out1, iframes); | |||||
FloatVectorOperations::clear(out2, iframes); | |||||
const CarlaMutexLocker cml(fReaderMutex); | const CarlaMutexLocker cml(fReaderMutex); | ||||
@@ -179,10 +185,10 @@ protected: | |||||
if (fReader == nullptr) | if (fReader == nullptr) | ||||
return; | return; | ||||
fReader->read(&fReaderBuffer, 0, frames, nextReadPos, true, true); | |||||
fReader->read(&fReaderBuffer, 0, iframes, nextReadPos, true, true); | |||||
FloatVectorOperations::copy(out1, fReaderBuffer.getReadPointer(0), frames); | |||||
FloatVectorOperations::copy(out2, fReaderBuffer.getReadPointer(1), frames); | |||||
FloatVectorOperations::copy(out1, fReaderBuffer.getReadPointer(0), iframes); | |||||
FloatVectorOperations::copy(out2, fReaderBuffer.getReadPointer(1), iframes); | |||||
} | } | ||||
// ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
@@ -204,7 +210,7 @@ protected: | |||||
void bufferSizeChanged(const uint32_t bufferSize) override | void bufferSizeChanged(const uint32_t bufferSize) override | ||||
{ | { | ||||
fReaderBuffer.setSize(2, bufferSize); | |||||
fReaderBuffer.setSize(2, static_cast<int>(bufferSize)); | |||||
} | } | ||||
private: | private: | ||||
@@ -304,6 +310,9 @@ static const NativePluginDescriptor audiofileDesc = { | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
CARLA_EXPORT | |||||
void carla_register_native_plugin_audiofile(); | |||||
CARLA_EXPORT | CARLA_EXPORT | ||||
void carla_register_native_plugin_audiofile() | void carla_register_native_plugin_audiofile() | ||||
{ | { | ||||
@@ -29,14 +29,15 @@ | |||||
#include "filter.h" | #include "filter.h" | ||||
static float exp2ap(float x) | |||||
static | |||||
float | |||||
exp2ap(float x) | |||||
{ | { | ||||
int i; | int i; | ||||
i = (int)(floor(x)); | |||||
x -= i; | |||||
// return ldexp(1 + x * (0.66 + 0.34 * x), i); | |||||
return ldexp(1 + x * (0.6930 + x * (0.2416 + x * (0.0517 + x * 0.0137))), i); | |||||
i = (int)(floorf(x)); | |||||
x -= (float)i; | |||||
return ldexpf(1.0f + x * (0.6930f + x * (0.2416f + x * (0.0517f + x * 0.0137f))), i); | |||||
} | } | ||||
struct param_sect | struct param_sect | ||||
@@ -46,6 +47,7 @@ struct param_sect | |||||
float z1, z2; | float z1, z2; | ||||
}; | }; | ||||
static | |||||
void | void | ||||
param_sect_init( | param_sect_init( | ||||
struct param_sect * sect_ptr) | struct param_sect * sect_ptr) | ||||
@@ -55,10 +57,11 @@ param_sect_init( | |||||
sect_ptr->a = sect_ptr->s1 = sect_ptr->s2 = sect_ptr->z1 = sect_ptr->z2 = 0.0f; | sect_ptr->a = sect_ptr->s1 = sect_ptr->s2 = sect_ptr->z1 = sect_ptr->z2 = 0.0f; | ||||
} | } | ||||
static | |||||
void | void | ||||
param_sect_proc( | param_sect_proc( | ||||
struct param_sect * sect_ptr, | struct param_sect * sect_ptr, | ||||
int k, | |||||
unsigned long k, | |||||
float * sig, | float * sig, | ||||
float f, | float f, | ||||
float b, | float b, | ||||
@@ -80,7 +83,7 @@ param_sect_proc( | |||||
else if (f > 2.0f * sect_ptr->f) f = 2.0f * sect_ptr->f; | else if (f > 2.0f * sect_ptr->f) f = 2.0f * sect_ptr->f; | ||||
sect_ptr->f = f; | sect_ptr->f = f; | ||||
sect_ptr->s1 = -cosf(6.283185f * f); | sect_ptr->s1 = -cosf(6.283185f * f); | ||||
d1 = (sect_ptr->s1 - s1) / k; | |||||
d1 = (sect_ptr->s1 - s1) / (float)k; | |||||
u2 = true; | u2 = true; | ||||
} | } | ||||
@@ -90,7 +93,7 @@ param_sect_proc( | |||||
else if (g > 2.0f * sect_ptr->g) g = 2.0f * sect_ptr->g; | else if (g > 2.0f * sect_ptr->g) g = 2.0f * sect_ptr->g; | ||||
sect_ptr->g = g; | sect_ptr->g = g; | ||||
sect_ptr->a = 0.5f * (g - 1.0f); | sect_ptr->a = 0.5f * (g - 1.0f); | ||||
da = (sect_ptr->a - a) / k; | |||||
da = (sect_ptr->a - a) / (float)k; | |||||
u2 = true; | u2 = true; | ||||
} | } | ||||
@@ -106,7 +109,7 @@ param_sect_proc( | |||||
{ | { | ||||
b *= 7 * f / sqrtf(g); | b *= 7 * f / sqrtf(g); | ||||
sect_ptr->s2 = (1 - b) / (1 + b); | sect_ptr->s2 = (1 - b) / (1 + b); | ||||
d2 = (sect_ptr->s2 - s2) / k; | |||||
d2 = (sect_ptr->s2 - s2) / (float)k; | |||||
} | } | ||||
while (k--) | while (k--) | ||||
@@ -133,7 +136,7 @@ struct filter | |||||
const float ** band_parameters; /* [band_index * BAND_PARAMETERS_COUNT + parameter_index] */ | const float ** band_parameters; /* [band_index * BAND_PARAMETERS_COUNT + parameter_index] */ | ||||
float gain; | float gain; | ||||
int fade; | |||||
unsigned long fade; | |||||
struct param_sect * sect; /* [band_index] */ | struct param_sect * sect; /* [band_index] */ | ||||
}; | }; | ||||
@@ -232,7 +235,8 @@ filter_run( | |||||
float * output_buffer, | float * output_buffer, | ||||
unsigned long samples_count) | unsigned long samples_count) | ||||
{ | { | ||||
int i, j, k; | |||||
unsigned long i, j, k; | |||||
unsigned long bands_count; | |||||
const float * p; | const float * p; | ||||
float sig[48]; | float sig[48]; | ||||
float t, g, d; | float t, g, d; | ||||
@@ -240,22 +244,21 @@ filter_run( | |||||
float sfreq[filter_ptr->bands_count]; | float sfreq[filter_ptr->bands_count]; | ||||
float sband[filter_ptr->bands_count]; | float sband[filter_ptr->bands_count]; | ||||
float sgain[filter_ptr->bands_count]; | float sgain[filter_ptr->bands_count]; | ||||
float bands_count; | |||||
bands_count = filter_ptr->bands_count; | bands_count = filter_ptr->bands_count; | ||||
fgain = exp2ap(0.1661 * *filter_ptr->global_parameters[GLOBAL_PARAMETER_GAIN]); | |||||
fgain = exp2ap(0.1661f * *filter_ptr->global_parameters[GLOBAL_PARAMETER_GAIN]); | |||||
for (j = 0; j < bands_count; ++j) | for (j = 0; j < bands_count; ++j) | ||||
{ | { | ||||
t = *filter_ptr->band_parameters[BAND_PARAMETERS_COUNT * j + BAND_PARAMETER_FREQUENCY] / filter_ptr->sample_rate; | t = *filter_ptr->band_parameters[BAND_PARAMETERS_COUNT * j + BAND_PARAMETER_FREQUENCY] / filter_ptr->sample_rate; | ||||
if (t < 0.0002) | |||||
if (t < 0.0002f) | |||||
{ | { | ||||
t = 0.0002; | |||||
t = 0.0002f; | |||||
} | } | ||||
else if (t > 0.4998) | |||||
else if (t > 0.4998f) | |||||
{ | { | ||||
t = 0.4998; | |||||
t = 0.4998f; | |||||
} | } | ||||
sfreq[j] = t; | sfreq[j] = t; | ||||
@@ -263,11 +266,11 @@ filter_run( | |||||
if (*filter_ptr->band_parameters[BAND_PARAMETERS_COUNT * j + BAND_PARAMETER_ACTIVE] > 0.0) | if (*filter_ptr->band_parameters[BAND_PARAMETERS_COUNT * j + BAND_PARAMETER_ACTIVE] > 0.0) | ||||
{ | { | ||||
sgain[j] = exp2ap(0.1661 * *filter_ptr->band_parameters[BAND_PARAMETERS_COUNT * j + BAND_PARAMETER_GAIN]); | |||||
sgain[j] = exp2ap(0.1661f * *filter_ptr->band_parameters[BAND_PARAMETERS_COUNT * j + BAND_PARAMETER_GAIN]); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
sgain[j] = 1.0; | |||||
sgain[j] = 1.0f; | |||||
} | } | ||||
} | } | ||||
@@ -278,17 +281,17 @@ filter_run( | |||||
t = fgain; | t = fgain; | ||||
g = filter_ptr->gain; | g = filter_ptr->gain; | ||||
if (t > 1.25 * g) | |||||
if (t > 1.25f * g) | |||||
{ | { | ||||
t = 1.25 * g; | |||||
t = 1.25f * g; | |||||
} | } | ||||
else if (t < 0.80 * g) | |||||
else if (t < 0.80f * g) | |||||
{ | { | ||||
t = 0.80 * g; | |||||
t = 0.80f * g; | |||||
} | } | ||||
filter_ptr->gain = t; | filter_ptr->gain = t; | ||||
d = (t - g) / k; | |||||
d = (t - g) / (float)k; | |||||
for (i = 0; i < k; ++i) | for (i = 0; i < k; ++i) | ||||
{ | { | ||||
g += d; | g += d; | ||||
@@ -301,10 +304,10 @@ filter_run( | |||||
} | } | ||||
j = filter_ptr->fade; | j = filter_ptr->fade; | ||||
g = j / 16.0; | |||||
g = (float)j / 16.0f; | |||||
p = 0; | p = 0; | ||||
if (*filter_ptr->global_parameters[GLOBAL_PARAMETER_ACTIVE] > 0.0) | |||||
if (*filter_ptr->global_parameters[GLOBAL_PARAMETER_ACTIVE] > 0.0f) | |||||
{ | { | ||||
if (j == 16) | if (j == 16) | ||||
{ | { | ||||
@@ -335,11 +338,11 @@ filter_run( | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
d = (j / 16.0 - g) / k; | |||||
d = ((float)j / 16.0f - g) / (float)k; | |||||
for (i = 0; i < k; ++i) | for (i = 0; i < k; ++i) | ||||
{ | { | ||||
g += d; | g += d; | ||||
output_buffer[i] = g * sig[i] + (1 - g) * input_buffer[i]; | |||||
output_buffer[i] = g * sig[i] + (1.0f - g) * input_buffer[i]; | |||||
} | } | ||||
} | } | ||||
@@ -53,6 +53,7 @@ struct nekofilter | |||||
#endif | #endif | ||||
}; | }; | ||||
static | |||||
NativePluginHandle | NativePluginHandle | ||||
nekofilter_instantiate( | nekofilter_instantiate( | ||||
const NativeHostDescriptor* host) | const NativeHostDescriptor* host) | ||||
@@ -139,6 +140,7 @@ nekofilter_instantiate( | |||||
#define nekofilter_ptr ((struct nekofilter *)handle) | #define nekofilter_ptr ((struct nekofilter *)handle) | ||||
static | |||||
uint32_t | uint32_t | ||||
nekofilter_get_parameter_count( | nekofilter_get_parameter_count( | ||||
NativePluginHandle handle) | NativePluginHandle handle) | ||||
@@ -149,6 +151,7 @@ nekofilter_get_parameter_count( | |||||
(void)handle; | (void)handle; | ||||
} | } | ||||
static | |||||
const NativeParameter* | const NativeParameter* | ||||
nekofilter_get_parameter_info( | nekofilter_get_parameter_info( | ||||
NativePluginHandle handle, | NativePluginHandle handle, | ||||
@@ -281,6 +284,7 @@ ready: | |||||
return ¶m; | return ¶m; | ||||
} | } | ||||
static | |||||
float | float | ||||
nekofilter_get_parameter_value( | nekofilter_get_parameter_value( | ||||
NativePluginHandle handle, | NativePluginHandle handle, | ||||
@@ -299,6 +303,7 @@ nekofilter_get_parameter_value( | |||||
} | } | ||||
} | } | ||||
static | |||||
void | void | ||||
nekofilter_set_parameter_value( | nekofilter_set_parameter_value( | ||||
NativePluginHandle handle, | NativePluginHandle handle, | ||||
@@ -318,6 +323,7 @@ nekofilter_set_parameter_value( | |||||
} | } | ||||
} | } | ||||
static | |||||
void | void | ||||
nekofilter_process( | nekofilter_process( | ||||
NativePluginHandle handle, | NativePluginHandle handle, | ||||
@@ -342,7 +348,9 @@ nekofilter_process( | |||||
} | } | ||||
#ifdef WANT_UI | #ifdef WANT_UI | ||||
void nekofilter_ui_show( | |||||
static | |||||
void | |||||
nekofilter_ui_show( | |||||
NativePluginHandle handle, | NativePluginHandle handle, | ||||
bool show) | bool show) | ||||
{ | { | ||||
@@ -359,14 +367,18 @@ void nekofilter_ui_show( | |||||
nekoui_hide(nekofilter_ptr->ui); | nekoui_hide(nekofilter_ptr->ui); | ||||
} | } | ||||
void nekofilter_ui_idle( | |||||
static | |||||
void | |||||
nekofilter_ui_idle( | |||||
NativePluginHandle handle) | NativePluginHandle handle) | ||||
{ | { | ||||
if (nekofilter_ptr->ui != NULL) | if (nekofilter_ptr->ui != NULL) | ||||
nekoui_run(nekofilter_ptr->ui); | nekoui_run(nekofilter_ptr->ui); | ||||
} | } | ||||
void nekofilter_ui_set_parameter_value( | |||||
static | |||||
void | |||||
nekofilter_ui_set_parameter_value( | |||||
NativePluginHandle handle, | NativePluginHandle handle, | ||||
uint32_t index, | uint32_t index, | ||||
float value) | float value) | ||||
@@ -376,6 +388,7 @@ void nekofilter_ui_set_parameter_value( | |||||
} | } | ||||
#endif | #endif | ||||
static | |||||
void | void | ||||
nekofilter_cleanup( | nekofilter_cleanup( | ||||
NativePluginHandle handle) | NativePluginHandle handle) | ||||
@@ -341,7 +341,7 @@ static int clone_fn(void * context) | |||||
#endif | #endif | ||||
static bool do_fork(char * argv[6], int* ret /*, int pipe1[2], int pipe2[2]*/) | |||||
static bool do_fork(char* const argv[6], int* ret /*, int pipe1[2], int pipe2[2]*/) | |||||
{ | { | ||||
int ret2 = *ret = FORK(); | int ret2 = *ret = FORK(); | ||||
@@ -355,7 +355,7 @@ static bool do_fork(char * argv[6], int* ret /*, int pipe1[2], int pipe2[2]*/) | |||||
close(pipe2[0]); | close(pipe2[0]); | ||||
#endif | #endif | ||||
execvp(argv[0], /*(char **)*/argv); | |||||
execvp(argv[0], argv); | |||||
fprintf(stderr, "exec of UI failed: %s\n", strerror(errno)); | fprintf(stderr, "exec of UI failed: %s\n", strerror(errno)); | ||||
_exit(0); | _exit(0); | ||||
return false; | return false; | ||||
@@ -385,13 +385,17 @@ nekoui_instantiate( | |||||
int ret; | int ret; | ||||
int i; | int i; | ||||
char ch; | char ch; | ||||
if (access("/usr/bin/python2", F_OK) != -1) | |||||
argv[0] = "/usr/bin/python2"; | |||||
else if (access("/usr/bin/python2.7", F_OK) != -1) | |||||
argv[0] = "/usr/bin/python2.7"; | |||||
else if (access("/usr/bin/python2.6", F_OK) != -1) | |||||
argv[0] = "/usr/bin/python2.6"; | |||||
char ap2[18], ap26[18], ap27[18]; | |||||
strcpy(ap2, "/usr/bin/python2"); | |||||
strcpy(ap26, "/usr/bin/python2.6"); | |||||
strcpy(ap27, "/usr/bin/python2,7"); | |||||
if (access(ap2, F_OK) != -1) | |||||
argv[0] = ap2; | |||||
else if (access(ap27, F_OK) != -1) | |||||
argv[0] = ap27; | |||||
else if (access(ap26, F_OK) != -1) | |||||
argv[0] = ap26; | |||||
else | else | ||||
goto fail; | goto fail; | ||||
@@ -537,6 +541,7 @@ fail: | |||||
return NULL; | return NULL; | ||||
} | } | ||||
static | |||||
void | void | ||||
nekoui_cleanup( | nekoui_cleanup( | ||||
struct control * control_ptr) | struct control * control_ptr) | ||||
@@ -545,7 +550,9 @@ nekoui_cleanup( | |||||
free(control_ptr); | free(control_ptr); | ||||
} | } | ||||
void nekoui_set_parameter_value( | |||||
static | |||||
void | |||||
nekoui_set_parameter_value( | |||||
struct control * control_ptr, | struct control * control_ptr, | ||||
uint32_t index, | uint32_t index, | ||||
float value) | float value) | ||||