struct sound_params *sg_create_sound_params(int type, void *params) { if( !sound_params_mem ) sound_params_mem = mp_create(sizeof(struct sound_params), 2); struct sound_params * sc = mp_alloc(sound_params_mem); sg_set_params(sc, type, params); return sc; }
struct sine_parameters *sg_create_sine_parameters(float frequency, float sample_rate) { if( !sine_parameter_mp ) sine_parameter_mp = mp_create(sizeof(struct sine_parameters), 16); struct sine_parameters *p = mp_alloc(sine_parameter_mp); p->frequency = frequency; p->ticks_per_rev = sample_rate/frequency; p->rev = (sample_rate/frequency) / (2*PI); p->counter = 0; p->sample_rate = sample_rate; p->current_value = 0; return p; }
struct triangle_parameters *sg_create_triangle_parameters(float frequency, float sample_rate) { if( !triangle_parameter_mp ) triangle_parameter_mp = mp_create(sizeof(struct triangle_parameters), 16); struct triangle_parameters *p = mp_alloc(triangle_parameter_mp); p->frequency = frequency; p->ticks_per_rev = sample_rate/frequency; p->counter = 0; p->sample_rate = sample_rate; p->current_value = 0; p->slope = 1 / (p->ticks_per_rev/4.0); return p; }
struct sawtooth_parameters *sg_create_sawtooth_parameters(float frequency, float sample_rate) { if( !sawtooth_parameter_mp ) sawtooth_parameter_mp = mp_create(sizeof(struct sawtooth_parameters), 16); struct sawtooth_parameters *p = mp_alloc(sawtooth_parameter_mp); p->frequency = frequency; p->ticks_per_rev = sample_rate/frequency; p->counter = 0; p->sample_rate = sample_rate; p->current_value = -1; p->slope = 2.0 / p->ticks_per_rev; return p; }
struct square_wave_parameters *sg_create_square_wave_parameters(float frequency, float duty_cycle, float sample_rate) { if( !square_wave_parameter_mem ) square_wave_parameter_mem = mp_create(sizeof(struct square_wave_parameters), 16); struct square_wave_parameters *p = mp_alloc(square_wave_parameter_mem); p->frequency = frequency; p->ticks_per_rev = sample_rate/frequency; p->counter = 0; p->sample_rate = sample_rate; p->current_value = 0; p->duty_cycle = duty_cycle; return p; }
static void enable_test_thread(int on) { if(!generator_tid == !on) return; if(on) { assert(gen_mp == NULL); gen_mp = mp_create("testsignal", MP_PRIMABLE); hts_thread_create_joinable("audiotest", &generator_tid, test_generator_thread, gen_mp, THREAD_PRIO_DEMUXER); } else { event_t *e = event_create_type(EVENT_EXIT); mp_enqueue_event(gen_mp, e); event_release(e); hts_thread_join(&generator_tid); mp_shutdown(gen_mp); mp_ref_dec(gen_mp); gen_mp = NULL; generator_tid = 0; } }