Browse Source

Get length for audio file; misc stuff

Signed-off-by: falkTX <falktx@falktx.com>
main
falkTX 4 years ago
parent
commit
fec374a0d2
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
1 changed files with 44 additions and 4 deletions
  1. +44
    -4
      src/kuriborosu.c

+ 44
- 4
src/kuriborosu.c View File

@@ -13,6 +13,7 @@ typedef struct {
uint32_t buffer_size;
double sample_rate;
NativeTimeInfo time;
bool plugin_needs_idle;
} Koriborosu;

#define koriborosu ((Koriborosu*)handle)
@@ -73,11 +74,31 @@ static const char* ui_save_file(NativeHostHandle handle, bool isDir, const char*
static intptr_t dispatcher(NativeHostHandle handle,
NativeHostDispatcherOpcode opcode, int32_t index, intptr_t value, void* ptr, float opt)
{
switch (opcode)
{
case NATIVE_HOST_OPCODE_REQUEST_IDLE:
koriborosu->plugin_needs_idle = true;
return 1;
default:
break;
}

return 0;
}

#undef koriborosu

static double get_file_length_from_plugin(const CarlaHostHandle handle)
{
if (strcmp(carla_get_real_plugin_name(handle, 0), "Audio File") == 0)
return carla_get_current_parameter_value(handle, 0, 5 /* kParameterInfoLength */);

// TODO read from midi plugin

// default value
return 60.0;
}

int main(int argc, char* argv[])
{
// TODO use more advanced opts
@@ -163,8 +184,7 @@ int main(int argc, char* argv[])
goto deactivate;
}

// TODO read from audio/midi plugin
uint32_t file_frames = 100 * opts_sample_rate;
uint32_t file_frames;

// Check if input file argument is actually seconds
// FIXME some isalpha() check??
@@ -188,8 +208,13 @@ int main(int argc, char* argv[])
goto deactivate;
}

// TODO read from audio/midi plugin
file_frames = 100 * opts_sample_rate;
#if 0
// TESTING reduce overall volume of audio file to prevent clipping
if (strcmp(carla_get_real_plugin_name(hhandle, 0), "Audio File") == 0)
carla_set_volume(hhandle, 0, 0.5f);
#endif

file_frames = (uint32_t)(get_file_length_from_plugin(hhandle) * opts_sample_rate + 0.5);
}

for (int i = 3; i < argc; ++i)
@@ -208,11 +233,19 @@ int main(int argc, char* argv[])
};
SNDFILE* const file = sf_open(outwav, SFM_WRITE, &sf_fmt);

// TODO check file NULL or error

// Turn on clipping and normalization of floats (-1.0 - 1.0)
sf_command(file, SFC_SET_CLIPPING, NULL, SF_TRUE);
sf_command(file, SFC_SET_NORM_FLOAT, NULL, SF_TRUE);

float* bufN = calloc(1, sizeof(float)*opts_buffer_size);
float* bufL = malloc(sizeof(float)*opts_buffer_size);
float* bufR = malloc(sizeof(float)*opts_buffer_size);
float* bufI = malloc(sizeof(float)*opts_buffer_size*2);

// TODO check memory fail

float* inbuf[2] = { bufN, bufN };
float* outbuf[2] = { bufL, bufR };

@@ -231,6 +264,12 @@ int main(int argc, char* argv[])
}

sf_writef_float(file, bufI, opts_buffer_size);

if (kori.plugin_needs_idle)
{
kori.plugin_needs_idle = false;
pdesc->dispatcher(phandle, NATIVE_PLUGIN_OPCODE_IDLE, 0, 0, NULL, 0.0f);
}
}

ret = EXIT_SUCCESS;
@@ -238,6 +277,7 @@ int main(int argc, char* argv[])
free(bufN);
free(bufL);
free(bufR);
free(bufI);
sf_close(file);

deactivate:


Loading…
Cancel
Save