Exemplo n.º 1
0
static void activateVynil(LV2_Handle instance)
{
  Vynil *plugin_data = (Vynil *)instance;
  float fs __attribute__ ((unused)) = plugin_data->fs;
  float * buffer_m __attribute__ ((unused)) = plugin_data->buffer_m;
  float * buffer_s __attribute__ ((unused)) = plugin_data->buffer_s;
  unsigned int buffer_mask __attribute__ ((unused)) = plugin_data->buffer_mask;
  unsigned int buffer_pos __attribute__ ((unused)) = plugin_data->buffer_pos;
  float * click_buffer __attribute__ ((unused)) = plugin_data->click_buffer;
  fixp16 click_buffer_pos __attribute__ ((unused)) = plugin_data->click_buffer_pos;
  fixp16 click_buffer_omega __attribute__ ((unused)) = plugin_data->click_buffer_omega;
  float click_gain __attribute__ ((unused)) = plugin_data->click_gain;
  float phi __attribute__ ((unused)) = plugin_data->phi;
  unsigned int sample_cnt __attribute__ ((unused)) = plugin_data->sample_cnt;
  float def __attribute__ ((unused)) = plugin_data->def;
  float def_target __attribute__ ((unused)) = plugin_data->def_target;
  biquad * lowp_m __attribute__ ((unused)) = plugin_data->lowp_m;
  biquad * lowp_s __attribute__ ((unused)) = plugin_data->lowp_s;
  biquad * noise_filt __attribute__ ((unused)) = plugin_data->noise_filt;
  biquad * highp __attribute__ ((unused)) = plugin_data->highp;
  
      memset(buffer_m, 0, sizeof(float) * (buffer_mask + 1));
      memset(buffer_s, 0, sizeof(float) * (buffer_mask + 1));
      plugin_data->buffer_pos = 0;
      plugin_data->click_buffer_pos.all = 0;
      plugin_data->click_buffer_omega.all = 0;
      plugin_data->click_gain = 0;
      plugin_data->phi = 0.0f;

      lp_set_params(lowp_m, 16000.0, 0.5, fs);
      lp_set_params(lowp_s, 16000.0, 0.5, fs);
      lp_set_params(highp, 10.0, 0.5, fs);
      lp_set_params(noise_filt, 1000.0, 0.5, fs);
    
}
Exemplo n.º 2
0
static void activateVynil(LADSPA_Handle instance) {
	Vynil *plugin_data = (Vynil *)instance;
	LADSPA_Data *buffer_m = plugin_data->buffer_m;
	unsigned int buffer_mask = plugin_data->buffer_mask;
	unsigned int buffer_pos = plugin_data->buffer_pos;
	LADSPA_Data *buffer_s = plugin_data->buffer_s;
	LADSPA_Data *click_buffer = plugin_data->click_buffer;
	fixp16 click_buffer_omega = plugin_data->click_buffer_omega;
	fixp16 click_buffer_pos = plugin_data->click_buffer_pos;
	float click_gain = plugin_data->click_gain;
	float def = plugin_data->def;
	float def_target = plugin_data->def_target;
	float fs = plugin_data->fs;
	biquad *highp = plugin_data->highp;
	biquad *lowp_m = plugin_data->lowp_m;
	biquad *lowp_s = plugin_data->lowp_s;
	biquad *noise_filt = plugin_data->noise_filt;
	float phi = plugin_data->phi;
	unsigned int sample_cnt = plugin_data->sample_cnt;
#line 75 "vynil_1905.xml"
	memset(buffer_m, 0, sizeof(LADSPA_Data) * (buffer_mask + 1));
	memset(buffer_s, 0, sizeof(LADSPA_Data) * (buffer_mask + 1));
	buffer_pos = 0;
	click_buffer_pos.all = 0;
	click_buffer_omega.all = 0;
	click_gain = 0;
	phi = 0.0f;

	lp_set_params(lowp_m, 16000.0, 0.5, fs);
	lp_set_params(lowp_s, 16000.0, 0.5, fs);
	lp_set_params(highp, 10.0, 0.5, fs);
	lp_set_params(noise_filt, 1000.0, 0.5, fs);
	plugin_data->buffer_m = buffer_m;
	plugin_data->buffer_mask = buffer_mask;
	plugin_data->buffer_pos = buffer_pos;
	plugin_data->buffer_s = buffer_s;
	plugin_data->click_buffer = click_buffer;
	plugin_data->click_buffer_omega = click_buffer_omega;
	plugin_data->click_buffer_pos = click_buffer_pos;
	plugin_data->click_gain = click_gain;
	plugin_data->def = def;
	plugin_data->def_target = def_target;
	plugin_data->fs = fs;
	plugin_data->highp = highp;
	plugin_data->lowp_m = lowp_m;
	plugin_data->lowp_s = lowp_s;
	plugin_data->noise_filt = noise_filt;
	plugin_data->phi = phi;
	plugin_data->sample_cnt = sample_cnt;

}
static void runPointerCastDistortion(LADSPA_Handle instance, unsigned long sample_count) {
	PointerCastDistortion *plugin_data = (PointerCastDistortion *)instance;

	/* Effect cutoff freq (Hz) (float value) */
	const LADSPA_Data cutoff = *(plugin_data->cutoff);

	/* Dry/wet mix (float value) */
	const LADSPA_Data wet = *(plugin_data->wet);

	/* Input (array of floats of length sample_count) */
	const LADSPA_Data * const input = plugin_data->input;

	/* Output (array of floats of length sample_count) */
	LADSPA_Data * const output = plugin_data->output;
	biquad * filt = plugin_data->filt;
	float fs = plugin_data->fs;

#line 40 "pointer_cast_1910.xml"
	unsigned long pos;
	const float filt_scale = cutoff < 50.0f ? cutoff / 50.0f : 1.0f;

	lp_set_params(filt, cutoff, 1.0f, fs);

	for (pos = 0; pos < sample_count; pos++) {
	  pcast val;
	  float sign, filt_val, dist_val;

	  filt_val = biquad_run(filt, input[pos]) * filt_scale;
	  sign = filt_val < 0.0f ? -1.0f : 1.0f;
	  val.fp = fabs(filt_val);
	  dist_val = sign * (LADSPA_Data)val.in / (LADSPA_Data)INT_MAX +
	             (input[pos] - filt_val);
	  buffer_write(output[pos], LIN_INTERP(wet, input[pos], dist_val));
	}
}
Exemplo n.º 4
0
static void runVynil(LADSPA_Handle instance, unsigned long sample_count) {
	Vynil *plugin_data = (Vynil *)instance;

	/* Year (float value) */
	const LADSPA_Data year = *(plugin_data->year);

	/* RPM (float value) */
	const LADSPA_Data rpm = *(plugin_data->rpm);

	/* Surface warping (float value) */
	const LADSPA_Data warp = *(plugin_data->warp);

	/* Crackle (float value) */
	const LADSPA_Data click = *(plugin_data->click);

	/* Wear (float value) */
	const LADSPA_Data wear = *(plugin_data->wear);

	/* Input L (array of floats of length sample_count) */
	const LADSPA_Data * const in_l = plugin_data->in_l;

	/* Input R (array of floats of length sample_count) */
	const LADSPA_Data * const in_r = plugin_data->in_r;

	/* Output L (array of floats of length sample_count) */
	LADSPA_Data * const out_l = plugin_data->out_l;

	/* Output R (array of floats of length sample_count) */
	LADSPA_Data * const out_r = plugin_data->out_r;
	LADSPA_Data * buffer_m = plugin_data->buffer_m;
	unsigned int buffer_mask = plugin_data->buffer_mask;
	unsigned int buffer_pos = plugin_data->buffer_pos;
	LADSPA_Data * buffer_s = plugin_data->buffer_s;
	LADSPA_Data * click_buffer = plugin_data->click_buffer;
	fixp16 click_buffer_omega = plugin_data->click_buffer_omega;
	fixp16 click_buffer_pos = plugin_data->click_buffer_pos;
	float click_gain = plugin_data->click_gain;
	float def = plugin_data->def;
	float def_target = plugin_data->def_target;
	float fs = plugin_data->fs;
	biquad * highp = plugin_data->highp;
	biquad * lowp_m = plugin_data->lowp_m;
	biquad * lowp_s = plugin_data->lowp_s;
	biquad * noise_filt = plugin_data->noise_filt;
	float phi = plugin_data->phi;
	unsigned int sample_cnt = plugin_data->sample_cnt;

#line 90 "vynil_1905.xml"
	unsigned long pos;
	float deflec = def;
	float deflec_target = def_target;
	float src_m, src_s;

	/* angular velocity of platter * 16 */
	const float omega = 960.0f / (rpm * fs);
	const float age = (2000 - year) * 0.01f;
	const unsigned int click_prob = (age*age*(float)RAND_MAX)/10 + click * 0.02 * RAND_MAX;
	const float noise_amp = (click + wear * 0.3f) * 0.12f + (1993.0f - year) * 0.0031f;
	const float bandwidth = (year - 1880.0f) * (rpm * 1.9f);
	const float noise_bandwidth = bandwidth * (0.25 - wear * 0.02) + click * 200.0 + 300.0;
	const float stereo = f_clamp((year - 1940.0f) * 0.02f, 0.0f, 1.0f);
	const float wrap_gain = age * 3.1f + 0.05f;
	const float wrap_bias = age * 0.1f;

	lp_set_params(lowp_m, bandwidth * (1.0 - wear * 0.86), 2.0, fs);
	lp_set_params(lowp_s, bandwidth * (1.0 - wear * 0.89), 2.0, fs);
	hp_set_params(highp, (2000-year) * 8.0, 1.5, fs);
	lp_set_params(noise_filt, noise_bandwidth, 4.0 + wear * 2.0, fs);

	for (pos = 0; pos < sample_count; pos++) {
	  unsigned int o1, o2;
	  float ofs;

	  if ((sample_cnt & 15) == 0) {
	    const float ang = phi * 2.0f * M_PI;
	    const float w = warp * (2000.0f - year) * 0.01f;
	    deflec_target = w*df(ang)*0.5f + w*w*df(2.0f*ang)*0.31f +
	                       w*w*w*df(3.0f*ang)*0.129f;
	    phi += omega;
	    while (phi > 1.0f) {
	      phi -= 1.0f;
	    }
	    if ((unsigned int)rand() < click_prob) {
	      click_buffer_omega.all = ((rand() >> 6) + 1000) * rpm;
	      click_gain = noise_amp * 5.0f * noise();
	    }
	  }
	  deflec = deflec * 0.1f + deflec_target * 0.9f;

	  /* matrix into mid_side representation (this is roughly what stereo
	   * LPs do) */
	  buffer_m[buffer_pos] = in_l[pos] + in_r[pos];
	  buffer_s[buffer_pos] = in_l[pos] - in_r[pos];

	  /* cacluate the effects of the surface warping */
	  ofs = fs * 0.009f * deflec;
	  o1 = f_round(floorf(ofs));
	  o2 = f_round(ceilf(ofs));
	  ofs -= o1;
	  src_m = LIN_INTERP(ofs, buffer_m[(buffer_pos - o1 - 1) & buffer_mask], buffer_m[(buffer_pos - o2 - 1) & buffer_mask]);
	  src_s = LIN_INTERP(ofs, buffer_s[(buffer_pos - o1 - 1) & buffer_mask], buffer_s[(buffer_pos - o2 - 1) & buffer_mask]);

	  src_m = biquad_run(lowp_m, src_m + click_buffer[click_buffer_pos.part.in & (CLICK_BUF_SIZE - 1)] * click_gain);

	  /* waveshaper */
	  src_m = LIN_INTERP(age, src_m, sinf(src_m * wrap_gain + wrap_bias));

	  /* output highpass */
	  src_m = biquad_run(highp, src_m) + biquad_run(noise_filt, noise()) * noise_amp + click_buffer[click_buffer_pos.part.in & (CLICK_BUF_SIZE - 1)] * click_gain * 0.5f;

	  /* stereo seperation filter */
	  src_s = biquad_run(lowp_s, src_s) * stereo;

	  buffer_write(out_l[pos], (src_s + src_m) * 0.5f);
	  buffer_write(out_r[pos], (src_m - src_s) * 0.5f);

	  /* roll buffer indexes */
	  buffer_pos = (buffer_pos + 1) & buffer_mask;
	  click_buffer_pos.all += click_buffer_omega.all;
	  if (click_buffer_pos.part.in >= CLICK_BUF_SIZE) {
	    click_buffer_pos.all = 0;
	    click_buffer_omega.all = 0;
	  }
	  sample_cnt++;
	}
Exemplo n.º 5
0
void 
run_adding_DeEsser(LADSPA_Handle Instance,
		   unsigned long SampleCount) {
  
	DeEsser * ptr = (DeEsser *)Instance;

	LADSPA_Data * input = ptr->input;
	LADSPA_Data * output = ptr->output;
	LADSPA_Data threshold = LIMIT(*(ptr->threshold),-50.0f,10.0f);
	LADSPA_Data freq = LIMIT(*(ptr->freq),2000.0f,16000.0f);
	LADSPA_Data sidechain = LIMIT(*(ptr->sidechain),0.0f,1.0f);
	LADSPA_Data monitor = LIMIT(*(ptr->monitor),0.0f,1.0f);
	unsigned long sample_index;

	LADSPA_Data in = 0;
	LADSPA_Data out = 0;
	LADSPA_Data sidech = 0;
	LADSPA_Data ampl_db = 0.0f;
	LADSPA_Data attn = 0.0f;
	LADSPA_Data max_attn = 0.0f;


	if (ptr->old_freq != freq) {
		lp_set_params(&ptr->sidech_lo_filter, freq, SIDECH_BW, ptr->sample_rate);
		hp_set_params(&ptr->sidech_hi_filter, freq, SIDECH_BW, ptr->sample_rate);
		ptr->old_freq = freq;
	}

	for (sample_index = 0; sample_index < SampleCount; sample_index++) {

		in = *(input++);

		/* process sidechain filters */
		sidech = biquad_run(&ptr->sidech_hi_filter, in);
		if (sidechain > 0.1f)
			sidech = biquad_run(&ptr->sidech_lo_filter, sidech);

		ampl_db = 20.0f * log10f(sidech);
		if (ampl_db <= threshold)
			attn = 0.0f;
		else
			attn = -0.5f * (ampl_db - threshold);

		ptr->sum += attn;
		ptr->sum -= push_buffer(attn, ptr->ringbuffer, ptr->buflen, &ptr->pos);

		if (-1.0f * ptr->sum > max_attn)
			max_attn = -0.01f * ptr->sum;

		in *= db2lin(ptr->sum / 100.0f);


		/* output selector */
		if (monitor > 0.1f)
			out = sidech;
		else
			out = in;

		*(output++) += ptr->run_adding_gain * out;
		*(ptr->attenuat) = LIMIT(max_attn,0,10);
	}
}
Exemplo n.º 6
0
/* load plugin data from reverb_data[] into an instance */
void
load_plugin_data(LADSPA_Handle Instance) {

	Reverb * ptr = (Reverb *)Instance;
	unsigned long m;
	unsigned int i;


	m = LIMIT(*(ptr->mode),0,NUM_MODES-1);

	/* load combs data */
	ptr->num_combs = 2 * reverb_data[m].num_combs;
	for (i = 0; i < reverb_data[m].num_combs; i++) {
		((COMB_FILTER *)(ptr->combs + 2*i))->buflen = 
			reverb_data[m].combs[i].delay * ptr->sample_rate;
		((COMB_FILTER *)(ptr->combs + 2*i))->feedback = 
			reverb_data[m].combs[i].feedback;
		((COMB_FILTER *)(ptr->combs + 2*i))->freq_resp =
			LIMIT(reverb_data[m].combs[i].freq_resp
			      * powf(ptr->sample_rate / 44100.0f, 0.8f),
			      0.0f, 1.0f);

		((COMB_FILTER *)(ptr->combs + 2*i+1))->buflen =
			((COMB_FILTER *)(ptr->combs + 2*i))->buflen;
		((COMB_FILTER *)(ptr->combs + 2*i+1))->feedback = 
			((COMB_FILTER *)(ptr->combs + 2*i))->feedback;
		((COMB_FILTER *)(ptr->combs + 2*i+1))->feedback = 
			((COMB_FILTER *)(ptr->combs + 2*i))->freq_resp;

		/* set initial values: */
		*(((COMB_FILTER *)(ptr->combs + 2*i))->buffer_pos) = 0;
		*(((COMB_FILTER *)(ptr->combs + 2*i+1))->buffer_pos) = 0;
		((COMB_FILTER *)(ptr->combs + 2*i))->last_out = 0;
		((COMB_FILTER *)(ptr->combs + 2*i+1))->last_out = 0;

		lp_set_params(((COMB_FILTER *)(ptr->combs + 2*i))->filter,
			      2000.0f + 13000.0f * (1 - reverb_data[m].combs[i].freq_resp)
			      * ptr->sample_rate / 44100.0f,
			      BANDPASS_BWIDTH, ptr->sample_rate);
		lp_set_params(((COMB_FILTER *)(ptr->combs + 2*i+1))->filter,
			      2000.0f + 13000.0f * (1 - reverb_data[m].combs[i].freq_resp)
			      * ptr->sample_rate / 44100.0f,
			      BANDPASS_BWIDTH, ptr->sample_rate);
	}

	/* load allps data */
	ptr->num_allps = 2 * reverb_data[m].num_allps;
	for (i = 0; i < reverb_data[m].num_allps; i++) {
		((ALLP_FILTER *)(ptr->allps + 2*i))->buflen = 
			reverb_data[m].allps[i].delay * ptr->sample_rate;
		((ALLP_FILTER *)(ptr->allps + 2*i))->feedback = 
			reverb_data[m].allps[i].feedback;

		((ALLP_FILTER *)(ptr->allps + 2*i+1))->buflen = 
			((ALLP_FILTER *)(ptr->allps + 2*i))->buflen;
		((ALLP_FILTER *)(ptr->allps + 2*i+1))->feedback = 
			((ALLP_FILTER *)(ptr->allps + 2*i))->feedback;

		/* set initial values: */
		*(((ALLP_FILTER *)(ptr->allps + 2*i))->buffer_pos) = 0;
		*(((ALLP_FILTER *)(ptr->allps + 2*i+1))->buffer_pos) = 0;
		((ALLP_FILTER *)(ptr->allps + 2*i))->last_out = 0;
		((ALLP_FILTER *)(ptr->allps + 2*i+1))->last_out = 0;
	}

	/* init bandpass filters */
	lp_set_params((biquad *)(ptr->low_pass), reverb_data[m].bandpass_high,
		      BANDPASS_BWIDTH, ptr->sample_rate);
	hp_set_params((biquad *)(ptr->high_pass), reverb_data[m].bandpass_low,
		      BANDPASS_BWIDTH, ptr->sample_rate);
	lp_set_params((biquad *)(ptr->low_pass + 1), reverb_data[m].bandpass_high,
		      BANDPASS_BWIDTH, ptr->sample_rate);
	hp_set_params((biquad *)(ptr->high_pass + 1), reverb_data[m].bandpass_low,
		      BANDPASS_BWIDTH, ptr->sample_rate);
}