static void sched_pollformeters( void) { int inclip, outclip, indb, outdb; static int sched_nextmeterpolltime, sched_nextpingtime; /* if there's no GUI but we're running in "realtime", here is where we arrange to ping the watchdog every 2 seconds. */ #ifdef __linux__ if (sys_nogui && sys_hipriority && (sched_diddsp - sched_nextpingtime > 0)) { glob_watchdog(0); /* ping every 2 seconds */ sched_nextpingtime = sched_diddsp + 2 * (int)(sys_dacsr /(double)sys_schedblocksize); } #endif if (sched_diored && (sched_diddsp - sched_dioredtime > 0)) { //sys_vgui("pdtk_pd_dio 0\n"); sched_diored = 0; } if (sched_diddsp - sched_nextmeterpolltime < 0) return; if (sched_meterson) { t_sample inmax, outmax; sys_getmeters(&inmax, &outmax); indb = 0.5 + rmstodb(inmax); outdb = 0.5 + rmstodb(outmax); inclip = (inmax > 0.999); outclip = (outmax >= 1.0); } else { indb = outdb = 0; inclip = outclip = 0; } if (inclip != sched_lastinclip || outclip != sched_lastoutclip || indb != sched_lastindb || outdb != sched_lastoutdb) { sys_vgui("pdtk_pd_meters %d %d %d %d\n", indb, outdb, inclip, outclip); sched_lastinclip = inclip; sched_lastoutclip = outclip; sched_lastindb = indb; sched_lastoutdb = outdb; } sched_nextmeterpolltime = sched_diddsp + (int)(sys_dacsr /(double)sys_schedblocksize); }
void MeterComponent::setValue(float rms, float dpk, float dpk_hold) { rms_db = rmstodb(rms); dpk_db = rmstodb(dpk); dpk_hold_db = rmstodb(dpk_hold); // rms_db = iec_scale(rmstodb(rms) - _offset); // dpk_db = iec_scale(rmstodb(dpk) - _offset); // dpk_hold_db = iec_scale(rmstodb(dpk_hold) - _offset); if (rms || dpk) repaint(); }
static void set_uclimit(t_limiter *x) { t_cmpctl *c = x->cmp; t_float limit = x->val1->limit, limitdB = rmstodb(limit), ratio = c->ratio, tresh = c->treshold, treshdB = rmstodb(tresh); c->climit_inverse = limit / tresh; c->uclimit = tresh / dbtorms(treshdB+(limitdB - treshdB)/ratio); c->treshdB = treshdB; c->oneminusratio = 1. - ratio; }
/* verbose */ static void status(t_limiter *x) { t_limctl *v1 = x->val1; t_limctl *v2 = x->val2; t_cmpctl *c = x->cmp; t_float sr = sys_getsr() / 1000.; switch (x->mode) { case LIMIT1: post("%d-channel crack-limiter @ %fkHz\n" "\noutput-limit\t= %fdB\nhold1\t\t= %fms\nrelease1\t= %fms\ncrack-limit\t= %fdB\nhold2\t\t= %fms\nrelease2\t= %fms\n" "\namplify\t\t= %fdB\n", x->number_of_inlets, sr, rmstodb(v1->limit), (v1->hold_samples) / sr, LN2 / (log(v1->change_of_amplification) * sr), rmstodb(v1->limit / v2->limit), (v2->hold_samples) / sr, LN2 / (log(v2->change_of_amplification) * sr), x->amplification); break; case LIMIT0: post("%d-channel limiter @ %fkHz\n" "\noutput-limit\t= %fdB\nhold\t\t= %fms\nrelease\t\t= %fms\n" "\namplify\t\t= %fdB\n", x->number_of_inlets, sr, rmstodb(v1->limit), (v1->hold_samples) / sr, LN2 / (log(v1->change_of_amplification) * sr), rmstodb(x->amplification)); break; case COMPRESS: post("%d-channel compressor @ %fkHz\n" "\noutput-limit\t= %fdB\ntreshold\t= %fdB\ninput-limit\t= %f\nratio\t\t= 1:%f\n" "\nhold\t\t= %fms\nrelease\t\t= %fms\n" "\namplify\t\t= %fdB\n", x->number_of_inlets, sr, rmstodb(c->treshold * c->climit_inverse), rmstodb(c->treshold), rmstodb(c->treshold / c->uclimit), 1./c->ratio, (v1->hold_samples) / sr, LN2 / (log(v1->change_of_amplification) * sr), rmstodb(x->amplification)); } }