コード例 #1
0
void irextract_mls (t_irextract *x, t_symbol *sym, long argc, t_atom *argv)
{
	double sample_rate;
	double out_length = 0;
	
	t_atom_long num_channels = 1;
	t_atom_long order = 18;
	
	t_symbol *rec_buffer = 0;

	// Load parameters

	if (argc > 0)
	{
		rec_buffer = atom_getsym(argv++);
		sample_rate = buffer_sample_rate(rec_buffer);
	}
	if (argc > 1)
		order = atom_getlong(argv++);
	if (argc > 2)
		num_channels = atom_getlong(argv++);
	if (argc > 3)
		out_length = atom_getfloat(argv++);
	
	// Check parameters
	
	if (!rec_buffer)
	{
		object_error((t_object *)x, "no buffer given");
		return;
	}
	
	order = (t_atom_long) irextract_param_check(x, "order", (double) order, 1, 24);
	num_channels = (t_atom_long) irextract_param_check(x, "number of channels", (double) num_channels, 1, HIRT_MAX_MEASURE_CHANS);
	x->out_length = irextract_param_check(x, "output length", out_length, 0., HUGE_VAL) / 1000.;

	// Process
	
	x->measure_mode = MLS;
	mls_params(&x->max_length_params, (long) order, db_to_a(x->amp));
	irextract_process(x, rec_buffer, num_channels, sample_rate);
}
コード例 #2
0
void irmeasure_sweep(t_irmeasure *x, t_symbol *sym, long argc, t_atom *argv)
{
    t_ess sweep_params;

    double f1 = 20.0;
    double f2 = sys_getsr() / 2.0;
    double length = 30000.0;
    double fade_in = 50.0;
    double fade_out = 10.0;
    double out_length = 5000.0;

    long num_active_ins = x->num_active_ins;
    long num_active_outs = x->num_active_outs;

    AH_SIntPtr mem_size;

    // Load parameters

    if (argc > 0)
        f1 = atom_getfloat(argv++);
    if (argc > 1)
        f2 = atom_getfloat(argv++);
    if (argc > 2)
        length = atom_getfloat(argv++);
    if (argc > 3)
        fade_in = atom_getfloat(argv++);
    if (argc > 4)
        fade_out = atom_getfloat(argv++);
    if (argc > 5)
        out_length = atom_getfloat(argv++);

    // Check parameters

    f1 = irmeasure_param_check(x, "low frequency", f1, 0.0001, x->sample_rate / 2.0);
    f2 = irmeasure_param_check(x, "high frequency", f2, f2, x->sample_rate / 2.0);
    length = irmeasure_param_check(x, "length", length, 0.0, HUGE_VAL);
    fade_in = irmeasure_param_check(x, "fade in time", fade_in, 0.0, length / 2.0);
    fade_out = irmeasure_param_check(x, "fade out time", fade_out, 0.0, length / 2.0);
    out_length = irmeasure_param_check(x, "ir length", out_length, 0.0, HUGE_VAL);

    // Store parameters

    x->lo_f = f1;
    x->hi_f = f2;
    x->fade_in = fade_in / 1000.0;
    x->fade_out = fade_out / 1000.0;
    x->length = length / 1000.0;
    x->out_length = out_length / 1000.0;

    // Check length of sweep and memory allocation

    if (ess_params(&sweep_params, x->lo_f, x->hi_f, x->fade_in, x->fade_out, x->length, x->sample_rate, db_to_a(x->amp), 0))
    {
        mem_size = num_active_ins * irmeasure_calc_sweep_mem_size(&sweep_params, num_active_outs, x->out_length, x->sample_rate);
        if (!schedule_grow_mem_swap(&x->rec_mem, mem_size, mem_size))
            object_error((t_object *) x, "not able to allocate adequate memory for recording");

        // Get amplitude curve

        fill_amp_curve_specifier(x->amp_curve, x->amp_curve_specifier, x->amp_curve_num_specifiers);

        // Start measurement

        x->current_num_active_ins = num_active_ins;
        x->current_num_active_outs = num_active_outs;

        x->measure_mode = SWEEP;
        x->fft_size = 0;
        x->test_tone = 0;
        x->stop_measurement = 0;
        x->start_measurement = 1;
    }
    else
    {
        object_error((t_object *) x, "zero length sweep - requested length value is too small");
        x->stop_measurement = 1;
    }
}
コード例 #3
0
void irextract_noise (t_irextract *x, t_symbol *sym, long argc, t_atom *argv)
{
	double length = 10000;
	double fade_in = 10;
	double fade_out = 10;
	double amp_comp = 1.;
	double out_length = 0;
	double max_pink, max_brown;
	double sample_rate;
	
	t_atom_long num_channels = 1;

	t_symbol *rec_buffer = 0;
	
	t_noise_mode noise_mode = NOISE_MODE_WHITE;
	
	if (sym == gensym("brown"))
		noise_mode = NOISE_MODE_BROWN;
	if (sym == gensym("pink"))
		noise_mode = NOISE_MODE_PINK;
		
	// Load parameters
	
	if (argc > 0)
	{
		rec_buffer = atom_getsym(argv++);
		sample_rate = buffer_sample_rate(rec_buffer);
	}
	if (argc > 1)
		length = atom_getfloat(argv++);
	if (argc > 2)
		fade_in = atom_getfloat(argv++);
	if (argc > 3)
		fade_out = atom_getfloat(argv++);
	if (argc > 4)
		num_channels = atom_getlong(argv++);
	if (argc > 5)
		out_length = atom_getfloat(argv++);
	
	// Check parameters
	
	if (!rec_buffer)
	{
		object_error((t_object *)x, "no buffer given");
		return;
	}
	
	length = irextract_param_check(x, "length", length, 0., HUGE_VAL);
	fade_in = irextract_param_check(x, "fade in time", fade_in, 0., length / 2);
	fade_out = irextract_param_check(x, "fade out time", fade_out, 0., length / 2);
	num_channels = (t_atom_long) irextract_param_check(x, "number of channels", (double) num_channels, 1, HIRT_MAX_MEASURE_CHANS);
	x->out_length = irextract_param_check(x, "output length", out_length, 0., HUGE_VAL) / 1000.;

	// Process

	x->measure_mode = NOISE;
	coloured_noise_params(&x->noise_params, noise_mode, fade_in / 1000., fade_out / 1000., length / 1000., sample_rate, db_to_a(x->amp) / amp_comp);
	
	if (noise_mode != NOISE_MODE_WHITE)
	{
		coloured_noise_measure(&x->noise_params, (int) (length * sample_rate * 1000.), &max_pink, &max_brown);
		coloured_noise_reset(&x->noise_params);
	}
	if (noise_mode == NOISE_MODE_BROWN)
		amp_comp = max_brown;
	if (noise_mode == NOISE_MODE_PINK)
		amp_comp = max_pink;

	irextract_process(x, rec_buffer, num_channels, sample_rate);
}
コード例 #4
0
void irextract_sweep (t_irextract *x, t_symbol *sym, long argc, t_atom *argv)
{			
	double f1 = 20;
	double f2 = 22050;
	double length = 30000;
	double fade_in = 50;
	double fade_out = 10;
	double out_length = 0;
	double sample_rate;
	
	double amp_curve[33];
	
	t_atom_long num_channels = 1;
	
	t_symbol *rec_buffer = 0;
	
	// Load parameters

	if (argc > 0)
	{
		rec_buffer = atom_getsym(argv++);
		sample_rate = buffer_sample_rate(rec_buffer);
		f2 = sample_rate / 2.;
	}
	if (argc > 1)
		f1 = atom_getfloat(argv++);
	if (argc > 2)
		f2 = atom_getfloat(argv++);
	if (argc > 3)
		length = atom_getfloat(argv++);
	if (argc > 4)
		fade_in = atom_getfloat(argv++);
	if (argc > 5)
		fade_out = atom_getfloat(argv++);
	if (argc > 6)
		num_channels = atom_getlong(argv++);
	if (argc > 7)
		out_length = atom_getfloat(argv++);
	
	// Check parameters
		
	if (!rec_buffer)
	{
		object_error((t_object *)x, "no buffer given");
		return;
	}
	
	f1 = irextract_param_check(x, "low frequency", f1, 0.0001, sample_rate / 2);
	f2 = irextract_param_check(x, "high frequency", f2, f2, sample_rate / 2);
	length = irextract_param_check(x, "length", length, 0., HUGE_VAL);
	fade_in = irextract_param_check(x, "fade in time", fade_in, 0., length / 2);
	fade_out = irextract_param_check(x, "fade out time", fade_out, 0., length / 2);
	num_channels = (t_atom_long) irextract_param_check(x, "number of channels", (double) num_channels, 1, HIRT_MAX_MEASURE_CHANS);
	x->out_length = irextract_param_check(x, "output length", out_length, 0., HUGE_VAL) / 1000.;
	
	// Check length of sweep and memory allocation
	
	fill_amp_curve_specifier(amp_curve, x->amp_curve_specifier, x->amp_curve_num_specifiers);
	
	if (ess_params(&x->sweep_params, f1, f2, fade_in / 1000., fade_out / 1000., length / 1000., sample_rate, db_to_a(x->amp), amp_curve))
	{
		// Process
		
		x->measure_mode = SWEEP;
		irextract_process(x, rec_buffer, num_channels, sample_rate);
	}
	else 
		object_error((t_object *) x, "zero length sweep - requested length value is too small");		
}