From be487f1cb4bc3632fc0a986753c017f5fb657fe1 Mon Sep 17 00:00:00 2001 From: boyska Date: Fri, 22 Sep 2017 00:40:53 +0200 Subject: [PATCH] gia si ragiona --- filtroam.inc.liq | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 filtroam.inc.liq diff --git a/filtroam.inc.liq b/filtroam.inc.liq new file mode 100644 index 0000000..3866b0b --- /dev/null +++ b/filtroam.inc.liq @@ -0,0 +1,54 @@ +# questo file e' pensato per essere incluso +# definisce alcune variabili (quindi dovete toglierle dal file di conf, ma le potete comunque usare) +# e la funzione filtroAM che include tutte le smanipolazioni varie +# taglio +banda = interactive.float("banda", 4500.) +centrobanda = interactive.float("centrobanda", 2350.) +# compressione +attack = interactive.float("attack", 100.) +gain = interactive.float("gain", -0.1) +knee = interactive.float("knee", 1.) +ratio = 4. +release = interactive.float("release", 50.) +rms_window = 0.1 +threshold = interactive.float("threshold", -10.) +# queste variabili booleane permettono di disabilitare alcuni step in tempo reale +# in questo modo si puo' testare l'effetto che fa ogni componente. +# non e' pero' possibile riordinare i componenti +phaser = interactive.bool("phaser", true) +tagliabanda = interactive.bool("tagliabanda", true) +eq = interactive.bool("eq", true) +vlevel = interactive.bool("vlevel", true) +comp = interactive.bool("comp", true) +bassi = interactive.float("bassi", -3.) + +def ifelse(cond, s1, s2) +switch(track_sensitive=false, [(cond, s1), ({true}, s2)]) +end + +def bandaAM(in) = + # facciamo molti stages per rendere il taglio passabanda piu "netto". Se facciamo meno stages ci troviamo + # con i 5000Hz ad una intensita' paragonabile, cosa non buona in modulazione. + # + # sperimentalmente, dando noise() in pasto a questo filtro si ottiene che la 5000 sta a -6dB rispetto alla + # banda desiderata + ladspa.bandpass_iir(id="passabanda", bandwidth=banda, center_frequency=centrobanda, stages=6, in) +end + +def filtroAM(in) = + a = mean(in) # mono + a = ifelse (tagliabanda, bandaAM(a), a) +# il phaser rimette in fase (la voce, tipicamente) così poi quando la comprimi viene piu' forte + a = ifelse(phaser, ladspa.autophaser(a), a) +# la normalizzazione avviene dopo le operazioni piu' invasive (taglio e phaser) in modo che il volume sia +# normalizzato su qualcosa di simile al volume percepito + a = ifelse( vlevel, ladspa.vlevel_mono(a), a) +# caliamo un po' di bassi + a = ifelse(eq, + ladspa.mbeq(id="eq", _100hz_gain=bassi, _156hz_gain=bassi, _220hz_gain=bassi, a), + a) + ifelse(comp, + compress(id="comprimo", attack=attack, gain=gain, knee=knee, ratio=ratio, release=release, + rms_window=rms_window, threshold=threshold, a), + a) +end