[SCM] calf/master: Sidechain compressor bugs/settings, 3 equalizer
js at users.alioth.debian.org
js at users.alioth.debian.org
Tue May 7 15:39:41 UTC 2013
The following commit has been merged in the master branch:
commit 01394402b85907ce3598847823f48064a8810ca5
Author: Markus Schmidt <schmidt at boomshop.net>
Date: Tue Oct 27 06:29:27 2009 +0100
Sidechain compressor bugs/settings, 3 equalizer
diff --git a/gui/gui-equalizer12band.xml b/gui/gui-equalizer12band.xml
new file mode 100644
index 0000000..7ac8380
--- /dev/null
+++ b/gui/gui-equalizer12band.xml
@@ -0,0 +1,271 @@
+<table rows="2" cols="3">
+ <vbox attach-x="0" attach-y="0">
+ <frame label="Input">
+ <vbox spacing="5">
+ <table rows="2" cols="3">
+ <label param="meter_inL" attach-x="0" attach-y="0" fill-x="0" expand-x="0" fill-y="0" expand-y="0"/>
+ <vumeter param="meter_inL" hold="1.5" falloff="2.5" attach-x="1" attach-y="0" fill-x="1" expand-x="1" fill-y="0" expand-y="0"/>
+ <led param="clip_inL" attach-x="2" attach-y="0" fill-x="0" expand-x="0" fill-y="0" expand-y="0" />
+
+ <label param="meter_inR" attach-x="0" attach-y="1" fill-x="0" expand-x="0" fill-y="0" expand-y="0"/>
+ <vumeter param="meter_inR" hold="1.5" falloff="2.5" attach-x="1" attach-y="1" fill-x="1" expand-x="1" fill-y="0" expand-y="0"/>
+ <led param="clip_inR" attach-x="2" attach-y="1" fill-x="0" expand-x="0" fill-y="0" expand-y="0"/>
+ </table>
+ <hbox>
+ <vbox>
+ <label />
+ <toggle param="bypass" size="2" />
+ <label param="bypass" />
+ </vbox>
+ <vbox>
+ <knob param="level_in" size="3" />
+ <value param="level_in" />
+ </vbox>
+ </hbox>
+ </vbox>
+ </frame>
+ <frame label="Highpass">
+ <table cols="2" rows="2">
+ <vbox attach-x="0" attach-y="0" fill-y="0">
+ <label param="hp_active" expand="0" fill="0"/>
+ <toggle size="1" param="hp_active" expand="0" fill="0"/>
+ </vbox>
+ <vbox attach-x="1" attach-y="0">
+ <label param="hp_freq" />
+ <knob param="hp_freq" />
+ <value param="hp_freq" />
+ </vbox>
+ <vbox attach-x="0" attach-y="1" attach-w="2">
+ <label param="hp_mode" />
+ <combo param="hp_mode" />
+ </vbox>
+ </table>
+ </frame>
+ </vbox>
+
+ <hbox attach-x="0" attach-y="1">
+ <frame label="Lowshelf">
+ <table rows="3" cols="1">
+ <vbox attach-x="0" attach-y="0">
+ <label param="ls_freq" />
+ <knob param="ls_freq" />
+ <value param="ls_freq" />
+ </vbox>
+ <vbox attach-x="0" attach-y="1">
+ <label param="ls_level" />
+ <knob param="ls_level" />
+ <value param="ls_level" />
+ </vbox>
+ <vbox attach-x="0" attach-y="2">
+ <label param="ls_active" />
+ <toggle size="1" param="ls_active" />
+ </vbox>
+ </table>
+ </frame>
+ </hbox>
+
+ <if cond="directlink">
+ <frame label="Frequency Response" attach-x="1" attach-y="0">
+ <line-graph refresh="1" param="p1_freq" expand="1" fill="1"/>
+ </frame>
+ </if>
+
+ <frame label="Parametrics" attach-x="1" attach-y="1">
+ <table rows="5" cols="9">
+ <label text="Freq" attach-x="0" attach-y="1" />
+ <label text="Level" attach-x="0" attach-y="2" />
+ <label text="Q" attach-x="0" attach-y="3" />
+ <label text="Active" attach-x="0" attach-y="4" />
+
+ <label text="I" attach-x="1" attach-y="0" />
+ <label text="II" attach-x="2" attach-y="0" />
+ <label text="III" attach-x="3" attach-y="0" />
+ <label text="IV" attach-x="4" attach-y="0" />
+ <label text="V" attach-x="5" attach-y="0" />
+ <label text="VI" attach-x="6" attach-y="0" />
+ <label text="VII" attach-x="7" attach-y="0" />
+ <label text="VIII" attach-x="8" attach-y="0" />
+
+ <vbox attach-x="1" attach-y="1">
+ <knob param="p1_freq" />
+ <value param="p1_freq" />
+ </vbox>
+ <vbox attach-x="1" attach-y="2">
+ <knob param="p1_level" />
+ <value param="p1_level" />
+ </vbox>
+ <vbox attach-x="1" attach-y="3">
+ <knob param="p1_q" />
+ <value param="p1_q" />
+ </vbox>
+ <vbox attach-x="1" attach-y="4">
+ <toggle size="1" param="p1_active" />
+ </vbox>
+ <vbox attach-x="2" attach-y="1">
+ <knob param="p2_freq" />
+ <value param="p2_freq" />
+ </vbox>
+ <vbox attach-x="2" attach-y="2">
+ <knob param="p2_level" />
+ <value param="p2_level" />
+ </vbox>
+ <vbox attach-x="2" attach-y="3">
+ <knob param="p2_q" />
+ <value param="p2_q" />
+ </vbox>
+ <vbox attach-x="2" attach-y="4">
+ <toggle size="1" param="p2_active" />
+ </vbox>
+ <vbox attach-x="3" attach-y="1">
+ <knob param="p3_freq" />
+ <value param="p3_freq" />
+ </vbox>
+ <vbox attach-x="3" attach-y="2">
+ <knob param="p3_level" />
+ <value param="p3_level" />
+ </vbox>
+ <vbox attach-x="3" attach-y="3">
+ <knob param="p3_q" />
+ <value param="p3_q" />
+ </vbox>
+ <vbox attach-x="3" attach-y="4">
+ <toggle size="1" param="p3_active" />
+ </vbox>
+ <vbox attach-x="4" attach-y="1">
+ <knob param="p4_freq" />
+ <value param="p4_freq" />
+ </vbox>
+ <vbox attach-x="4" attach-y="2">
+ <knob param="p4_level" />
+ <value param="p4_level" />
+ </vbox>
+ <vbox attach-x="4" attach-y="3">
+ <knob param="p4_q" />
+ <value param="p4_q" />
+ </vbox>
+ <vbox attach-x="4" attach-y="4">
+ <toggle size="1" param="p4_active" />
+ </vbox>
+ <vbox attach-x="5" attach-y="1">
+ <knob param="p5_freq" />
+ <value param="p5_freq" />
+ </vbox>
+ <vbox attach-x="5" attach-y="2">
+ <knob param="p5_level" />
+ <value param="p5_level" />
+ </vbox>
+ <vbox attach-x="5" attach-y="3">
+ <knob param="p5_q" />
+ <value param="p5_q" />
+ </vbox>
+ <vbox attach-x="5" attach-y="4">
+ <toggle size="1" param="p5_active" />
+ </vbox>
+ <vbox attach-x="6" attach-y="1">
+ <knob param="p6_freq" />
+ <value param="p6_freq" />
+ </vbox>
+ <vbox attach-x="6" attach-y="2">
+ <knob param="p6_level" />
+ <value param="p6_level" />
+ </vbox>
+ <vbox attach-x="6" attach-y="3">
+ <knob param="p6_q" />
+ <value param="p6_q" />
+ </vbox>
+ <vbox attach-x="6" attach-y="4">
+ <toggle size="1" param="p6_active" />
+ </vbox>
+ <vbox attach-x="7" attach-y="1">
+ <knob param="p7_freq" />
+ <value param="p7_freq" />
+ </vbox>
+ <vbox attach-x="7" attach-y="2">
+ <knob param="p7_level" />
+ <value param="p7_level" />
+ </vbox>
+ <vbox attach-x="7" attach-y="3">
+ <knob param="p7_q" />
+ <value param="p7_q" />
+ </vbox>
+ <vbox attach-x="7" attach-y="4">
+ <toggle size="1" param="p7_active" />
+ </vbox>
+ <vbox attach-x="8" attach-y="1">
+ <knob param="p8_freq" />
+ <value param="p8_freq" />
+ </vbox>
+ <vbox attach-x="8" attach-y="2">
+ <knob param="p8_level" />
+ <value param="p8_level" />
+ </vbox>
+ <vbox attach-x="8" attach-y="3">
+ <knob param="p8_q" />
+ <value param="p8_q" />
+ </vbox>
+ <vbox attach-x="8" attach-y="4">
+ <toggle size="1" param="p8_active" />
+ </vbox>
+ </table>
+ </frame>
+
+ <vbox attach-x="2" attach-y="0">
+ <frame label="Output">
+ <vbox spacing="5">
+ <table rows="2" cols="3">
+ <label param="meter_outL" attach-x="0" attach-y="0" fill-x="0" expand-x="0" fill-y="0" expand-y="0"/>
+ <vumeter param="meter_outL" hold="1.5" falloff="2.5" attach-x="1" attach-y="0" fill-x="1" expand-x="1" fill-y="0" expand-y="0"/>
+ <led param="clip_outL" mode="1" attach-x="2" attach-y="0" fill-x="0" expand-x="0" fill-y="0" expand-y="0" />
+
+ <label param="meter_outR" attach-x="0" attach-y="1" fill-x="0" expand-x="0" fill-y="0" expand-y="0"/>
+ <vumeter param="meter_outR" hold="1.5" falloff="2.5" attach-x="1" attach-y="1" fill-x="1" expand-x="1" fill-y="0" expand-y="0"/>
+ <led param="clip_outR" mode="1" attach-x="2" attach-y="1" fill-x="0" expand-x="0" fill-y="0" expand-y="0"/>
+ </table>
+ <hbox>
+ <vbox>
+ <knob param="level_out" size="3" />
+ <value param="level_out" />
+ </vbox>
+ </hbox>
+ </vbox>
+ </frame>
+ <frame label="Lowpass">
+ <table cols="2" rows="2">
+ <vbox attach-x="0" attach-y="0" fill-y="0">
+ <label param="lp_active" />
+ <toggle size="1" param="lp_active" />
+ </vbox>
+ <vbox attach-x="1" attach-y="0">
+ <label param="lp_freq" />
+ <knob param="lp_freq" />
+ <value param="lp_freq" />
+ </vbox>
+ <vbox attach-x="0" attach-y="1" attach-w="2">
+ <label param="lp_mode" />
+ <combo param="lp_mode" />
+ </vbox>
+ </table>
+ </frame>
+ </vbox>
+
+ <hbox attach-x="2" attach-y="1">
+ <frame label="Highshelf">
+ <table rows="3" cols="1">
+ <vbox attach-x="0" attach-y="0">
+ <label param="hs_freq" />
+ <knob param="hs_freq" />
+ <value param="hs_freq" />
+ </vbox>
+ <vbox attach-x="0" attach-y="1">
+ <label param="hs_level" />
+ <knob param="hs_level" />
+ <value param="hs_level" />
+ </vbox>
+ <vbox attach-x="0" attach-y="2">
+ <label param="hs_active" />
+ <toggle size="1" param="hs_active" />
+ </vbox>
+ </table>
+ </frame>
+ </hbox>
+</table>
diff --git a/gui/gui-equalizer5band.xml b/gui/gui-equalizer5band.xml
new file mode 100644
index 0000000..4d41df9
--- /dev/null
+++ b/gui/gui-equalizer5band.xml
@@ -0,0 +1,159 @@
+<table rows="2" cols="3">
+ <vbox attach-x="0" attach-y="0">
+ <frame label="Input">
+ <vbox spacing="15">
+ <table rows="1" cols="3">
+ <vumeter param="meter_in" hold="1.5" falloff="2.5" attach-x="1" attach-y="0" fill-x="1" expand-x="1" fill-y="0" expand-y="0"/>
+ <led param="clip_in" attach-x="2" attach-y="0" fill-x="0" expand-x="0" fill-y="0" expand-y="0" />
+ </table>
+ <hbox>
+ <vbox expand="0">
+ <toggle param="bypass" size="2" />
+ <label param="bypass" />
+ </vbox>
+ <vbox>
+ <knob param="level_in" size="5" />
+ <value param="level_in" />
+ </vbox>
+ </hbox>
+ </vbox>
+ </frame>
+ </vbox>
+
+ <hbox attach-x="0" attach-y="1">
+ <frame label="Lowshelf">
+ <table rows="2" cols="2" homogeneous="1">
+ <vbox attach-x="0" attach-y="0">
+ <label param="ls_freq" />
+ <knob param="ls_freq" />
+ <value param="ls_freq" />
+ </vbox>
+ <vbox attach-x="1" attach-y="0">
+ <label param="ls_level" />
+ <knob param="ls_level" />
+ <value param="ls_level" />
+ </vbox>
+ <vbox attach-x="1" attach-y="1" fill-y="0">
+ <label param="ls_active"/>
+ <toggle size="1" param="ls_active" />
+ </vbox>
+ </table>
+ </frame>
+ </hbox>
+
+ <if cond="directlink">
+ <frame label="Frequency Response" attach-x="1" attach-y="0" pad-x="8">
+ <line-graph refresh="1" param="p1_freq" expand="1" fill="1"/>
+ </frame>
+ </if>
+
+ <hbox attach-x="1" attach-y="1" spacing="8" pad-x="8">
+ <frame label="Parametric 1">
+ <table rows="2" cols="2" homogeneous="1">
+ <vbox attach-x="0" attach-y="0">
+ <label param="p1_freq" />
+ <knob param="p1_freq" />
+ <value param="p1_freq" />
+ </vbox>
+ <vbox attach-x="1" attach-y="0">
+ <label param="p1_level" />
+ <knob param="p1_level" />
+ <value param="p1_level" />
+ </vbox>
+ <vbox attach-x="0" attach-y="1">
+ <label param="p1_q" />
+ <knob param="p1_q" />
+ <value param="p1_q" />
+ </vbox>
+ <vbox attach-x="1" attach-y="1" fill-y="0">
+ <label param="p1_active" />
+ <toggle size="1" param="p1_active" />
+ </vbox>
+ </table>
+ </frame>
+ <frame label="Parametric 2">
+ <table rows="2" cols="2" homogeneous="1">
+ <vbox attach-x="0" attach-y="0">
+ <label param="p2_freq" />
+ <knob param="p2_freq" />
+ <value param="p2_freq" />
+ </vbox>
+ <vbox attach-x="1" attach-y="0">
+ <label param="p2_level" />
+ <knob param="p2_level" />
+ <value param="p2_level" />
+ </vbox>
+ <vbox attach-x="0" attach-y="1">
+ <label param="p2_q" />
+ <knob param="p2_q" />
+ <value param="p2_q" />
+ </vbox>
+ <vbox attach-x="1" attach-y="1" fill-y="0">
+ <label param="p2_active" />
+ <toggle size="1" param="p2_active" />
+ </vbox>
+ </table>
+ </frame>
+ <frame label="Parametric 3">
+ <table rows="2" cols="2" homogeneous="1">
+ <vbox attach-x="0" attach-y="0">
+ <label param="p3_freq" />
+ <knob param="p3_freq" />
+ <value param="p3_freq" />
+ </vbox>
+ <vbox attach-x="1" attach-y="0">
+ <label param="p3_level" />
+ <knob param="p3_level" />
+ <value param="p3_level" />
+ </vbox>
+ <vbox attach-x="0" attach-y="1">
+ <label param="p3_q" />
+ <knob param="p3_q" />
+ <value param="p3_q" />
+ </vbox>
+ <vbox attach-x="1" attach-y="1" fill-y="0">
+ <label param="p3_active" />
+ <toggle size="1" param="p3_active" />
+ </vbox>
+ </table>
+ </frame>
+ </hbox>
+
+ <vbox attach-x="2" attach-y="0">
+ <frame label="Output">
+ <vbox spacing="15">
+ <table rows="2" cols="3">
+ <vumeter param="meter_out" hold="1.5" falloff="2.5" attach-x="1" attach-y="0" fill-x="1" expand-x="1" fill-y="0" expand-y="0"/>
+ <led param="clip_out" mode="1" attach-x="2" attach-y="0" fill-x="0" expand-x="0" fill-y="0" expand-y="0" />
+ </table>
+ <hbox>
+ <vbox>
+ <knob param="level_out" size="5" />
+ <value param="level_out" />
+ </vbox>
+ </hbox>
+ </vbox>
+ </frame>
+ </vbox>
+
+ <hbox attach-x="2" attach-y="1">
+ <frame label="Highshelf">
+ <table rows="2" cols="2" homogeneous="1">
+ <vbox attach-x="0" attach-y="0">
+ <label param="hs_freq" />
+ <knob param="hs_freq" />
+ <value param="hs_freq" />
+ </vbox>
+ <vbox attach-x="1" attach-y="0">
+ <label param="hs_level" />
+ <knob param="hs_level" />
+ <value param="hs_level" />
+ </vbox>
+ <vbox attach-x="1" attach-y="1" fill-y="0">
+ <label param="hs_active" />
+ <toggle size="1" param="hs_active" />
+ </vbox>
+ </table>
+ </frame>
+ </hbox>
+</table>
diff --git a/gui/gui-equalizer8band.xml b/gui/gui-equalizer8band.xml
new file mode 100644
index 0000000..0091d8d
--- /dev/null
+++ b/gui/gui-equalizer8band.xml
@@ -0,0 +1,207 @@
+<table rows="2" cols="3">
+ <vbox attach-x="0" attach-y="0">
+ <frame label="Input">
+ <vbox spacing="5">
+ <table rows="2" cols="3">
+ <label param="meter_inL" attach-x="0" attach-y="0" fill-x="0" expand-x="0" fill-y="0" expand-y="0"/>
+ <vumeter param="meter_inL" hold="1.5" falloff="2.5" attach-x="1" attach-y="0" fill-x="1" expand-x="1" fill-y="0" expand-y="0"/>
+ <led param="clip_inL" attach-x="2" attach-y="0" fill-x="0" expand-x="0" fill-y="0" expand-y="0" />
+
+ <label param="meter_inR" attach-x="0" attach-y="1" fill-x="0" expand-x="0" fill-y="0" expand-y="0"/>
+ <vumeter param="meter_inR" hold="1.5" falloff="2.5" attach-x="1" attach-y="1" fill-x="1" expand-x="1" fill-y="0" expand-y="0"/>
+ <led param="clip_inR" attach-x="2" attach-y="1" fill-x="0" expand-x="0" fill-y="0" expand-y="0"/>
+ </table>
+ <hbox>
+ <vbox>
+ <label />
+ <toggle param="bypass" size="2" />
+ <label param="bypass" />
+ </vbox>
+ <vbox>
+ <knob param="level_in" size="3" />
+ <value param="level_in" />
+ </vbox>
+ </hbox>
+ </vbox>
+ </frame>
+ <frame label="Highpass">
+ <table cols="2" rows="2">
+ <vbox attach-x="0" attach-y="0" fill-y="0">
+ <label param="hp_active" expand="0" fill="0"/>
+ <toggle size="1" param="hp_active" expand="0" fill="0"/>
+ </vbox>
+ <vbox attach-x="1" attach-y="0">
+ <label param="hp_freq" />
+ <knob param="hp_freq" />
+ <value param="hp_freq" />
+ </vbox>
+ <vbox attach-x="0" attach-y="1" attach-w="2">
+ <label param="hp_mode" />
+ <combo param="hp_mode" />
+ </vbox>
+ </table>
+ </frame>
+ </vbox>
+
+ <hbox attach-x="0" attach-y="1">
+ <frame label="Lowshelf">
+ <table rows="3" cols="1">
+ <vbox attach-x="0" attach-y="0">
+ <label param="ls_freq" />
+ <knob param="ls_freq" />
+ <value param="ls_freq" />
+ </vbox>
+ <vbox attach-x="0" attach-y="1">
+ <label param="ls_level" />
+ <knob param="ls_level" />
+ <value param="ls_level" />
+ </vbox>
+ <vbox attach-x="0" attach-y="2">
+ <label param="ls_active" />
+ <toggle size="1" param="ls_active" />
+ </vbox>
+ </table>
+ </frame>
+ </hbox>
+
+ <if cond="directlink">
+ <frame label="Frequency Response" attach-x="1" attach-y="0" pad-x="8">
+ <line-graph refresh="1" param="p1_freq" expand="1" fill="1"/>
+ </frame>
+ </if>
+
+ <frame label="Parametrics" attach-x="1" attach-y="1" pad-x="8">
+ <table rows="5" cols="5">
+ <label text="Freq" attach-x="0" attach-y="1" />
+ <label text="Level" attach-x="0" attach-y="2" />
+ <label text="Q" attach-x="0" attach-y="3" />
+ <label text="Active" attach-x="0" attach-y="4" />
+
+ <label text="I" attach-x="1" attach-y="0" />
+ <label text="II" attach-x="2" attach-y="0" />
+ <label text="III" attach-x="3" attach-y="0" />
+ <label text="IV" attach-x="4" attach-y="0" />
+
+ <vbox attach-x="1" attach-y="1">
+ <knob param="p1_freq" />
+ <value param="p1_freq" />
+ </vbox>
+ <vbox attach-x="1" attach-y="2">
+ <knob param="p1_level" />
+ <value param="p1_level" />
+ </vbox>
+ <vbox attach-x="1" attach-y="3">
+ <knob param="p1_q" />
+ <value param="p1_q" />
+ </vbox>
+ <vbox attach-x="1" attach-y="4">
+ <toggle size="1" param="p1_active" />
+ </vbox>
+ <vbox attach-x="2" attach-y="1">
+ <knob param="p2_freq" />
+ <value param="p2_freq" />
+ </vbox>
+ <vbox attach-x="2" attach-y="2">
+ <knob param="p2_level" />
+ <value param="p2_level" />
+ </vbox>
+ <vbox attach-x="2" attach-y="3">
+ <knob param="p2_q" />
+ <value param="p2_q" />
+ </vbox>
+ <vbox attach-x="2" attach-y="4">
+ <toggle size="1" param="p2_active" />
+ </vbox>
+ <vbox attach-x="3" attach-y="1">
+ <knob param="p3_freq" />
+ <value param="p3_freq" />
+ </vbox>
+ <vbox attach-x="3" attach-y="2">
+ <knob param="p3_level" />
+ <value param="p3_level" />
+ </vbox>
+ <vbox attach-x="3" attach-y="3">
+ <knob param="p3_q" />
+ <value param="p3_q" />
+ </vbox>
+ <vbox attach-x="3" attach-y="4">
+ <toggle size="1" param="p3_active" />
+ </vbox>
+ <vbox attach-x="4" attach-y="1">
+ <knob param="p4_freq" />
+ <value param="p4_freq" />
+ </vbox>
+ <vbox attach-x="4" attach-y="2">
+ <knob param="p4_level" />
+ <value param="p4_level" />
+ </vbox>
+ <vbox attach-x="4" attach-y="3">
+ <knob param="p4_q" />
+ <value param="p4_q" />
+ </vbox>
+ <vbox attach-x="4" attach-y="4">
+ <toggle size="1" param="p4_active" />
+ </vbox>
+ </table>
+ </frame>
+
+ <vbox attach-x="2" attach-y="0">
+ <frame label="Output">
+ <vbox spacing="5">
+ <table rows="2" cols="3">
+ <label param="meter_outL" attach-x="0" attach-y="0" fill-x="0" expand-x="0" fill-y="0" expand-y="0"/>
+ <vumeter param="meter_outL" hold="1.5" falloff="2.5" attach-x="1" attach-y="0" fill-x="1" expand-x="1" fill-y="0" expand-y="0"/>
+ <led param="clip_outL" mode="1" attach-x="2" attach-y="0" fill-x="0" expand-x="0" fill-y="0" expand-y="0" />
+
+ <label param="meter_outR" attach-x="0" attach-y="1" fill-x="0" expand-x="0" fill-y="0" expand-y="0"/>
+ <vumeter param="meter_outR" hold="1.5" falloff="2.5" attach-x="1" attach-y="1" fill-x="1" expand-x="1" fill-y="0" expand-y="0"/>
+ <led param="clip_outR" mode="1" attach-x="2" attach-y="1" fill-x="0" expand-x="0" fill-y="0" expand-y="0"/>
+ </table>
+ <hbox>
+ <vbox>
+ <knob param="level_out" size="3" />
+ <value param="level_out" />
+ </vbox>
+ </hbox>
+ </vbox>
+ </frame>
+ <frame label="Lowpass">
+ <table cols="2" rows="2">
+ <vbox attach-x="0" attach-y="0" fill-y="0">
+ <label param="lp_active" />
+ <toggle size="1" param="lp_active" />
+ </vbox>
+ <vbox attach-x="1" attach-y="0">
+ <label param="lp_freq" />
+ <knob param="lp_freq" />
+ <value param="lp_freq" />
+ </vbox>
+ <vbox attach-x="0" attach-y="1" attach-w="2">
+ <label param="lp_mode" />
+ <combo param="lp_mode" />
+ </vbox>
+ </table>
+ </frame>
+ </vbox>
+
+ <hbox attach-x="2" attach-y="1">
+ <frame label="Highshelf">
+ <table rows="3" cols="1">
+ <vbox attach-x="0" attach-y="0">
+ <label param="hs_freq" />
+ <knob param="hs_freq" />
+ <value param="hs_freq" />
+ </vbox>
+ <vbox attach-x="0" attach-y="1">
+ <label param="hs_level" />
+ <knob param="hs_level" />
+ <value param="hs_level" />
+ </vbox>
+ <vbox attach-x="0" attach-y="2">
+ <label param="hs_active" />
+ <toggle size="1" param="hs_active" />
+ </vbox>
+ </table>
+ </frame>
+ </hbox>
+</table>
diff --git a/gui/gui-sidechaincompressor.xml b/gui/gui-sidechaincompressor.xml
index 37bbc0c..c9ba341 100644
--- a/gui/gui-sidechaincompressor.xml
+++ b/gui/gui-sidechaincompressor.xml
@@ -83,17 +83,18 @@
</frame>
</vbox>
- <if cond="directlink">
+
<frame label="Compression">
<vbox spacing="12">
<vbox spacing="8">
<label param="compression"/>
<vumeter param="compression" mode="2" hold="1.5" attach-w="2" expand="0" fill="0"/>
</vbox>
- <line-graph refresh="1" width="255" height="255" param="compression" square="1" expand="1" fill="1"/>
+ <if cond="directlink">
+ <line-graph refresh="1" width="255" height="255" param="compression" square="1" expand="1" fill="1"/>
+ </if>
</vbox>
</frame>
- </if>
<vbox spacing="5">
diff --git a/src/calf/metadata.h b/src/calf/metadata.h
index 79d4401..6ba14fb 100644
--- a/src/calf/metadata.h
+++ b/src/calf/metadata.h
@@ -126,7 +126,7 @@ struct monosynth_metadata: public plugin_metadata<monosynth_metadata>
};
PLUGIN_NAME_ID_LABEL("monosynth", "monosynth", "Monosynth")
};
-
+
/// Thor's compressor - metadata
struct compressor_metadata: public plugin_metadata<compressor_metadata>
{
@@ -168,6 +168,59 @@ struct multibandcompressor_metadata: public plugin_metadata<multibandcompressor_
PLUGIN_NAME_ID_LABEL("multiband_compressor", "multibandcompressor", "Multiband Compressor")
};
+/// Markus's 5-band EQ - metadata
+struct equalizer5band_metadata: public plugin_metadata<equalizer5band_metadata>
+{
+ enum { in_count = 2, out_count = 2, support_midi = false, require_midi = false, rt_capable = true };
+ enum { param_bypass, param_level_in, param_level_out, param_meter_in,
+ param_meter_out, param_clip_in, param_clip_out,
+ param_ls_active, param_ls_level, param_ls_freq,
+ param_hs_active, param_hs_level, param_hs_freq,
+ param_p1_active, param_p1_level, param_p1_freq, param_p1_q,
+ param_p2_active, param_p2_level, param_p2_freq, param_p2_q,
+ param_p3_active, param_p3_level, param_p3_freq, param_p3_q,
+ param_count };
+ PLUGIN_NAME_ID_LABEL("equalizer5band", "equalizer5band", "Equalizer 5 Band")
+};
+/// Markus's 8-band EQ - metadata
+struct equalizer8band_metadata: public plugin_metadata<equalizer8band_metadata>
+{
+ enum { in_count = 2, out_count = 2, support_midi = false, require_midi = false, rt_capable = true };
+ enum { param_bypass, param_level_in, param_level_out, param_meter_inL, param_meter_inR,
+ param_meter_outL, param_meter_outR, param_clip_inL, param_clip_inR, param_clip_outL, param_clip_outR,
+ param_hp_active, param_hp_freq, param_hp_mode,
+ param_lp_active, param_lp_freq, param_lp_mode,
+ param_ls_active, param_ls_level, param_ls_freq,
+ param_hs_active, param_hs_level, param_hs_freq,
+ param_p1_active, param_p1_level, param_p1_freq, param_p1_q,
+ param_p2_active, param_p2_level, param_p2_freq, param_p2_q,
+ param_p3_active, param_p3_level, param_p3_freq, param_p3_q,
+ param_p4_active, param_p4_level, param_p4_freq, param_p4_q,
+ param_count };
+ PLUGIN_NAME_ID_LABEL("equalizer8band", "equalizer8band", "Equalizer 8 Band")
+};
+/// Markus's 12-band EQ - metadata
+struct equalizer12band_metadata: public plugin_metadata<equalizer12band_metadata>
+{
+ enum { in_count = 2, out_count = 2, support_midi = false, require_midi = false, rt_capable = true };
+ enum { param_bypass, param_level_in, param_level_out, param_meter_inL, param_meter_inR,
+ param_meter_outL, param_meter_outR, param_clip_inL, param_clip_inR, param_clip_outL, param_clip_outR,
+ param_hp_active, param_hp_freq, param_hp_mode,
+ param_lp_active, param_lp_freq, param_lp_mode,
+ param_ls_active, param_ls_level, param_ls_freq,
+ param_hs_active, param_hs_level, param_hs_freq,
+ param_p1_active, param_p1_level, param_p1_freq, param_p1_q,
+ param_p2_active, param_p2_level, param_p2_freq, param_p2_q,
+ param_p3_active, param_p3_level, param_p3_freq, param_p3_q,
+ param_p4_active, param_p4_level, param_p4_freq, param_p4_q,
+ param_p5_active, param_p5_level, param_p5_freq, param_p5_q,
+ param_p6_active, param_p6_level, param_p6_freq, param_p6_q,
+ param_p7_active, param_p7_level, param_p7_freq, param_p7_q,
+ param_p8_active, param_p8_level, param_p8_freq, param_p8_q,
+ param_count };
+ PLUGIN_NAME_ID_LABEL("equalizer12band", "equalizer12band", "Equalizer 12 Band")
+};
+
/// Organ - enums for parameter IDs etc. (this mess is caused by organ split between plugin and generic class - which was
/// a bad design decision and should be sorted out some day) XXXKF @todo
struct organ_enums
diff --git a/src/calf/modulelist.h b/src/calf/modulelist.h
index 904e1b3..2fba14b 100644
--- a/src/calf/modulelist.h
+++ b/src/calf/modulelist.h
@@ -10,8 +10,11 @@
PER_MODULE_ITEM(phaser, false, "phaser")
PER_MODULE_ITEM(multichorus, false, "multichorus")
PER_MODULE_ITEM(compressor, false, "compressor")
- PER_MODULE_ITEM(multibandcompressor, false, "multibandcompressor")
PER_MODULE_ITEM(sidechaincompressor, false, "sidechaincompressor")
+ PER_MODULE_ITEM(multibandcompressor, false, "multibandcompressor")
+ PER_MODULE_ITEM(equalizer5band, false, "equalizer5band")
+ PER_MODULE_ITEM(equalizer8band, false, "equalizer8band")
+ PER_MODULE_ITEM(equalizer12band, false, "equalizer12band")
#ifdef ENABLE_EXPERIMENTAL
PER_MODULE_ITEM(fluidsynth, true, "fluidsynth")
PER_MODULE_ITEM(wavetable, true, "wavetable")
diff --git a/src/calf/modules.h b/src/calf/modules.h
index f80e683..5ba9fff 100644
--- a/src/calf/modules.h
+++ b/src/calf/modules.h
@@ -949,7 +949,6 @@ public:
virtual int get_changed_offsets(int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline);
};
-
/// Sidecain Compressor by Markus Schmidt (based on Thor's compressor and Krzysztof's filters)
class sidechaincompressor_audio_module: public audio_module<sidechaincompressor_metadata>, public frequency_response_line_graph {
private:
@@ -1053,6 +1052,228 @@ public:
virtual int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline);
};
+/// Equalizer 12 Band by Markus Schmidt (based on Krzysztof's filters)
+class equalizer12band_audio_module: public audio_module<equalizer12band_metadata>, public frequency_response_line_graph {
+private:
+ float hp_mode_old, hp_freq_old;
+ float lp_mode_old, lp_freq_old;
+ float ls_level_old, ls_freq_old;
+ float hs_level_old, hs_freq_old;
+ float p_level_old[8], p_freq_old[8], p_q_old[8];
+ float hp_mode_old1, hp_freq_old1, hp_active_old1;
+ float lp_mode_old1, lp_freq_old1, lp_active_old1;
+ float ls_level_old1, ls_freq_old1, ls_active_old1;
+ float hs_level_old1, hs_freq_old1, hs_active_old1;
+ float p_level_old1[8], p_freq_old1[8], p_q_old1[8], p_active_old1[8];
+ enum CalfEqModes {
+ MODE12DB,
+ MODE24DB,
+ MODE36DB
+ };
+ CalfEqModes eq_mode, eq_mode_old1[2];
+ uint32_t clip_inL, clip_outL, clip_inR, clip_outR;
+ float meter_inL, meter_outL, meter_inR, meter_outR;
+ biquad_d2<float> hpL[3], hpR[3], lpL[3], lpR[3];
+ biquad_d2<float> lsL, lsR, hsL, hsR;
+ biquad_d2<float> pL[8], pR[8];
+public:
+ typedef std::complex<double> cfloat;
+ float *ins[in_count];
+ float *outs[out_count];
+ float *params[param_count];
+ uint32_t srate;
+ bool is_active;
+ volatile int last_generation, last_calculated_generation;
+ equalizer12band_audio_module();
+ void activate();
+ void deactivate();
+ void params_changed();
+ float freq_gain(int index, double freq, uint32_t sr)
+ {
+ float ret = 1.f;
+ if(*params[param_hp_active] > 0.f) {
+ switch((int)*params[param_hp_mode]) {
+ case MODE12DB:
+ ret *= hpL[0].freq_gain(freq, sr);
+ ret *= hpR[0].freq_gain(freq, sr);
+ break;
+ case MODE24DB:
+ ret *= hpL[0].freq_gain(freq, sr) * hpL[0].freq_gain(freq, sr);
+ ret *= hpR[0].freq_gain(freq, sr) * hpR[0].freq_gain(freq, sr);
+ break;
+ case MODE36DB:
+ ret *= hpL[0].freq_gain(freq, sr) * hpL[0].freq_gain(freq, sr) * hpL[0].freq_gain(freq, sr);
+ ret *= hpR[0].freq_gain(freq, sr) * hpR[0].freq_gain(freq, sr) * hpR[0].freq_gain(freq, sr);
+ break;
+ }
+ }
+ if(*params[param_lp_active] > 0.f) {
+ switch((int)*params[param_lp_mode]) {
+ case MODE12DB:
+ ret *= lpL[0].freq_gain(freq, sr);
+ ret *= lpR[0].freq_gain(freq, sr);
+ break;
+ case MODE24DB:
+ ret *= lpL[0].freq_gain(freq, sr) * lpL[0].freq_gain(freq, sr);
+ ret *= lpR[0].freq_gain(freq, sr) * lpR[0].freq_gain(freq, sr);
+ break;
+ case MODE36DB:
+ ret *= lpL[0].freq_gain(freq, sr) * lpL[0].freq_gain(freq, sr) * lpL[0].freq_gain(freq, sr);
+ ret *= lpR[0].freq_gain(freq, sr) * lpR[0].freq_gain(freq, sr) * lpR[0].freq_gain(freq, sr);
+ break;
+ }
+ }
+ ret *= (*params[param_ls_active] > 0.f) ? lsL.freq_gain(freq, sr) : 1;
+ ret *= (*params[param_hs_active] > 0.f) ? hsL.freq_gain(freq, sr) : 1;
+ ret *= (*params[param_p1_active] > 0.f) ? pL[0].freq_gain(freq, sr) : 1;
+ ret *= (*params[param_p2_active] > 0.f) ? pL[1].freq_gain(freq, sr) : 1;
+ ret *= (*params[param_p3_active] > 0.f) ? pL[2].freq_gain(freq, sr) : 1;
+ ret *= (*params[param_p4_active] > 0.f) ? pL[3].freq_gain(freq, sr) : 1;
+ ret *= (*params[param_p5_active] > 0.f) ? pL[4].freq_gain(freq, sr) : 1;
+ ret *= (*params[param_p6_active] > 0.f) ? pL[5].freq_gain(freq, sr) : 1;
+ ret *= (*params[param_p7_active] > 0.f) ? pL[6].freq_gain(freq, sr) : 1;
+ ret *= (*params[param_p8_active] > 0.f) ? pL[7].freq_gain(freq, sr) : 1;
+ return ret;
+ }
+ void set_sample_rate(uint32_t sr);
+ uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask);
+ bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context);
+ bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context);
+ int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline);
+};
+
+/// Equalizer 8 Band by Markus Schmidt (based on Krzysztof's filters)
+class equalizer8band_audio_module: public audio_module<equalizer8band_metadata>, public frequency_response_line_graph {
+private:
+ float hp_mode_old, hp_freq_old;
+ float lp_mode_old, lp_freq_old;
+ float ls_level_old, ls_freq_old;
+ float hs_level_old, hs_freq_old;
+ float p_level_old[4], p_freq_old[4], p_q_old[4];
+ float hp_mode_old1, hp_freq_old1, hp_active_old1;
+ float lp_mode_old1, lp_freq_old1, lp_active_old1;
+ float ls_level_old1, ls_freq_old1, ls_active_old1;
+ float hs_level_old1, hs_freq_old1, hs_active_old1;
+ float p_level_old1[4], p_freq_old1[4], p_q_old1[4], p_active_old1[4];
+ enum CalfEqModes {
+ MODE12DB,
+ MODE24DB,
+ MODE36DB
+ };
+ CalfEqModes eq_mode, eq_mode_old1[2];
+ uint32_t clip_inL, clip_outL, clip_inR, clip_outR;
+ float meter_inL, meter_outL, meter_inR, meter_outR;
+ biquad_d2<float> hpL[3], hpR[3], lpL[3], lpR[3];
+ biquad_d2<float> lsL, lsR, hsL, hsR;
+ biquad_d2<float> pL[4], pR[4];
+public:
+ typedef std::complex<double> cfloat;
+ float *ins[in_count];
+ float *outs[out_count];
+ float *params[param_count];
+ uint32_t srate;
+ bool is_active;
+ volatile int last_generation, last_calculated_generation;
+ equalizer8band_audio_module();
+ void activate();
+ void deactivate();
+ void params_changed();
+ float freq_gain(int index, double freq, uint32_t sr)
+ {
+ float ret = 1.f;
+ if(*params[param_hp_active] > 0.f) {
+ switch((int)*params[param_hp_mode]) {
+ case MODE12DB:
+ ret *= hpL[0].freq_gain(freq, sr);
+ ret *= hpR[0].freq_gain(freq, sr);
+ break;
+ case MODE24DB:
+ ret *= hpL[0].freq_gain(freq, sr) * hpL[0].freq_gain(freq, sr);
+ ret *= hpR[0].freq_gain(freq, sr) * hpR[0].freq_gain(freq, sr);
+ break;
+ case MODE36DB:
+ ret *= hpL[0].freq_gain(freq, sr) * hpL[0].freq_gain(freq, sr) * hpL[0].freq_gain(freq, sr);
+ ret *= hpR[0].freq_gain(freq, sr) * hpR[0].freq_gain(freq, sr) * hpR[0].freq_gain(freq, sr);
+ break;
+ }
+ }
+ if(*params[param_lp_active] > 0.f) {
+ switch((int)*params[param_lp_mode]) {
+ case MODE12DB:
+ ret *= lpL[0].freq_gain(freq, sr);
+ ret *= lpR[0].freq_gain(freq, sr);
+ break;
+ case MODE24DB:
+ ret *= lpL[0].freq_gain(freq, sr) * lpL[0].freq_gain(freq, sr);
+ ret *= lpR[0].freq_gain(freq, sr) * lpR[0].freq_gain(freq, sr);
+ break;
+ case MODE36DB:
+ ret *= lpL[0].freq_gain(freq, sr) * lpL[0].freq_gain(freq, sr) * lpL[0].freq_gain(freq, sr);
+ ret *= lpR[0].freq_gain(freq, sr) * lpR[0].freq_gain(freq, sr) * lpR[0].freq_gain(freq, sr);
+ break;
+ }
+ }
+ ret *= (*params[param_ls_active] > 0.f) ? lsL.freq_gain(freq, sr) : 1;
+ ret *= (*params[param_hs_active] > 0.f) ? hsL.freq_gain(freq, sr) : 1;
+ ret *= (*params[param_p1_active] > 0.f) ? pL[0].freq_gain(freq, sr) : 1;
+ ret *= (*params[param_p2_active] > 0.f) ? pL[1].freq_gain(freq, sr) : 1;
+ ret *= (*params[param_p3_active] > 0.f) ? pL[2].freq_gain(freq, sr) : 1;
+ ret *= (*params[param_p4_active] > 0.f) ? pL[3].freq_gain(freq, sr) : 1;
+ return ret;
+ }
+ void set_sample_rate(uint32_t sr);
+ uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask);
+ bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context);
+ bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context);
+ int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline);
+};
+
+/// Equalizer 5 Band by Markus Schmidt (based on Krzysztof's filters)
+class equalizer5band_audio_module: public audio_module<equalizer5band_metadata>, public frequency_response_line_graph {
+private:
+ float hp_mode_old, hp_freq_old;
+ float lp_mode_old, lp_freq_old;
+ float ls_level_old, ls_freq_old;
+ float hs_level_old, hs_freq_old;
+ float p_level_old[3], p_freq_old[3], p_q_old[3];
+ float hp_mode_old1, hp_freq_old1, hp_active_old1;
+ float lp_mode_old1, lp_freq_old1, lp_active_old1;
+ float ls_level_old1, ls_freq_old1, ls_active_old1;
+ float hs_level_old1, hs_freq_old1, hs_active_old1;
+ float p_level_old1[3], p_freq_old1[3], p_q_old1[3], p_active_old1[3];
+ uint32_t clip_in, clip_out;
+ float meter_in, meter_out;
+ biquad_d2<float> lsL, lsR, hsL, hsR;
+ biquad_d2<float> pL[3], pR[3];
+public:
+ typedef std::complex<double> cfloat;
+ float *ins[in_count];
+ float *outs[out_count];
+ float *params[param_count];
+ uint32_t srate;
+ bool is_active;
+ volatile int last_generation, last_calculated_generation;
+ equalizer5band_audio_module();
+ void activate();
+ void deactivate();
+ void params_changed();
+ float freq_gain(int index, double freq, uint32_t sr)
+ {
+ float ret = 1.f;
+ ret *= (*params[param_ls_active] > 0.f) ? lsL.freq_gain(freq, sr) : 1;
+ ret *= (*params[param_hs_active] > 0.f) ? hsL.freq_gain(freq, sr) : 1;
+ ret *= (*params[param_p1_active] > 0.f) ? pL[0].freq_gain(freq, sr) : 1;
+ ret *= (*params[param_p2_active] > 0.f) ? pL[1].freq_gain(freq, sr) : 1;
+ ret *= (*params[param_p3_active] > 0.f) ? pL[2].freq_gain(freq, sr) : 1;
+ return ret;
+ }
+ void set_sample_rate(uint32_t sr);
+ uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask);
+ bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context);
+ bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context);
+ int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline);
+};
+
/// Filterclavier --- MIDI controlled filter by Hans Baier
class filterclavier_audio_module:
public audio_module<filterclavier_metadata>,
diff --git a/src/custom_ctl.cpp b/src/custom_ctl.cpp
index 90f60ac..751810c 100644
--- a/src/custom_ctl.cpp
+++ b/src/custom_ctl.cpp
@@ -1129,7 +1129,8 @@ calf_toggle_expose (GtkWidget *widget, GdkEventExpose *event)
CalfToggle *self = CALF_TOGGLE(widget);
GdkWindow *window = widget->window;
- int ox = widget->allocation.x, oy = widget->allocation.y;
+ int ox = widget->allocation.x + widget->allocation.width / 2 - self->size * 15;
+ int oy = widget->allocation.y + widget->allocation.height / 2 - self->size * 10;
int width = self->size * 30, height = self->size * 20;
gdk_draw_pixbuf(GDK_DRAWABLE(widget->window), widget->style->fg_gc[0], CALF_TOGGLE_CLASS(GTK_OBJECT_GET_CLASS(widget))->toggle_image[self->size - 1], 0, height * gtk_range_get_value(GTK_RANGE(widget)), ox, oy, width, height, GDK_RGB_DITHER_NORMAL, 0, 0);
diff --git a/src/modules.cpp b/src/modules.cpp
index dd2d7b5..7dff743 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -212,171 +212,6 @@ CALF_PLUGIN_INFO(multichorus) = { 0x8501, "MultiChorus", "Calf MultiChorus", "Kr
////////////////////////////////////////////////////////////////////////////
-CALF_PORT_NAMES(equalizer5band) = {"In L", "In R", "Out L", "Out R"};
-const char *rolloff_mode_names[] = {"12dB", "24dB", "36dB"};
-
-CALF_PORT_PROPS(equalizer5band) = {
- { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" },
- { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" },
- { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_in", "Input" },
- { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" },
- { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_in", "0dB" },
- { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_out", "0dB" },
-
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "ls_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "ls_level", "Level" },
- { 200, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "ls_freq", "Freq" },
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "ls_active", "active" },
-
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hs_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "hs_level", "Level" },
- { 4000, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "hs_freq", "Freq" },
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hs_active", "active" },
-
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p1_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p1_level", "Level" },
- { 60, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p1_freq", "Freq" },
- { 1, 0, 100, 1, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p1_q", "Q" },
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p2_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p2_level", "Level" },
- { 120, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p2_freq", "Freq" },
- { 1, 0, 100, 1, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p2_q", "Q" },
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p3_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p3_level", "Level" },
- { 250, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p3_freq", "Freq" },
- { 1, 0, 100, 1, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p3_q", "Q" },
-};
-
-CALF_PLUGIN_INFO(equalizer5band) = { 0x8501, "Equalizer5Band", "Calf Equalizer 5 Band", "Markus Schmidt", calf_plugins::calf_copyright_info, "EqualizerPlugin" };
-
-////////////////////////////////////////////////////////////////////////////
-
-CALF_PORT_NAMES(equalizer8band) = {"In L", "In R", "Out L", "Out R"};
-const char *rolloff_mode_names[] = {"12dB", "24dB", "36dB"};
-
-CALF_PORT_PROPS(equalizer8band) = {
- { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" },
- { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" },
- { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inL", "Input L" },
- { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inR", "Input R" },
- { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "Output L" },
- { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "Output R" },
- { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inL", "0dB" },
- { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inR", "0dB" },
- { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB" },
- { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB" },
-
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hp_active", "active" },
- { 30, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "hp_freq", "Freq" },
- { 1, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, rolloff_mode_names, "hf_rolloff", "Rolloff" },
-
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "lp_active", "active" },
- { 18000, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "lp_freq", "Freq" },
- { 1, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, rolloff_mode_names, "lf_rolloff", "Rolloff" },
-
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "ls_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "ls_level", "Level" },
- { 200, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "ls_freq", "Freq" },
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "ls_active", "active" },
-
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hs_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "hs_level", "Level" },
- { 4000, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "hs_freq", "Freq" },
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hs_active", "active" },
-
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p1_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p1_level", "Level" },
- { 60, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p1_freq", "Freq" },
- { 1, 0, 100, 1, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p1_q", "Q" },
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p2_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p2_level", "Level" },
- { 120, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p2_freq", "Freq" },
- { 1, 0, 100, 1, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p2_q", "Q" },
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p3_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p3_level", "Level" },
- { 250, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p3_freq", "Freq" },
- { 1, 0, 100, 1, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p3_q", "Q" },
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p4_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p4_level", "Level" },
- { 500, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p4_freq", "Freq" },
- { 1, 0, 100, 1, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p4_q", "Q" },
-};
-
-CALF_PLUGIN_INFO(equalizer8band) = { 0x8501, "Equalizer8Band", "Calf Equalizer 8 Band", "Markus Schmidt", calf_plugins::calf_copyright_info, "EqualizerPlugin" };
-
-////////////////////////////////////////////////////////////////////////////
-
-CALF_PORT_NAMES(equalizer12band) = {"In L", "In R", "Out L", "Out R"};
-const char *rolloff_mode_names[] = {"12dB", "24dB", "36dB"};
-
-CALF_PORT_PROPS(equalizer12band) = {
- { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" },
- { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" },
- { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inL", "Input L" },
- { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inR", "Input R" },
- { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "Output L" },
- { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "Output R" },
- { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inL", "0dB" },
- { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inR", "0dB" },
- { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB" },
- { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB" },
-
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hp_active", "active" },
- { 30, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "hp_freq", "Freq" },
- { 1, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, rolloff_mode_names, "hf_rolloff", "Rolloff" },
-
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "lp_active", "active" },
- { 18000, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "lp_freq", "Freq" },
- { 1, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, rolloff_mode_names, "lf_rolloff", "Rolloff" },
-
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "ls_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "ls_level", "Level" },
- { 200, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "ls_freq", "Freq" },
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "ls_active", "active" },
-
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hs_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "hs_level", "Level" },
- { 4000, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "hs_freq", "Freq" },
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hs_active", "active" },
-
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p1_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p1_level", "Level" },
- { 60, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p1_freq", "Freq" },
- { 1, 0, 100, 1, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p1_q", "Q" },
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p2_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p2_level", "Level" },
- { 120, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p2_freq", "Freq" },
- { 1, 0, 100, 1, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p2_q", "Q" },
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p3_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p3_level", "Level" },
- { 250, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p3_freq", "Freq" },
- { 1, 0, 100, 1, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p3_q", "Q" },
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p4_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p4_level", "Level" },
- { 500, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p4_freq", "Freq" },
- { 1, 0, 100, 1, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p4_q", "Q" },
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p5_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p5_level", "Level" },
- { 1000, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p5_freq", "Freq" },
- { 1, 0, 100, 1, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p5_q", "Q" },
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p6_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p6_level", "Level" },
- { 2500, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p6_freq", "Freq" },
- { 1, 0, 100, 1, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p6_q", "Q" },
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p7_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p7_level", "Level" },
- { 4000, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p7_freq", "Freq" },
- { 1, 0, 100, 1, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p7_q", "Q" },
- { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p8_active", "active" },
- { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p8_level", "Level" },
- { 6000, 0, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p8_freq", "Freq" },
- { 1, 0, 100, 1, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p8_q", "Q" },
-};
-
-CALF_PLUGIN_INFO(equalizer12band) = { 0x8501, "Equalizer12Band", "Calf Equalizer 12 Band", "Markus Schmidt", calf_plugins::calf_copyright_info, "EqualizerPlugin" };
-
-////////////////////////////////////////////////////////////////////////////
-
CALF_PORT_NAMES(compressor) = {"In L", "In R", "Out L", "Out R"};
const char *compressor_detection_names[] = { "RMS", "Peak" };
@@ -440,8 +275,8 @@ CALF_PORT_PROPS(sidechaincompressor) = {
{ 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, sidechaincompressor_stereo_link_names, "stereo_link", "Stereo Link" },
{ 0, 0.03125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "compression", "Gain Reduction" },
{ 0, 0, 9, 0, PF_ENUM | PF_CTL_COMBO, sidechaincompressor_mode_names, "sc_mode", "Sidechain Mode" },
- { 250, 30,15000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "f1_freq", "Freq" },
- { 4500, 30,15000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "f2_freq", "Freq" },
+ { 250, 10,18000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "f1_freq", "Freq" },
+ { 4500, 10,18000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "f2_freq", "Freq" },
{ 1, 0.0625, 16, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "f1_level", "Level" },
{ 1, 0.0625, 16, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "f2_level", "Level" },
{ 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "sc_listen", "S/C-Listen" },
@@ -539,6 +374,166 @@ CALF_PLUGIN_INFO(multibandcompressor) = { 0x8502, "Multibandcompressor", "Calf M
////////////////////////////////////////////////////////////////////////////
+CALF_PORT_NAMES(equalizer5band) = {"In L", "In R", "Out L", "Out R"};
+
+CALF_PORT_PROPS(equalizer5band) = {
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" },
+ { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" },
+ { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_in", "Input" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_in", "0dB" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_out", "0dB" },
+
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "ls_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "ls_level", "Level" },
+ { 200, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "ls_freq", "Freq" },
+
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hs_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "hs_level", "Level" },
+ { 4000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "hs_freq", "Freq" },
+
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p1_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p1_level", "Level 1" },
+ { 250, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "p1_freq", "Freq 1" },
+ { 1, 0.1, 100, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p1_q", "Q 1" },
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p2_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p2_level", "Level 2" },
+ { 1000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p2_freq", "Freq 2" },
+ { 1, 0.1, 100, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p2_q", "Q 2" },
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p3_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p3_level", "Level 3" },
+ { 2500, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p3_freq", "Freq 3" },
+ { 1, 0.1, 100, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p3_q", "Q 3" },
+};
+
+CALF_PLUGIN_INFO(equalizer5band) = { 0x8501, "Equalizer5Band", "Calf Equalizer 5 Band", "Markus Schmidt", calf_plugins::calf_copyright_info, "EqualizerPlugin" };
+
+//////////////////////////////////////////////////////////////////////////////
+
+CALF_PORT_NAMES(equalizer8band) = {"In L", "In R", "Out L", "Out R"};
+const char *rolloff_mode_names[] = {"12dB", "24dB", "36dB"};
+
+CALF_PORT_PROPS(equalizer8band) = {
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" },
+ { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" },
+ { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inL", "L" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inR", "R" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "L" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "R" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inL", "0dB" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inR", "0dB" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB" },
+
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hp_active", "active" },
+ { 30, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "hp_freq", "Freq" },
+ { 1, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, rolloff_mode_names, "hp_mode", "Mode" },
+
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "lp_active", "active" },
+ { 18000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "lp_freq", "Freq" },
+ { 1, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, rolloff_mode_names, "lp_mode", "Mode" },
+
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "ls_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "ls_level", "Level" },
+ { 200, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "ls_freq", "Freq" },
+
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hs_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "hs_level", "Level" },
+ { 4000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "hs_freq", "Freq" },
+
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p1_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p1_level", "Level 1" },
+ { 250, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "p1_freq", "Freq 1" },
+ { 1, 0.1, 100, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p1_q", "Q 1" },
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p2_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p2_level", "Level 2" },
+ { 1000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p2_freq", "Freq 2" },
+ { 1, 0.1, 100, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p2_q", "Q 2" },
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p3_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p3_level", "Level 3" },
+ { 2500, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p3_freq", "Freq 3" },
+ { 1, 0.1, 100, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p3_q", "Q 3" },
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p4_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p4_level", "Level 4" },
+ { 5000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p4_freq", "Freq 4" },
+ { 1, 0.1, 100, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p4_q", "Q 4" },
+};
+
+CALF_PLUGIN_INFO(equalizer8band) = { 0x8501, "Equalizer8Band", "Calf Equalizer 8 Band", "Markus Schmidt", calf_plugins::calf_copyright_info, "EqualizerPlugin" };
+
+////////////////////////////////////////////////////////////////////////////
+
+CALF_PORT_NAMES(equalizer12band) = {"In L", "In R", "Out L", "Out R"};
+
+CALF_PORT_PROPS(equalizer12band) = {
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" },
+ { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" },
+ { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inL", "L" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inR", "R" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "L" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "R" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inL", "0dB" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inR", "0dB" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB" },
+
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hp_active", "active" },
+ { 30, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "hp_freq", "Freq" },
+ { 1, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, rolloff_mode_names, "hp_mode", "Mode" },
+
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "lp_active", "active" },
+ { 18000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "lp_freq", "Freq" },
+ { 1, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, rolloff_mode_names, "lp_mode", "Mode" },
+
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "ls_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "ls_level", "Level" },
+ { 200, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "ls_freq", "Freq" },
+
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hs_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "hs_level", "Level" },
+ { 4000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "hs_freq", "Freq" },
+
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p1_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p1_level", "Level 1" },
+ { 60, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "p1_freq", "Freq 1" },
+ { 1, 0.1, 100, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p1_q", "Q 1" },
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p2_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p2_level", "Level 2" },
+ { 120, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p2_freq", "Freq 2" },
+ { 1, 0.1, 100, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p2_q", "Q 2" },
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p3_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p3_level", "Level 3" },
+ { 250, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p3_freq", "Freq 3" },
+ { 1, 0.1, 100, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p3_q", "Q 3" },
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p4_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p4_level", "Level 4" },
+ { 500, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p4_freq", "Freq 4" },
+ { 1, 0.1, 100, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p4_q", "Q 4" },
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p5_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p5_level", "Level 5" },
+ { 1000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p5_freq", "Freq 5" },
+ { 1, 0.1, 100, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p5_q", "Q 5" },
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p6_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p6_level", "Level 6" },
+ { 2500, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p6_freq", "Freq 6" },
+ { 1, 0.1, 100, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p6_q", "Q 6" },
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p7_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p7_level", "Level 7" },
+ { 4000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p7_freq", "Freq 7" },
+ { 1, 0.1, 100, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p7_q", "Q 7" },
+ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p8_active", "active" },
+ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p8_level", "Level 8" },
+ { 6000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p8_freq", "Freq 8" },
+ { 1, 0.1, 100, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p8_q", "Q 8" },
+};
+
+CALF_PLUGIN_INFO(equalizer12band) = { 0x8501, "Equalizer12Band", "Calf Equalizer 12 Band", "Markus Schmidt", calf_plugins::calf_copyright_info, "EqualizerPlugin" };
+
+////////////////////////////////////////////////////////////////////////////
+
////////////////////////////////////////////////////////////////////////////
CALF_PORT_NAMES(monosynth) = {
diff --git a/src/modules_dsp.cpp b/src/modules_dsp.cpp
index 67c3e9b..131d036 100644
--- a/src/modules_dsp.cpp
+++ b/src/modules_dsp.cpp
@@ -1100,36 +1100,36 @@ void sidechaincompressor_audio_module::params_changed()
f2_active = 0.f;
break;
case DEESSER_WIDE:
- f1L.set_hp_rbj((float)*params[param_f1_freq], q, (float)srate, *params[param_f1_level]);
+ f1L.set_peakeq_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate);
f1R.copy_coeffs(f1L);
- f2L.set_peakeq_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate);
+ f2L.set_hp_rbj((float)*params[param_f2_freq], q, (float)srate, *params[param_f2_level]);
f2R.copy_coeffs(f2L);
- f1_active = 1.f;
- f2_active = 0.5f;
+ f1_active = 0.5f;
+ f2_active = 1.f;
break;
case DEESSER_SPLIT:
- f2L.set_hp_rbj((float)*params[param_f2_freq] * (1 - 0.17), q, (float)srate, *params[param_f1_level]);
- f2R.copy_coeffs(f1L);
- f1L.set_lp_rbj((float)*params[param_f2_freq] * (1 + 0.17), q, (float)srate);
- f1R.copy_coeffs(f2L);
- f2_active = 1.f;
+ f1L.set_lp_rbj((float)*params[param_f1_freq] * (1 + 0.17), q, (float)srate);
+ f1R.copy_coeffs(f1L);
+ f2L.set_hp_rbj((float)*params[param_f2_freq] * (1 - 0.17), q, (float)srate, *params[param_f2_level]);
+ f2R.copy_coeffs(f2L);
f1_active = 0.f;
+ f2_active = 1.f;
break;
case DERUMBLER_WIDE:
- f1L.set_peakeq_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate);
+ f1L.set_lp_rbj((float)*params[param_f1_freq], q, (float)srate, *params[param_f1_level]);
f1R.copy_coeffs(f1L);
- f2L.set_lp_rbj((float)*params[param_f2_freq], q, (float)srate, *params[param_f2_level]);
+ f2L.set_peakeq_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate);
f2R.copy_coeffs(f2L);
- f1_active = 0.5f;
- f2_active = 1.f;
+ f1_active = 1.f;
+ f2_active = 0.5f;
break;
case DERUMBLER_SPLIT:
- f2L.set_hp_rbj((float)*params[param_f1_freq] * (1 - 0.17), q, (float)srate);
- f2R.copy_coeffs(f1L);
- f1L.set_lp_rbj((float)*params[param_f1_freq] * (1 + 0.17), q, (float)srate, *params[param_f2_level]);
- f1R.copy_coeffs(f2L);
- f2_active = 0.f;
+ f1L.set_lp_rbj((float)*params[param_f1_freq] * (1 + 0.17), q, (float)srate, *params[param_f1_level]);
+ f1R.copy_coeffs(f1L);
+ f2L.set_hp_rbj((float)*params[param_f2_freq] * (1 - 0.17), q, (float)srate);
+ f2R.copy_coeffs(f2L);
f1_active = 1.f;
+ f2_active = 0.f;
break;
case WEIGHTED_1:
f1L.set_lowshelf_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate);
@@ -1631,3 +1631,1092 @@ int gain_reduction_audio_module::get_changed_offsets(int generation, int &subind
subindex_graph = 2;
return last_generation;
}
+
+/// Equalizer 12 Band by Markus Schmidt
+///
+/// This module is based on Krzysztof's filters. It provides a couple
+/// of different chained filters.
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+equalizer12band_audio_module::equalizer12band_audio_module()
+{
+ is_active = false;
+ srate = 0;
+ last_generation = 0;
+ clip_inL = 0.f;
+ clip_inR = 0.f;
+ clip_outL = 0.f;
+ clip_outR = 0.f;
+ meter_inL = 0.f;
+ meter_inR = 0.f;
+ meter_outL = 0.f;
+ meter_outR = 0.f;
+}
+
+void equalizer12band_audio_module::activate()
+{
+ is_active = true;
+ // set all filters
+ params_changed();
+}
+void equalizer12band_audio_module::deactivate()
+{
+ is_active = false;
+}
+
+void equalizer12band_audio_module::params_changed()
+{
+ // set the params of all filters
+ if(*params[param_hp_freq] != hp_freq_old) {
+ hpL[0].set_hp_rbj(*params[param_hp_freq], 0.707, (float)srate, 1.0);
+ hpL[1].copy_coeffs(hpL[0]);
+ hpL[2].copy_coeffs(hpL[0]);
+ hpR[0].copy_coeffs(hpL[0]);
+ hpR[1].copy_coeffs(hpL[0]);
+ hpR[2].copy_coeffs(hpL[0]);
+ hp_freq_old = *params[param_hp_freq];
+ }
+ if(*params[param_lp_freq] != lp_freq_old) {
+ lpL[0].set_lp_rbj(*params[param_lp_freq], 0.707, (float)srate, 1.0);
+ lpL[1].copy_coeffs(lpL[0]);
+ lpL[2].copy_coeffs(lpL[0]);
+ lpR[0].copy_coeffs(lpL[0]);
+ lpR[1].copy_coeffs(lpL[0]);
+ lpR[2].copy_coeffs(lpL[0]);
+ lp_freq_old = *params[param_lp_freq];
+ }
+ if(*params[param_ls_freq] != ls_freq_old or *params[param_ls_level] != ls_level_old) {
+ lsL.set_lowshelf_rbj(*params[param_ls_freq], 0.707, *params[param_ls_level], (float)srate);
+ lsR.copy_coeffs(lsL);
+ ls_level_old = *params[param_ls_level];
+ ls_freq_old = *params[param_ls_freq];
+ }
+ if(*params[param_hs_freq] != hs_freq_old or *params[param_hs_level] != hs_level_old) {
+ hsL.set_highshelf_rbj(*params[param_hs_freq], 0.707, *params[param_hs_level], (float)srate);
+ hsR.copy_coeffs(hsL);
+ hs_level_old = *params[param_hs_level];
+ hs_freq_old = *params[param_hs_freq];
+ }
+ if(*params[param_p1_freq] != p_freq_old[0] or *params[param_p1_level] != p_level_old[0] or *params[param_p1_q] != p_q_old[0]) {
+ pL[0].set_peakeq_rbj((float)*params[param_p1_freq], *params[param_p1_q], *params[param_p1_level], (float)srate);
+ pR[0].copy_coeffs(pL[0]);
+ p_freq_old[0] = *params[param_p1_freq];
+ p_level_old[0] = *params[param_p1_level];
+ p_q_old[0] = *params[param_p1_q];
+ }
+ if(*params[param_p2_freq] != p_freq_old[1] or *params[param_p2_level] != p_level_old[1] or *params[param_p2_q] != p_q_old[1]) {
+ pL[1].set_peakeq_rbj((float)*params[param_p2_freq], *params[param_p2_q], *params[param_p2_level], (float)srate);
+ pR[1].copy_coeffs(pL[1]);
+ p_freq_old[1] = *params[param_p2_freq];
+ p_level_old[1] = *params[param_p2_level];
+ p_q_old[1] = *params[param_p2_q];
+ }
+ if(*params[param_p3_freq] != p_freq_old[2] or *params[param_p3_level] != p_level_old[2] or *params[param_p3_q] != p_q_old[2]) {
+ pL[2].set_peakeq_rbj((float)*params[param_p3_freq], *params[param_p3_q], *params[param_p3_level], (float)srate);
+ pR[2].copy_coeffs(pL[2]);
+ p_freq_old[2] = *params[param_p3_freq];
+ p_level_old[2] = *params[param_p3_level];
+ p_q_old[2] = *params[param_p3_q];
+ }
+ if(*params[param_p4_freq] != p_freq_old[3] or *params[param_p4_level] != p_level_old[3] or *params[param_p4_q] != p_q_old[3]) {
+ pL[3].set_peakeq_rbj((float)*params[param_p4_freq], *params[param_p4_q], *params[param_p4_level], (float)srate);
+ pR[3].copy_coeffs(pL[3]);
+ p_freq_old[3] = *params[param_p4_freq];
+ p_level_old[3] = *params[param_p4_level];
+ p_q_old[3] = *params[param_p4_q];
+ }
+ if(*params[param_p5_freq] != p_freq_old[4] or *params[param_p5_level] != p_level_old[4] or *params[param_p5_q] != p_q_old[4]) {
+ pL[4].set_peakeq_rbj((float)*params[param_p5_freq], *params[param_p5_q], *params[param_p5_level], (float)srate);
+ pR[4].copy_coeffs(pL[4]);
+ p_freq_old[4] = *params[param_p5_freq];
+ p_level_old[4] = *params[param_p5_level];
+ p_q_old[4] = *params[param_p5_q];
+ }
+ if(*params[param_p6_freq] != p_freq_old[5] or *params[param_p6_level] != p_level_old[5] or *params[param_p6_q] != p_q_old[5]) {
+ pL[5].set_peakeq_rbj((float)*params[param_p6_freq], *params[param_p6_q], *params[param_p6_level], (float)srate);
+ pR[5].copy_coeffs(pL[5]);
+ p_freq_old[5] = *params[param_p6_freq];
+ p_level_old[5] = *params[param_p6_level];
+ p_q_old[5] = *params[param_p6_q];
+ }
+ if(*params[param_p7_freq] != p_freq_old[6] or *params[param_p7_level] != p_level_old[6] or *params[param_p7_q] != p_q_old[6]) {
+ pL[6].set_peakeq_rbj((float)*params[param_p7_freq], *params[param_p7_q], *params[param_p7_level], (float)srate);
+ pR[6].copy_coeffs(pL[6]);
+ p_freq_old[6] = *params[param_p7_freq];
+ p_level_old[6] = *params[param_p7_level];
+ p_q_old[6] = *params[param_p7_q];
+ }
+ if(*params[param_p8_freq] != p_freq_old[7] or *params[param_p8_level] != p_level_old[7] or *params[param_p8_q] != p_q_old[7]) {
+ pL[7].set_peakeq_rbj((float)*params[param_p8_freq], *params[param_p8_q], *params[param_p8_level], (float)srate);
+ pR[7].copy_coeffs(pL[7]);
+ p_freq_old[7] = *params[param_p8_freq];
+ p_level_old[7] = *params[param_p8_level];
+ p_q_old[7] = *params[param_p8_q];
+ }
+}
+
+void equalizer12band_audio_module::set_sample_rate(uint32_t sr)
+{
+ srate = sr;
+}
+
+uint32_t equalizer12band_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
+{
+ bool bypass = *params[param_bypass] > 0.5f;
+ numsamples += offset;
+ if(bypass) {
+ // everything bypassed
+ while(offset < numsamples) {
+ outs[0][offset] = ins[0][offset];
+ outs[1][offset] = ins[1][offset];
+ ++offset;
+ }
+ // displays, too
+ clip_inL = 0.f;
+ clip_inR = 0.f;
+ clip_outL = 0.f;
+ clip_outR = 0.f;
+ meter_inL = 0.f;
+ meter_inR = 0.f;
+ meter_outL = 0.f;
+ meter_outR = 0.f;
+ } else {
+
+ clip_inL -= std::min(clip_inL, numsamples);
+ clip_inR -= std::min(clip_inR, numsamples);
+ clip_outL -= std::min(clip_outL, numsamples);
+ clip_outR -= std::min(clip_outR, numsamples);
+ meter_inL = 0.f;
+ meter_inR = 0.f;
+ meter_outL = 0.f;
+ meter_outR = 0.f;
+
+ // process
+ while(offset < numsamples) {
+ // cycle through samples
+ float outL = 0.f;
+ float outR = 0.f;
+ float inL = ins[0][offset];
+ float inR = ins[1][offset];
+ // in level
+ inR *= *params[param_level_in];
+ inL *= *params[param_level_in];
+
+ float procL = inL;
+ float procR = inR;
+
+ // all filters in chain
+ if(*params[param_hp_active] > 0.f) {
+ switch((int)*params[param_hp_mode]) {
+ case MODE12DB:
+ procL = hpL[0].process(procL);
+ procR = hpR[0].process(procR);
+ break;
+ case MODE24DB:
+ procL = hpL[1].process(hpL[0].process(procL));
+ procR = hpR[1].process(hpR[0].process(procR));
+ break;
+ case MODE36DB:
+ procL = hpL[2].process(hpL[1].process(hpL[0].process(procL)));
+ procR = hpR[2].process(hpR[1].process(hpR[0].process(procR)));
+ break;
+ }
+ }
+ if(*params[param_lp_active] > 0.f) {
+ switch((int)*params[param_lp_mode]) {
+ case MODE12DB:
+ procL = lpL[0].process(procL);
+ procR = lpR[0].process(procR);
+ break;
+ case MODE24DB:
+ procL = lpL[1].process(lpL[0].process(procL));
+ procR = lpR[1].process(lpR[0].process(procR));
+ break;
+ case MODE36DB:
+ procL = lpL[2].process(lpL[1].process(lpL[0].process(procL)));
+ procR = lpR[2].process(lpR[1].process(lpR[0].process(procR)));
+ break;
+ }
+ }
+ if(*params[param_ls_active] > 0.f) {
+ procL = lsL.process(procL);
+ procR = lsR.process(procR);
+ }
+ if(*params[param_hs_active] > 0.f) {
+ procL = hsL.process(procL);
+ procR = hsR.process(procR);
+ }
+ if(*params[param_p1_active] > 0.f) {
+ procL = pL[0].process(procL);
+ procR = pR[0].process(procR);
+ }
+ if(*params[param_p2_active] > 0.f) {
+ procL = pL[1].process(procL);
+ procR = pR[1].process(procR);
+ }
+ if(*params[param_p3_active] > 0.f) {
+ procL = pL[2].process(procL);
+ procR = pR[2].process(procR);
+ }
+ if(*params[param_p4_active] > 0.f) {
+ procL = pL[3].process(procL);
+ procR = pR[3].process(procR);
+ }
+ if(*params[param_p5_active] > 0.f) {
+ procL = pL[4].process(procL);
+ procR = pR[4].process(procR);
+ }
+ if(*params[param_p6_active] > 0.f) {
+ procL = pL[5].process(procL);
+ procR = pR[5].process(procR);
+ }
+ if(*params[param_p7_active] > 0.f) {
+ procL = pL[6].process(procL);
+ procR = pR[6].process(procR);
+ }
+ if(*params[param_p8_active] > 0.f) {
+ procL = pL[7].process(procL);
+ procR = pR[7].process(procR);
+ }
+
+ outL = procL * *params[param_level_out];
+ outR = procR * *params[param_level_out];
+
+ // send to output
+ outs[0][offset] = outL;
+ outs[1][offset] = outR;
+
+ // clip LED's
+ if(inL > 1.f) {
+ clip_inL = srate >> 3;
+ }
+ if(inR > 1.f) {
+ clip_inR = srate >> 3;
+ }
+ if(outL > 1.f) {
+ clip_outL = srate >> 3;
+ }
+ if(outR > 1.f) {
+ clip_outR = srate >> 3;
+ }
+ // set up in / out meters
+ if(inL > meter_inL) {
+ meter_inL = inL;
+ }
+ if(inR > meter_inR) {
+ meter_inR = inR;
+ }
+ if(outL > meter_outL) {
+ meter_outL = outL;
+ }
+ if(outR > meter_outR) {
+ meter_outR = outR;
+ }
+
+ // next sample
+ ++offset;
+ } // cycle trough samples
+ // clean up
+ for(int i = 0; i < 3; ++i) {
+ hpL[i].sanitize();
+ hpR[i].sanitize();
+ lpL[i].sanitize();
+ lpR[i].sanitize();
+ }
+ lsL.sanitize();
+ hsR.sanitize();
+ for(int i = 0; i < 8; ++i) {
+ pL[i].sanitize();
+ pR[i].sanitize();
+ }
+ }
+ // draw meters
+ if(params[param_clip_inL] != NULL) {
+ *params[param_clip_inL] = clip_inL;
+ }
+ if(params[param_clip_inR] != NULL) {
+ *params[param_clip_inR] = clip_inR;
+ }
+ if(params[param_clip_outL] != NULL) {
+ *params[param_clip_outL] = clip_outL;
+ }
+ if(params[param_clip_outR] != NULL) {
+ *params[param_clip_outR] = clip_outR;
+ }
+
+ if(params[param_meter_inL] != NULL) {
+ *params[param_meter_inL] = meter_inL;
+ }
+ if(params[param_meter_inR] != NULL) {
+ *params[param_meter_inR] = meter_inR;
+ }
+ if(params[param_meter_outL] != NULL) {
+ *params[param_meter_outL] = meter_outL;
+ }
+ if(params[param_meter_outR] != NULL) {
+ *params[param_meter_outR] = meter_outR;
+ }
+ // whatever has to be returned x)
+ return outputs_mask;
+}
+bool equalizer12band_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context)
+{
+ if (!is_active)
+ return false;
+ if (index == param_p1_freq && !subindex) {
+ context->set_line_width(1.5);
+ return ::get_graph(*this, subindex, data, points);
+ }
+ return false;
+}
+
+bool equalizer12band_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context)
+{
+ if (!is_active) {
+ return false;
+ } else {
+ return get_freq_gridline(subindex, pos, vertical, legend, context);
+ }
+}
+
+int equalizer12band_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline)
+{
+ if (!is_active) {
+ return false;
+ } else {
+ if (*params[param_hp_freq] != hp_freq_old1
+ or *params[param_hp_mode] != hp_mode_old1
+ or *params[param_lp_freq] != lp_freq_old1
+ or *params[param_lp_mode] != lp_mode_old1
+
+ or *params[param_ls_freq] != ls_freq_old1
+ or *params[param_ls_level] != ls_level_old1
+ or *params[param_hs_freq] != hs_freq_old1
+ or *params[param_hs_level] != hs_level_old1
+
+ or *params[param_p1_freq] != p_freq_old1[0]
+ or *params[param_p1_level] != p_level_old1[0]
+ or *params[param_p1_q] != p_q_old1[0]
+
+ or *params[param_p2_freq] != p_freq_old1[1]
+ or *params[param_p2_level] != p_level_old1[1]
+ or *params[param_p2_q] != p_q_old1[1]
+
+ or *params[param_p3_freq] != p_freq_old1[2]
+ or *params[param_p3_level] != p_level_old1[2]
+ or *params[param_p3_q] != p_q_old1[2]
+
+ or *params[param_p4_freq] != p_freq_old1[3]
+ or *params[param_p4_level] != p_level_old1[3]
+ or *params[param_p4_q] != p_q_old1[3]
+
+ or *params[param_p5_freq] != p_freq_old1[4]
+ or *params[param_p5_level] != p_level_old1[4]
+ or *params[param_p5_q] != p_q_old1[4]
+
+ or *params[param_p6_freq] != p_freq_old1[5]
+ or *params[param_p6_level] != p_level_old1[5]
+ or *params[param_p6_q] != p_q_old1[5]
+
+ or *params[param_p7_freq] != p_freq_old1[6]
+ or *params[param_p7_level] != p_level_old1[6]
+ or *params[param_p7_q] != p_q_old1[6]
+
+ or *params[param_p8_freq] != p_freq_old1[7]
+ or *params[param_p8_level] != p_level_old1[7]
+ or *params[param_p8_q] != p_q_old1[7])
+ {
+
+ hp_freq_old1 = *params[param_hp_freq];
+ hp_mode_old1 = *params[param_hp_mode];
+ lp_freq_old1 = *params[param_lp_freq];
+ lp_mode_old1 = *params[param_lp_mode];
+
+ ls_freq_old1 = *params[param_ls_freq];
+ ls_level_old1 = *params[param_ls_level];
+ hs_freq_old1 = *params[param_hs_freq];
+ hs_level_old1 = *params[param_hs_level];
+
+ p_freq_old1[0] = *params[param_p1_freq];
+ p_level_old1[0] = *params[param_p1_level];
+ p_q_old1[0] = *params[param_p1_q];
+
+ p_freq_old1[1] = *params[param_p2_freq];
+ p_level_old1[1] = *params[param_p2_level];
+ p_q_old1[1] = *params[param_p2_q];
+
+ p_freq_old1[2] = *params[param_p3_freq];
+ p_level_old1[2] = *params[param_p3_level];
+ p_q_old1[2] = *params[param_p3_q];
+
+ p_freq_old1[3] = *params[param_p4_freq];
+ p_level_old1[3] = *params[param_p4_level];
+ p_q_old1[3] = *params[param_p4_q];
+
+ p_freq_old1[4] = *params[param_p5_freq];
+ p_level_old1[4] = *params[param_p5_level];
+ p_q_old1[4] = *params[param_p5_q];
+
+ p_freq_old1[5] = *params[param_p6_freq];
+ p_level_old1[5] = *params[param_p6_level];
+ p_q_old1[5] = *params[param_p6_q];
+
+ p_freq_old1[6] = *params[param_p7_freq];
+ p_level_old1[6] = *params[param_p7_level];
+ p_q_old1[6] = *params[param_p7_q];
+
+ p_freq_old1[7] = *params[param_p8_freq];
+ p_level_old1[7] = *params[param_p8_level];
+ p_q_old1[7] = *params[param_p8_q];
+
+ last_generation++;
+ subindex_graph = 0;
+ subindex_dot = INT_MAX;
+ subindex_gridline = INT_MAX;
+ }
+ else {
+ subindex_graph = 0;
+ subindex_dot = subindex_gridline = generation ? INT_MAX : 0;
+ }
+ if (generation == last_calculated_generation)
+ subindex_graph = INT_MAX;
+ return last_generation;
+ }
+ return false;
+}
+
+/// Equalizer 8 Band by Markus Schmidt
+///
+/// This module is based on Krzysztof's filters. It provides a couple
+/// of different chained filters.
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+equalizer8band_audio_module::equalizer8band_audio_module()
+{
+ is_active = false;
+ srate = 0;
+ last_generation = 0;
+ clip_inL = 0.f;
+ clip_inR = 0.f;
+ clip_outL = 0.f;
+ clip_outR = 0.f;
+ meter_inL = 0.f;
+ meter_inR = 0.f;
+ meter_outL = 0.f;
+ meter_outR = 0.f;
+}
+
+void equalizer8band_audio_module::activate()
+{
+ is_active = true;
+ // set all filters
+ params_changed();
+}
+void equalizer8band_audio_module::deactivate()
+{
+ is_active = false;
+}
+
+void equalizer8band_audio_module::params_changed()
+{
+ // set the params of all filters
+ if(*params[param_hp_freq] != hp_freq_old) {
+ hpL[0].set_hp_rbj(*params[param_hp_freq], 0.707, (float)srate, 1.0);
+ hpL[1].copy_coeffs(hpL[0]);
+ hpL[2].copy_coeffs(hpL[0]);
+ hpR[0].copy_coeffs(hpL[0]);
+ hpR[1].copy_coeffs(hpL[0]);
+ hpR[2].copy_coeffs(hpL[0]);
+ hp_freq_old = *params[param_hp_freq];
+ }
+ if(*params[param_lp_freq] != lp_freq_old) {
+ lpL[0].set_lp_rbj(*params[param_lp_freq], 0.707, (float)srate, 1.0);
+ lpL[1].copy_coeffs(lpL[0]);
+ lpL[2].copy_coeffs(lpL[0]);
+ lpR[0].copy_coeffs(lpL[0]);
+ lpR[1].copy_coeffs(lpL[0]);
+ lpR[2].copy_coeffs(lpL[0]);
+ lp_freq_old = *params[param_lp_freq];
+ }
+ if(*params[param_ls_freq] != ls_freq_old or *params[param_ls_level] != ls_level_old) {
+ lsL.set_lowshelf_rbj(*params[param_ls_freq], 0.707, *params[param_ls_level], (float)srate);
+ lsR.copy_coeffs(lsL);
+ ls_level_old = *params[param_ls_level];
+ ls_freq_old = *params[param_ls_freq];
+ }
+ if(*params[param_hs_freq] != hs_freq_old or *params[param_hs_level] != hs_level_old) {
+ hsL.set_highshelf_rbj(*params[param_hs_freq], 0.707, *params[param_hs_level], (float)srate);
+ hsR.copy_coeffs(hsL);
+ hs_level_old = *params[param_hs_level];
+ hs_freq_old = *params[param_hs_freq];
+ }
+ if(*params[param_p1_freq] != p_freq_old[0] or *params[param_p1_level] != p_level_old[0] or *params[param_p1_q] != p_q_old[0]) {
+ pL[0].set_peakeq_rbj((float)*params[param_p1_freq], *params[param_p1_q], *params[param_p1_level], (float)srate);
+ pR[0].copy_coeffs(pL[0]);
+ p_freq_old[0] = *params[param_p1_freq];
+ p_level_old[0] = *params[param_p1_level];
+ p_q_old[0] = *params[param_p1_q];
+ }
+ if(*params[param_p2_freq] != p_freq_old[1] or *params[param_p2_level] != p_level_old[1] or *params[param_p2_q] != p_q_old[1]) {
+ pL[1].set_peakeq_rbj((float)*params[param_p2_freq], *params[param_p2_q], *params[param_p2_level], (float)srate);
+ pR[1].copy_coeffs(pL[1]);
+ p_freq_old[1] = *params[param_p2_freq];
+ p_level_old[1] = *params[param_p2_level];
+ p_q_old[1] = *params[param_p2_q];
+ }
+ if(*params[param_p3_freq] != p_freq_old[2] or *params[param_p3_level] != p_level_old[2] or *params[param_p3_q] != p_q_old[2]) {
+ pL[2].set_peakeq_rbj((float)*params[param_p3_freq], *params[param_p3_q], *params[param_p3_level], (float)srate);
+ pR[2].copy_coeffs(pL[2]);
+ p_freq_old[2] = *params[param_p3_freq];
+ p_level_old[2] = *params[param_p3_level];
+ p_q_old[2] = *params[param_p3_q];
+ }
+ if(*params[param_p4_freq] != p_freq_old[3] or *params[param_p4_level] != p_level_old[3] or *params[param_p4_q] != p_q_old[3]) {
+ pL[3].set_peakeq_rbj((float)*params[param_p4_freq], *params[param_p4_q], *params[param_p4_level], (float)srate);
+ pR[3].copy_coeffs(pL[3]);
+ p_freq_old[3] = *params[param_p4_freq];
+ p_level_old[3] = *params[param_p4_level];
+ p_q_old[3] = *params[param_p4_q];
+ }
+}
+
+void equalizer8band_audio_module::set_sample_rate(uint32_t sr)
+{
+ srate = sr;
+}
+
+uint32_t equalizer8band_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
+{
+ bool bypass = *params[param_bypass] > 0.5f;
+ numsamples += offset;
+ if(bypass) {
+ // everything bypassed
+ while(offset < numsamples) {
+ outs[0][offset] = ins[0][offset];
+ outs[1][offset] = ins[1][offset];
+ ++offset;
+ }
+ // displays, too
+ clip_inL = 0.f;
+ clip_inR = 0.f;
+ clip_outL = 0.f;
+ clip_outR = 0.f;
+ meter_inL = 0.f;
+ meter_inR = 0.f;
+ meter_outL = 0.f;
+ meter_outR = 0.f;
+ } else {
+
+ clip_inL -= std::min(clip_inL, numsamples);
+ clip_inR -= std::min(clip_inR, numsamples);
+ clip_outL -= std::min(clip_outL, numsamples);
+ clip_outR -= std::min(clip_outR, numsamples);
+ meter_inL = 0.f;
+ meter_inR = 0.f;
+ meter_outL = 0.f;
+ meter_outR = 0.f;
+
+ // process
+ while(offset < numsamples) {
+ // cycle through samples
+ float outL = 0.f;
+ float outR = 0.f;
+ float inL = ins[0][offset];
+ float inR = ins[1][offset];
+ // in level
+ inR *= *params[param_level_in];
+ inL *= *params[param_level_in];
+
+ float procL = inL;
+ float procR = inR;
+
+ // all filters in chain
+ if(*params[param_hp_active] > 0.f) {
+ switch((int)*params[param_hp_mode]) {
+ case MODE12DB:
+ procL = hpL[0].process(procL);
+ procR = hpR[0].process(procR);
+ break;
+ case MODE24DB:
+ procL = hpL[1].process(hpL[0].process(procL));
+ procR = hpR[1].process(hpR[0].process(procR));
+ break;
+ case MODE36DB:
+ procL = hpL[2].process(hpL[1].process(hpL[0].process(procL)));
+ procR = hpR[2].process(hpR[1].process(hpR[0].process(procR)));
+ break;
+ }
+ }
+ if(*params[param_lp_active] > 0.f) {
+ switch((int)*params[param_lp_mode]) {
+ case MODE12DB:
+ procL = lpL[0].process(procL);
+ procR = lpR[0].process(procR);
+ break;
+ case MODE24DB:
+ procL = lpL[1].process(lpL[0].process(procL));
+ procR = lpR[1].process(lpR[0].process(procR));
+ break;
+ case MODE36DB:
+ procL = lpL[2].process(lpL[1].process(lpL[0].process(procL)));
+ procR = lpR[2].process(lpR[1].process(lpR[0].process(procR)));
+ break;
+ }
+ }
+ if(*params[param_ls_active] > 0.f) {
+ procL = lsL.process(procL);
+ procR = lsR.process(procR);
+ }
+ if(*params[param_hs_active] > 0.f) {
+ procL = hsL.process(procL);
+ procR = hsR.process(procR);
+ }
+ if(*params[param_p1_active] > 0.f) {
+ procL = pL[0].process(procL);
+ procR = pR[0].process(procR);
+ }
+ if(*params[param_p2_active] > 0.f) {
+ procL = pL[1].process(procL);
+ procR = pR[1].process(procR);
+ }
+ if(*params[param_p3_active] > 0.f) {
+ procL = pL[2].process(procL);
+ procR = pR[2].process(procR);
+ }
+ if(*params[param_p4_active] > 0.f) {
+ procL = pL[3].process(procL);
+ procR = pR[3].process(procR);
+ }
+
+ outL = procL * *params[param_level_out];
+ outR = procR * *params[param_level_out];
+
+ // send to output
+ outs[0][offset] = outL;
+ outs[1][offset] = outR;
+
+ // clip LED's
+ if(inL > 1.f) {
+ clip_inL = srate >> 3;
+ }
+ if(inR > 1.f) {
+ clip_inR = srate >> 3;
+ }
+ if(outL > 1.f) {
+ clip_outL = srate >> 3;
+ }
+ if(outR > 1.f) {
+ clip_outR = srate >> 3;
+ }
+ // set up in / out meters
+ if(inL > meter_inL) {
+ meter_inL = inL;
+ }
+ if(inR > meter_inR) {
+ meter_inR = inR;
+ }
+ if(outL > meter_outL) {
+ meter_outL = outL;
+ }
+ if(outR > meter_outR) {
+ meter_outR = outR;
+ }
+
+ // next sample
+ ++offset;
+ } // cycle trough samples
+ // clean up
+ for(int i = 0; i < 3; ++i) {
+ hpL[i].sanitize();
+ hpR[i].sanitize();
+ lpL[i].sanitize();
+ lpR[i].sanitize();
+ }
+ lsL.sanitize();
+ hsR.sanitize();
+ for(int i = 0; i < 4; ++i) {
+ pL[i].sanitize();
+ pR[i].sanitize();
+ }
+ }
+ // draw meters
+ if(params[param_clip_inL] != NULL) {
+ *params[param_clip_inL] = clip_inL;
+ }
+ if(params[param_clip_inR] != NULL) {
+ *params[param_clip_inR] = clip_inR;
+ }
+ if(params[param_clip_outL] != NULL) {
+ *params[param_clip_outL] = clip_outL;
+ }
+ if(params[param_clip_outR] != NULL) {
+ *params[param_clip_outR] = clip_outR;
+ }
+
+ if(params[param_meter_inL] != NULL) {
+ *params[param_meter_inL] = meter_inL;
+ }
+ if(params[param_meter_inR] != NULL) {
+ *params[param_meter_inR] = meter_inR;
+ }
+ if(params[param_meter_outL] != NULL) {
+ *params[param_meter_outL] = meter_outL;
+ }
+ if(params[param_meter_outR] != NULL) {
+ *params[param_meter_outR] = meter_outR;
+ }
+ // whatever has to be returned x)
+ return outputs_mask;
+}
+bool equalizer8band_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context)
+{
+ if (!is_active)
+ return false;
+ if (index == param_p1_freq && !subindex) {
+ context->set_line_width(1.5);
+ return ::get_graph(*this, subindex, data, points);
+ }
+ return false;
+}
+
+bool equalizer8band_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context)
+{
+ if (!is_active) {
+ return false;
+ } else {
+ return get_freq_gridline(subindex, pos, vertical, legend, context);
+ }
+}
+
+int equalizer8band_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline)
+{
+ if (!is_active) {
+ return false;
+ } else {
+ if (*params[param_hp_freq] != hp_freq_old1
+ or *params[param_hp_mode] != hp_mode_old1
+ or *params[param_lp_freq] != lp_freq_old1
+ or *params[param_lp_mode] != lp_mode_old1
+
+ or *params[param_ls_freq] != ls_freq_old1
+ or *params[param_ls_level] != ls_level_old1
+ or *params[param_hs_freq] != hs_freq_old1
+ or *params[param_hs_level] != hs_level_old1
+
+ or *params[param_p1_freq] != p_freq_old1[0]
+ or *params[param_p1_level] != p_level_old1[0]
+ or *params[param_p1_q] != p_q_old1[0]
+
+ or *params[param_p2_freq] != p_freq_old1[1]
+ or *params[param_p2_level] != p_level_old1[1]
+ or *params[param_p2_q] != p_q_old1[1]
+
+ or *params[param_p3_freq] != p_freq_old1[2]
+ or *params[param_p3_level] != p_level_old1[2]
+ or *params[param_p3_q] != p_q_old1[2]
+
+ or *params[param_p4_freq] != p_freq_old1[3]
+ or *params[param_p4_level] != p_level_old1[3]
+ or *params[param_p4_q] != p_q_old1[3])
+ {
+
+ hp_freq_old1 = *params[param_hp_freq];
+ hp_mode_old1 = *params[param_hp_mode];
+ lp_freq_old1 = *params[param_lp_freq];
+ lp_mode_old1 = *params[param_lp_mode];
+
+ ls_freq_old1 = *params[param_ls_freq];
+ ls_level_old1 = *params[param_ls_level];
+ hs_freq_old1 = *params[param_hs_freq];
+ hs_level_old1 = *params[param_hs_level];
+
+ p_freq_old1[0] = *params[param_p1_freq];
+ p_level_old1[0] = *params[param_p1_level];
+ p_q_old1[0] = *params[param_p1_q];
+
+ p_freq_old1[1] = *params[param_p2_freq];
+ p_level_old1[1] = *params[param_p2_level];
+ p_q_old1[1] = *params[param_p2_q];
+
+ p_freq_old1[2] = *params[param_p3_freq];
+ p_level_old1[2] = *params[param_p3_level];
+ p_q_old1[2] = *params[param_p3_q];
+
+ p_freq_old1[3] = *params[param_p4_freq];
+ p_level_old1[3] = *params[param_p4_level];
+ p_q_old1[3] = *params[param_p4_q];
+
+ last_generation++;
+ subindex_graph = 0;
+ subindex_dot = INT_MAX;
+ subindex_gridline = INT_MAX;
+ }
+ else {
+ subindex_graph = 0;
+ subindex_dot = subindex_gridline = generation ? INT_MAX : 0;
+ }
+ if (generation == last_calculated_generation)
+ subindex_graph = INT_MAX;
+ return last_generation;
+ }
+ return false;
+}
+
+/// Equalizer 5 Band by Markus Schmidt
+///
+/// This module is based on Krzysztof's filters. It provides a couple
+/// of different chained filters.
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+equalizer5band_audio_module::equalizer5band_audio_module()
+{
+ is_active = false;
+ srate = 0;
+ last_generation = 0;
+ clip_in = 0.f;
+ clip_out = 0.f;
+ meter_in = 0.f;
+ meter_out = 0.f;
+}
+
+void equalizer5band_audio_module::activate()
+{
+ is_active = true;
+ // set all filters
+ params_changed();
+}
+void equalizer5band_audio_module::deactivate()
+{
+ is_active = false;
+}
+
+void equalizer5band_audio_module::params_changed()
+{
+ // set the params of all filters
+ if(*params[param_ls_freq] != ls_freq_old or *params[param_ls_level] != ls_level_old) {
+ lsL.set_lowshelf_rbj(*params[param_ls_freq], 0.707, *params[param_ls_level], (float)srate);
+ lsR.copy_coeffs(lsL);
+ ls_level_old = *params[param_ls_level];
+ ls_freq_old = *params[param_ls_freq];
+ }
+ if(*params[param_hs_freq] != hs_freq_old or *params[param_hs_level] != hs_level_old) {
+ hsL.set_highshelf_rbj(*params[param_hs_freq], 0.707, *params[param_hs_level], (float)srate);
+ hsR.copy_coeffs(hsL);
+ hs_level_old = *params[param_hs_level];
+ hs_freq_old = *params[param_hs_freq];
+ }
+ if(*params[param_p1_freq] != p_freq_old[0] or *params[param_p1_level] != p_level_old[0] or *params[param_p1_q] != p_q_old[0]) {
+ pL[0].set_peakeq_rbj((float)*params[param_p1_freq], *params[param_p1_q], *params[param_p1_level], (float)srate);
+ pR[0].copy_coeffs(pL[0]);
+ p_freq_old[0] = *params[param_p1_freq];
+ p_level_old[0] = *params[param_p1_level];
+ p_q_old[0] = *params[param_p1_q];
+ }
+ if(*params[param_p2_freq] != p_freq_old[1] or *params[param_p2_level] != p_level_old[1] or *params[param_p2_q] != p_q_old[1]) {
+ pL[1].set_peakeq_rbj((float)*params[param_p2_freq], *params[param_p2_q], *params[param_p2_level], (float)srate);
+ pR[1].copy_coeffs(pL[1]);
+ p_freq_old[1] = *params[param_p2_freq];
+ p_level_old[1] = *params[param_p2_level];
+ p_q_old[1] = *params[param_p2_q];
+ }
+ if(*params[param_p3_freq] != p_freq_old[2] or *params[param_p3_level] != p_level_old[2] or *params[param_p3_q] != p_q_old[2]) {
+ pL[2].set_peakeq_rbj((float)*params[param_p3_freq], *params[param_p3_q], *params[param_p3_level], (float)srate);
+ pR[2].copy_coeffs(pL[2]);
+ p_freq_old[2] = *params[param_p3_freq];
+ p_level_old[2] = *params[param_p3_level];
+ p_q_old[2] = *params[param_p3_q];
+ }
+}
+
+void equalizer5band_audio_module::set_sample_rate(uint32_t sr)
+{
+ srate = sr;
+}
+
+uint32_t equalizer5band_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
+{
+ bool bypass = *params[param_bypass] > 0.5f;
+ numsamples += offset;
+ if(bypass) {
+ // everything bypassed
+ while(offset < numsamples) {
+ outs[0][offset] = ins[0][offset];
+ outs[1][offset] = ins[1][offset];
+ ++offset;
+ }
+ // displays, too
+ clip_in = 0.f;
+ clip_out = 0.f;
+ meter_in = 0.f;
+ meter_out = 0.f;
+ } else {
+
+ clip_in -= std::min(clip_in, numsamples);
+ clip_out -= std::min(clip_out, numsamples);
+ meter_in = 0.f;
+ meter_out = 0.f;
+
+ // process
+ while(offset < numsamples) {
+ // cycle through samples
+ float outL = 0.f;
+ float outR = 0.f;
+ float inL = ins[0][offset];
+ float inR = ins[1][offset];
+ // in level
+ inR *= *params[param_level_in];
+ inL *= *params[param_level_in];
+
+ float procL = inL;
+ float procR = inR;
+
+ // all filters in chain
+ if(*params[param_ls_active] > 0.f) {
+ procL = lsL.process(procL);
+ procR = lsR.process(procR);
+ }
+ if(*params[param_hs_active] > 0.f) {
+ procL = hsL.process(procL);
+ procR = hsR.process(procR);
+ }
+ if(*params[param_p1_active] > 0.f) {
+ procL = pL[0].process(procL);
+ procR = pR[0].process(procR);
+ }
+ if(*params[param_p2_active] > 0.f) {
+ procL = pL[1].process(procL);
+ procR = pR[1].process(procR);
+ }
+ if(*params[param_p3_active] > 0.f) {
+ procL = pL[2].process(procL);
+ procR = pR[2].process(procR);
+ }
+
+ outL = procL * *params[param_level_out];
+ outR = procR * *params[param_level_out];
+
+ // send to output
+ outs[0][offset] = outL;
+ outs[1][offset] = outR;
+
+ // clip LED's
+ float maxIn = std::max(fabs(inL), fabs(inR));
+ float maxOut = std::max(fabs(outL), fabs(outR));
+
+ if(maxIn > 1.f) {
+ clip_in = srate >> 3;
+ }
+ if(maxOut > 1.f) {
+ clip_out = srate >> 3;
+ }
+ // set up in / out meters
+ if(maxIn > meter_in) {
+ meter_in = maxIn;
+ }
+ if(maxOut > meter_out) {
+ meter_out = maxOut;
+ }
+
+ // next sample
+ ++offset;
+ } // cycle trough samples
+ // clean up
+ lsL.sanitize();
+ hsR.sanitize();
+ for(int i = 0; i < 3; ++i) {
+ pL[i].sanitize();
+ pR[i].sanitize();
+ }
+ }
+ // draw meters
+ if(params[param_clip_in] != NULL) {
+ *params[param_clip_in] = clip_in;
+ }
+ if(params[param_clip_out] != NULL) {
+ *params[param_clip_out] = clip_out;
+ }
+
+ if(params[param_meter_in] != NULL) {
+ *params[param_meter_in] = meter_in;
+ }
+ if(params[param_meter_out] != NULL) {
+ *params[param_meter_out] = meter_out;
+ }
+ // whatever has to be returned x)
+ return outputs_mask;
+}
+bool equalizer5band_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context)
+{
+ if (!is_active)
+ return false;
+ if (index == param_p1_freq && !subindex) {
+ context->set_line_width(1.5);
+ return ::get_graph(*this, subindex, data, points);
+ }
+ return false;
+}
+
+bool equalizer5band_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context)
+{
+ if (!is_active) {
+ return false;
+ } else {
+ return get_freq_gridline(subindex, pos, vertical, legend, context);
+ }
+}
+
+int equalizer5band_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline)
+{
+ if (!is_active) {
+ return false;
+ } else {
+ if (*params[param_ls_freq] != ls_freq_old1
+ or *params[param_ls_level] != ls_level_old1
+ or *params[param_hs_freq] != hs_freq_old1
+ or *params[param_hs_level] != hs_level_old1
+
+ or *params[param_p1_freq] != p_freq_old1[0]
+ or *params[param_p1_level] != p_level_old1[0]
+ or *params[param_p1_q] != p_q_old1[0]
+
+ or *params[param_p2_freq] != p_freq_old1[1]
+ or *params[param_p2_level] != p_level_old1[1]
+ or *params[param_p2_q] != p_q_old1[1]
+
+ or *params[param_p3_freq] != p_freq_old1[2]
+ or *params[param_p3_level] != p_level_old1[2]
+ or *params[param_p3_q] != p_q_old1[2])
+ {
+
+ ls_freq_old1 = *params[param_ls_freq];
+ ls_level_old1 = *params[param_ls_level];
+ hs_freq_old1 = *params[param_hs_freq];
+ hs_level_old1 = *params[param_hs_level];
+
+ p_freq_old1[0] = *params[param_p1_freq];
+ p_level_old1[0] = *params[param_p1_level];
+ p_q_old1[0] = *params[param_p1_q];
+
+ p_freq_old1[1] = *params[param_p2_freq];
+ p_level_old1[1] = *params[param_p2_level];
+ p_q_old1[1] = *params[param_p2_q];
+
+ p_freq_old1[2] = *params[param_p3_freq];
+ p_level_old1[2] = *params[param_p3_level];
+ p_q_old1[2] = *params[param_p3_q];
+
+ last_generation++;
+ subindex_graph = 0;
+ subindex_dot = INT_MAX;
+ subindex_gridline = INT_MAX;
+ }
+ else {
+ subindex_graph = 0;
+ subindex_dot = subindex_gridline = generation ? INT_MAX : 0;
+ }
+ if (generation == last_calculated_generation)
+ subindex_graph = INT_MAX;
+ return last_generation;
+ }
+ return false;
+}
--
calf audio plugins packaging
More information about the pkg-multimedia-commits
mailing list