filtroam.inc.liq 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. # questo file e' pensato per essere incluso
  2. # definisce alcune variabili (quindi dovete toglierle dal file di conf, ma le potete comunque usare)
  3. # e la funzione filtroAM che include tutte le smanipolazioni varie
  4. # taglio
  5. banda = interactive.float("banda", 4500.)
  6. centrobanda = interactive.float("centrobanda", 2350.)
  7. # compressione
  8. attack = interactive.float("attack", 100.)
  9. gain = interactive.float("gain", -0.1)
  10. knee = interactive.float("knee", 1.)
  11. ratio = 4.
  12. release = interactive.float("release", 50.)
  13. rms_window = 0.1
  14. threshold = interactive.float("threshold", -10.)
  15. # queste variabili booleane permettono di disabilitare alcuni step in tempo reale
  16. # in questo modo si puo' testare l'effetto che fa ogni componente.
  17. # non e' pero' possibile riordinare i componenti
  18. phaser = interactive.bool("phaser", true)
  19. tagliabanda = interactive.bool("tagliabanda", true)
  20. eq = interactive.bool("eq", true)
  21. vlevel = interactive.bool("vlevel", true)
  22. comp = interactive.bool("comp", true)
  23. bassi = interactive.float("bassi", -3.)
  24. def ifelse(cond, s1, s2)
  25. switch(track_sensitive=false, [(cond, s1), ({true}, s2)])
  26. end
  27. def bandaAM(in) =
  28. # facciamo molti stages per rendere il taglio passabanda piu "netto". Se facciamo meno stages ci troviamo
  29. # con i 5000Hz ad una intensita' paragonabile, cosa non buona in modulazione.
  30. #
  31. # sperimentalmente, dando noise() in pasto a questo filtro si ottiene che la 5000 sta a -6dB rispetto alla
  32. # banda desiderata
  33. ladspa.bandpass_iir(id="passabanda", bandwidth=banda, center_frequency=centrobanda, stages=6, in)
  34. end
  35. def filtroAM(in) =
  36. a = mean(in) # mono
  37. a = ifelse (tagliabanda, bandaAM(a), a)
  38. # il phaser rimette in fase (la voce, tipicamente) così poi quando la comprimi viene piu' forte
  39. a = ifelse(phaser, ladspa.autophaser(a), a)
  40. # la normalizzazione avviene dopo le operazioni piu' invasive (taglio e phaser) in modo che il volume sia
  41. # normalizzato su qualcosa di simile al volume percepito
  42. a = ifelse( vlevel, ladspa.vlevel_mono(a), a)
  43. # caliamo un po' di bassi
  44. a = ifelse(eq,
  45. ladspa.mbeq(id="eq", _100hz_gain=bassi, _156hz_gain=bassi, _220hz_gain=bassi, a),
  46. a)
  47. ifelse(comp,
  48. compress(id="comprimo", attack=attack, gain=gain, knee=knee, ratio=ratio, release=release,
  49. rms_window=rms_window, threshold=threshold, a),
  50. a)
  51. end