[SCM] calf/master: Initial multiband limiter vumeters can have width and height in xml layouts vumeters: 1 px gap removed
js at users.alioth.debian.org
js at users.alioth.debian.org
Tue May 7 15:40:39 UTC 2013
The following commit has been merged in the master branch:
commit 5141485835f7020fead8f48906c738fdc9ead905
Author: Markus Schmidt <schmidt at boomshop.net>
Date: Sat Nov 19 04:14:18 2011 +0100
Initial multiband limiter
vumeters can have width and height in xml layouts
vumeters: 1 px gap removed
diff --git a/gui/background_dark.png b/doc/manuals/images/background_dark.png
similarity index 100%
copy from gui/background_dark.png
copy to doc/manuals/images/background_dark.png
diff --git a/doc/manuals/scripts/style.css b/doc/manuals/scripts/style.css
index 7028925..af7036c 100644
--- a/doc/manuals/scripts/style.css
+++ b/doc/manuals/scripts/style.css
@@ -1,5 +1,5 @@
body {
- background: url(../images/background_blue.png);
+ background: url(../images/background_dark.png);
color: white;
text-align: center;
font-family: sans-serif;
diff --git a/gui/gui-multibandcompressor.xml b/gui/gui-multibandcompressor.xml
index fe3ef8c..ed9647d 100644
--- a/gui/gui-multibandcompressor.xml
+++ b/gui/gui-multibandcompressor.xml
@@ -7,8 +7,8 @@
</vbox>
<vbox shrink-x="1" expand-x="1" fill-x="1" expand="0" fill="0" attach-x="1" attach-y="0" pad-y="24">
<label param="meter_inL" />
- <vumeter param="meter_inL" mode="0" hold="1.5" falloff="2.5" shrink-y="0" height="30" />
- <vumeter param="meter_inR" mode="0" hold="1.5" falloff="2.5" shrink-y="0" height="30" />
+ <vumeter param="meter_inL" mode="0" hold="1.5" falloff="2.5" shrink-y="0" />
+ <vumeter param="meter_inR" mode="0" hold="1.5" falloff="2.5" shrink-y="0" />
<label param="meter_inR" />
</vbox>
<vbox shrink-x="1" expand-x="0" fill-x="0" expand="0" fill="0" attach-x="2" attach-y="0" pad-y="24">
@@ -16,7 +16,7 @@
<led param="clip_inL" expand="0" fill="0" />
<led param="clip_inR" expand="0" fill="0" />
<label text="0dB" expand="0" fill="0" />
- </vbox>z
+ </vbox>
<table rows="3" cols="2" attach-x="4" attach-y="0" spacing="0" border="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0">
<knob param="freq0" attach-x="0" attach-y="0" border="0" expand="0" fill="0" expand-x="0" fill-x="0" />
<vbox attach-x="1" attach-y="0" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0">
@@ -70,8 +70,8 @@
</table>
<vbox shrink-x="1" expand-x="1" fill-x="1" expand="0" fill="0" attach-x="7" attach-y="0" pad-y="24">
<label param="meter_outL" />
- <vumeter param="meter_outL" mode="0" hold="1.5" falloff="2.5" shrink-y="0" height="30" />
- <vumeter param="meter_outR" mode="0" hold="1.5" falloff="2.5" shrink-y="0" height="30" />
+ <vumeter param="meter_outL" mode="0" hold="1.5" falloff="2.5" shrink-y="0" />
+ <vumeter param="meter_outR" mode="0" hold="1.5" falloff="2.5" shrink-y="0" />
<label param="meter_outR" />
</vbox>
<vbox shrink-x="1" expand-x="0" fill-x="0" expand="0" fill="0" attach-x="8" attach-y="0" pad-y="24">
diff --git a/gui/gui-multibandlimiter.xml b/gui/gui-multibandlimiter.xml
new file mode 100644
index 0000000..eca5cf9
--- /dev/null
+++ b/gui/gui-multibandlimiter.xml
@@ -0,0 +1,132 @@
+<table rows="2" cols="1">
+ <table attach-x="0" attach-y="0" expand-y="0" expand-x="1" spacing="5" rows="1" cols="7">
+ <vbox shrink-x="1" expand-x="0" fill-x="0" expand="0" fill="0" attach-x="0" attach-y="0">
+ <label param="level_in" />
+ <knob param="level_in" size="2" />
+ <value param="level_in" />
+ </vbox>
+ <vbox shrink-x="1" expand-x="1" fill-x="1" expand="0" fill="0" attach-x="1" attach-y="0">
+ <label param="meter_inL" />
+ <vumeter param="meter_inL" mode="0" hold="1.5" falloff="2.5" shrink-y="0" />
+ <vumeter param="meter_inR" mode="0" hold="1.5" falloff="2.5" shrink-y="0" />
+ <label param="meter_inR" />
+ </vbox>
+ <vbox shrink-x="1" expand-x="0" fill-x="0" expand="0" fill="0" attach-x="2" attach-y="0">
+ <label text="0dB" expand="0" fill="0" />
+ <led param="clip_inL" expand="0" fill="0" />
+ <led param="clip_inR" expand="0" fill="0" />
+ <label text="0dB" expand="0" fill="0" />
+ </vbox>
+ <vbox expand="0" attach-x="3" attach-y="0" expand-x="0" fill-x="0" fill="0" pad-x="20">
+ <label param="bypass"/>
+ <align><toggle param="bypass" shrink="1"/></align>
+ </vbox>
+ <vbox shrink-x="1" expand-x="1" fill-x="1" expand="0" fill="0" attach-x="4" attach-y="0">
+ <label param="meter_outL" />
+ <vumeter param="meter_outL" mode="0" hold="1.5" falloff="2.5" shrink-y="0" />
+ <vumeter param="meter_outR" mode="0" hold="1.5" falloff="2.5" shrink-y="0" />
+ <label param="meter_outR" />
+ </vbox>
+ <vbox shrink-x="1" expand-x="0" fill-x="0" expand="0" fill="0" attach-x="5" attach-y="0">
+ <label text="0dB" expand="0" fill="0" />
+ <led param="clip_outL" expand="0" mode="1" fill="0" />
+ <led param="clip_outR" expand="0" mode="1" fill="0" />
+ <label text="0dB" expand="0" fill="0" />
+ </vbox>
+ <vbox shrink-x="1" expand-x="0" fill-x="0" expand="0" fill="0" attach-x="6" attach-y="0">
+ <label param="level_out" />
+ <knob param="level_out" size="2" />
+ <value param="level_out" />
+ </vbox>
+ </table>
+
+ <hbox attach-x="0" attach-y="1" expand-y="1" expand-x="1" spacing="5">
+ <frame label="Limit" expand="0" fill="1">
+ <vbox>
+ <vbox>
+ <knob param="limit" size="5" type="2" />
+ <value param="limit" />
+ </vbox>
+ <vbox>
+ <label param="release" />
+ <knob param="release" />
+ <value param="release" />
+ </vbox>
+ </vbox>
+ </frame>
+
+ <frame label="X-Over" expand="0" fill="1">
+ <vbox>
+ <hbox>
+ <table rows="3" cols="2" spacing="0" border="0" expand="0" fill="0">
+ <knob param="freq0" attach-x="0" attach-y="0" border="0" expand="0" fill="0" expand-x="0" fill-x="0" />
+ <vbox attach-x="1" attach-y="0" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0">
+ <label param="freq0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" align-x="0.0" />
+ <value param="freq0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" align-x="0.0" />
+ </vbox>
+ <hbox attach-x="0" attach-y="1" border="0" fill-x="0">
+ <knob param="sep0" type="1" size="1" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" />
+ <label param="sep0" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" />
+ </hbox>
+ <value param="sep0" attach-x="1" attach-y="1" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" width="2" align-x="0.0" />
+ <hbox attach-x="0" attach-y="2" border="0" fill-x="0">
+ <knob param="q0" type="1" size="1" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" />
+ <label param="q0" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" />
+ </hbox>
+ <value param="q0" attach-x="1" attach-y="2" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" width="2" align-x="0.0" />
+ </table>
+ <table rows="3" cols="2" spacing="0" border="0" expand="0" fill="0">
+ <knob param="freq1" attach-x="0" attach-y="0" border="0" expand="0" fill="0" expand-x="0" fill-x="0" />
+ <vbox attach-x="1" attach-y="0" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0">
+ <label param="freq1" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" align-x="0.0" />
+ <value param="freq1" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" width="2" align-x="0.0" />
+ </vbox>
+ <hbox attach-x="0" attach-y="1" border="0" fill-x="0">
+ <knob param="sep1" type="1" size="1" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" />
+ <label param="sep1" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" />
+ </hbox>
+ <value param="sep1" attach-x="1" attach-y="1" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" width="2" align-x="0.0" />
+ <hbox attach-x="0" attach-y="2" border="0" fill-x="0">
+ <knob param="q1" type="1" size="1" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" />
+ <label param="q1" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" />
+ </hbox>
+ <value param="q1" attach-x="1" attach-y="2" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" width="2" align-x="0.0" />
+ </table>
+ <table rows="3" cols="2" spacing="0" border="0" expand="0" fill="0">
+ <knob param="freq2" attach-x="0" attach-y="0" border="0" expand="0" fill="0" expand-x="0" fill-x="0" />
+ <vbox attach-x="1" attach-y="0" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0">
+ <label param="freq2" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" align-x="0.0" />
+ <value param="freq2" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" align-x="0.0" />
+ </vbox>
+ <hbox attach-x="0" attach-y="1" border="0" fill-x="0">
+ <knob param="sep2" type="1" size="1" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" />
+ <label param="sep2" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" />
+ </hbox>
+ <value param="sep2" attach-x="1" attach-y="1" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" width="2" align-x="0.0" />
+ <hbox attach-x="0" attach-y="2" border="0" fill-x="0">
+ <knob param="q2" type="1" size="1" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" />
+ <label param="q2" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" />
+ </hbox>
+ <value param="q2" attach-x="1" attach-y="2" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" width="2" align-x="0.0" />
+ </table>
+ </hbox>
+ <if cond="directlink">
+ <line-graph refresh="1" width="220" height="90" param="limit" expand="0" fill="1"/>
+ </if>
+ </vbox>
+ </frame>
+
+ <frame label="Attenuation" expand="1" fill="1">
+ <table rows="4" cols="2" expand="1" fill="1">
+ <label attach-x="0" attach-y="0" param="att0" expand-x="0" />
+ <vumeter attach-x="1" attach-y="0" param="att0" mode="1" hold="1.5" falloff="2.5" width="120" expand-x="1" fill-y="0" expand-y="0" height="32" />
+ <label attach-x="0" attach-y="1" param="att1" expand-x="0" />
+ <vumeter attach-x="1" attach-y="1" param="att1" mode="1" hold="1.5" falloff="2.5" width="120" expand-x="1" fill-y="0" expand-y="0" height="32" />
+ <label attach-x="0" attach-y="2" param="att2" expand-x="0" />
+ <vumeter attach-x="1" attach-y="2" param="att2" mode="1" hold="1.5" falloff="2.5" width="120" expand-x="1" fill-y="0" expand-y="0" height="32" />
+ <label attach-x="0" attach-y="3" param="att3" expand-x="0" />
+ <vumeter attach-x="1" attach-y="3" param="att3" mode="1" hold="1.5" falloff="2.5" width="120" expand-x="1" fill-y="0" expand-y="0" height="32" />
+ </table>
+ </frame>
+ </hbox>
+</table>
diff --git a/src/.deps/modules_limit.Plo b/src/.deps/modules_limit.Plo
new file mode 100644
index 0000000..e885e13
--- /dev/null
+++ b/src/.deps/modules_limit.Plo
@@ -0,0 +1,435 @@
+modules_limit.lo: modules_limit.cpp \
+ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/bits/predefs.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h /usr/include/memory.h \
+ /usr/include/string.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
+ /usr/include/xlocale.h calf/giface.h ../config.h calf/primitives.h \
+ /usr/include/assert.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \
+ /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \
+ /usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h /usr/include/c++/4.6/cmath \
+ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
+ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
+ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
+ /usr/include/c++/4.6/bits/cpp_type_traits.h \
+ /usr/include/c++/4.6/ext/type_traits.h /usr/include/math.h \
+ /usr/include/x86_64-linux-gnu/bits/huge_val.h \
+ /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
+ /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
+ /usr/include/x86_64-linux-gnu/bits/inf.h \
+ /usr/include/x86_64-linux-gnu/bits/nan.h \
+ /usr/include/x86_64-linux-gnu/bits/mathdef.h \
+ /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
+ /usr/include/x86_64-linux-gnu/bits/mathinline.h \
+ /usr/include/c++/4.6/cstdlib /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/c++/4.6/map /usr/include/c++/4.6/bits/stl_tree.h \
+ /usr/include/c++/4.6/bits/stl_algobase.h \
+ /usr/include/c++/4.6/bits/functexcept.h \
+ /usr/include/c++/4.6/bits/exception_defines.h \
+ /usr/include/c++/4.6/ext/numeric_traits.h \
+ /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
+ /usr/include/c++/4.6/bits/concept_check.h \
+ /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
+ /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
+ /usr/include/c++/4.6/bits/stl_iterator.h \
+ /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \
+ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
+ /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
+ /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_function.h \
+ /usr/include/c++/4.6/backward/binders.h \
+ /usr/include/c++/4.6/bits/stl_map.h \
+ /usr/include/c++/4.6/initializer_list \
+ /usr/include/c++/4.6/bits/stl_multimap.h \
+ /usr/include/c++/4.6/bits/range_access.h /usr/include/c++/4.6/complex \
+ /usr/include/c++/4.6/sstream /usr/include/c++/4.6/istream \
+ /usr/include/c++/4.6/ios /usr/include/c++/4.6/iosfwd \
+ /usr/include/c++/4.6/bits/stringfwd.h \
+ /usr/include/c++/4.6/bits/postypes.h /usr/include/c++/4.6/cwchar \
+ /usr/include/c++/4.6/bits/char_traits.h \
+ /usr/include/c++/4.6/bits/localefwd.h \
+ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
+ /usr/include/c++/4.6/clocale /usr/include/locale.h \
+ /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/cctype \
+ /usr/include/ctype.h /usr/include/c++/4.6/bits/ios_base.h \
+ /usr/include/c++/4.6/ext/atomicity.h \
+ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
+ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
+ /usr/include/pthread.h /usr/include/sched.h \
+ /usr/include/x86_64-linux-gnu/bits/sched.h \
+ /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
+ /usr/include/c++/4.6/bits/locale_classes.h /usr/include/c++/4.6/string \
+ /usr/include/c++/4.6/bits/ostream_insert.h \
+ /usr/include/c++/4.6/bits/cxxabi_forced.h \
+ /usr/include/c++/4.6/bits/basic_string.h \
+ /usr/include/c++/4.6/bits/basic_string.tcc \
+ /usr/include/c++/4.6/bits/locale_classes.tcc \
+ /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
+ /usr/include/c++/4.6/bits/basic_ios.h \
+ /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
+ /usr/include/wctype.h \
+ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
+ /usr/include/c++/4.6/bits/streambuf_iterator.h \
+ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
+ /usr/include/c++/4.6/bits/locale_facets.tcc \
+ /usr/include/c++/4.6/bits/basic_ios.tcc /usr/include/c++/4.6/ostream \
+ /usr/include/c++/4.6/bits/ostream.tcc \
+ /usr/include/c++/4.6/bits/istream.tcc \
+ /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/vector \
+ /usr/include/c++/4.6/bits/stl_construct.h \
+ /usr/include/c++/4.6/bits/stl_uninitialized.h \
+ /usr/include/c++/4.6/bits/stl_vector.h \
+ /usr/include/c++/4.6/bits/stl_bvector.h \
+ /usr/include/c++/4.6/bits/vector.tcc calf/modules_limit.h calf/biquad.h \
+ calf/inertia.h calf/audio_fx.h calf/delay.h calf/buffer.h calf/onepole.h \
+ calf/fixed_point.h calf/giface.h calf/metadata.h calf/plugin_tools.h \
+ calf/vumeter.h
+
+/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/bits/predefs.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/memory.h:
+
+/usr/include/string.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
+
+/usr/include/xlocale.h:
+
+calf/giface.h:
+
+../config.h:
+
+calf/primitives.h:
+
+/usr/include/assert.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+/usr/include/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/c++/4.6/cmath:
+
+/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
+
+/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
+
+/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
+
+/usr/include/c++/4.6/bits/cpp_type_traits.h:
+
+/usr/include/c++/4.6/ext/type_traits.h:
+
+/usr/include/math.h:
+
+/usr/include/x86_64-linux-gnu/bits/huge_val.h:
+
+/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
+
+/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
+
+/usr/include/x86_64-linux-gnu/bits/inf.h:
+
+/usr/include/x86_64-linux-gnu/bits/nan.h:
+
+/usr/include/x86_64-linux-gnu/bits/mathdef.h:
+
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
+
+/usr/include/x86_64-linux-gnu/bits/mathinline.h:
+
+/usr/include/c++/4.6/cstdlib:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/c++/4.6/map:
+
+/usr/include/c++/4.6/bits/stl_tree.h:
+
+/usr/include/c++/4.6/bits/stl_algobase.h:
+
+/usr/include/c++/4.6/bits/functexcept.h:
+
+/usr/include/c++/4.6/bits/exception_defines.h:
+
+/usr/include/c++/4.6/ext/numeric_traits.h:
+
+/usr/include/c++/4.6/bits/stl_pair.h:
+
+/usr/include/c++/4.6/bits/move.h:
+
+/usr/include/c++/4.6/bits/concept_check.h:
+
+/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
+
+/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
+
+/usr/include/c++/4.6/bits/stl_iterator.h:
+
+/usr/include/c++/4.6/debug/debug.h:
+
+/usr/include/c++/4.6/bits/allocator.h:
+
+/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
+
+/usr/include/c++/4.6/ext/new_allocator.h:
+
+/usr/include/c++/4.6/new:
+
+/usr/include/c++/4.6/exception:
+
+/usr/include/c++/4.6/bits/stl_function.h:
+
+/usr/include/c++/4.6/backward/binders.h:
+
+/usr/include/c++/4.6/bits/stl_map.h:
+
+/usr/include/c++/4.6/initializer_list:
+
+/usr/include/c++/4.6/bits/stl_multimap.h:
+
+/usr/include/c++/4.6/bits/range_access.h:
+
+/usr/include/c++/4.6/complex:
+
+/usr/include/c++/4.6/sstream:
+
+/usr/include/c++/4.6/istream:
+
+/usr/include/c++/4.6/ios:
+
+/usr/include/c++/4.6/iosfwd:
+
+/usr/include/c++/4.6/bits/stringfwd.h:
+
+/usr/include/c++/4.6/bits/postypes.h:
+
+/usr/include/c++/4.6/cwchar:
+
+/usr/include/c++/4.6/bits/char_traits.h:
+
+/usr/include/c++/4.6/bits/localefwd.h:
+
+/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
+
+/usr/include/c++/4.6/clocale:
+
+/usr/include/locale.h:
+
+/usr/include/x86_64-linux-gnu/bits/locale.h:
+
+/usr/include/c++/4.6/cctype:
+
+/usr/include/ctype.h:
+
+/usr/include/c++/4.6/bits/ios_base.h:
+
+/usr/include/c++/4.6/ext/atomicity.h:
+
+/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
+
+/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
+
+/usr/include/pthread.h:
+
+/usr/include/sched.h:
+
+/usr/include/x86_64-linux-gnu/bits/sched.h:
+
+/usr/include/x86_64-linux-gnu/bits/setjmp.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
+
+/usr/include/c++/4.6/bits/locale_classes.h:
+
+/usr/include/c++/4.6/string:
+
+/usr/include/c++/4.6/bits/ostream_insert.h:
+
+/usr/include/c++/4.6/bits/cxxabi_forced.h:
+
+/usr/include/c++/4.6/bits/basic_string.h:
+
+/usr/include/c++/4.6/bits/basic_string.tcc:
+
+/usr/include/c++/4.6/bits/locale_classes.tcc:
+
+/usr/include/c++/4.6/streambuf:
+
+/usr/include/c++/4.6/bits/streambuf.tcc:
+
+/usr/include/c++/4.6/bits/basic_ios.h:
+
+/usr/include/c++/4.6/bits/locale_facets.h:
+
+/usr/include/c++/4.6/cwctype:
+
+/usr/include/wctype.h:
+
+/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
+
+/usr/include/c++/4.6/bits/streambuf_iterator.h:
+
+/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
+
+/usr/include/c++/4.6/bits/locale_facets.tcc:
+
+/usr/include/c++/4.6/bits/basic_ios.tcc:
+
+/usr/include/c++/4.6/ostream:
+
+/usr/include/c++/4.6/bits/ostream.tcc:
+
+/usr/include/c++/4.6/bits/istream.tcc:
+
+/usr/include/c++/4.6/bits/sstream.tcc:
+
+/usr/include/c++/4.6/vector:
+
+/usr/include/c++/4.6/bits/stl_construct.h:
+
+/usr/include/c++/4.6/bits/stl_uninitialized.h:
+
+/usr/include/c++/4.6/bits/stl_vector.h:
+
+/usr/include/c++/4.6/bits/stl_bvector.h:
+
+/usr/include/c++/4.6/bits/vector.tcc:
+
+calf/modules_limit.h:
+
+calf/biquad.h:
+
+calf/inertia.h:
+
+calf/audio_fx.h:
+
+calf/delay.h:
+
+calf/buffer.h:
+
+calf/onepole.h:
+
+calf/fixed_point.h:
+
+calf/giface.h:
+
+calf/metadata.h:
+
+calf/plugin_tools.h:
+
+calf/vumeter.h:
diff --git a/src/Makefile.am b/src/Makefile.am
index b396f69..3716750 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -52,7 +52,7 @@ calfbenchmark_CXXFLAGS = $(AM_CXXFLAGS) -DTEST_OSC
calfbenchmark_LDADD += libcalfgui.la
endif
-calf_la_SOURCES = audio_fx.cpp metadata.cpp modules.cpp modules_comp.cpp modules_dist.cpp modules_eq.cpp modules_mod.cpp fluidsynth.cpp giface.cpp monosynth.cpp organ.cpp osctl.cpp osctlnet.cpp plugin.cpp preset.cpp synth.cpp utils.cpp wavetable.cpp modmatrix.cpp
+calf_la_SOURCES = audio_fx.cpp metadata.cpp modules.cpp modules_comp.cpp modules_limit.cpp modules_dist.cpp modules_eq.cpp modules_mod.cpp fluidsynth.cpp giface.cpp monosynth.cpp organ.cpp osctl.cpp osctlnet.cpp plugin.cpp preset.cpp synth.cpp utils.cpp wavetable.cpp modmatrix.cpp
calf_la_LIBADD ?= $(FLUIDSYNTH_DEPS_LIBS)
if USE_DEBUG
calf_la_LDFLAGS = -rpath $(ladspadir) -avoid-version -module -lexpat -disable-static $(FLUIDSYNTH_DEPS_LIBS)
diff --git a/src/audio_fx.cpp b/src/audio_fx.cpp
index 094717d..8c92df5 100644
--- a/src/audio_fx.cpp
+++ b/src/audio_fx.cpp
@@ -531,3 +531,45 @@ bool simple_lfo::get_dot(float &x, float &y, int &size, cairo_iface *context) co
return true;
}
+
+////////////////////////////////////////////////////////////////////////////////
+
+lookahead_limiter::lookahead_limiter() {
+ is_active = false;
+ attenuation = 1.f;
+}
+
+void lookahead_limiter::activate()
+{
+ is_active = true;
+ attenuation = 1.f;
+}
+
+void lookahead_limiter::deactivate()
+{
+ is_active = false;
+}
+
+float lookahead_limiter::get_attenuation()
+{
+ return attenuation;
+}
+
+void lookahead_limiter::set_sample_rate(uint32_t sr)
+{
+ srate = sr;
+}
+
+void lookahead_limiter::set_params(float l, float r, float g, uint32_t sr)
+{
+ limit = l;
+ release = r;
+ gain = g;
+ srate = sr;
+}
+
+void lookahead_limiter::process(float &left, float &right)
+{
+ left = (left * limit) / limit;
+ right = (right * limit) / limit;
+}
diff --git a/src/calf/audio_fx.h b/src/calf/audio_fx.h
index b9e5012..3282e4d 100644
--- a/src/calf/audio_fx.h
+++ b/src/calf/audio_fx.h
@@ -565,6 +565,31 @@ public:
bool get_dot(float &x, float &y, int &size, calf_plugins::cairo_iface *context) const;
};
+
+/// Fast Lookahead Limiter by Steve Harris
+/// [This module is used with permission of Steve Harris]
+/// THERE'S NO PERMISSION TO USE IT BY NOW!!
+/// This is a limiter with an attack time of 5ms.
+/// It adds just over 5ms of lantecy to the input signal, but it guatantees that
+/// there will be no signals over the limit, and tries to get the minimum
+/// ammount of distortion.
+
+class lookahead_limiter {
+private:
+ float limit, release, gain, attenuation;
+ uint32_t srate;
+ bool is_active;
+public:
+ int id;
+ lookahead_limiter();
+ void process(float &left, float &right);
+ void set_sample_rate(uint32_t sr);
+ void set_params(float l, float r, float g, uint32_t sr);
+ float get_attenuation();
+ void activate();
+ void deactivate();
+};
+
#if 0
{ to keep editor happy
#endif
diff --git a/src/calf/ctl_vumeter.h b/src/calf/ctl_vumeter.h
index dbd4f2a..b2abbe9 100644
--- a/src/calf/ctl_vumeter.h
+++ b/src/calf/ctl_vumeter.h
@@ -55,6 +55,8 @@ struct CalfVUMeter
float last_falloff;
long last_falltime;
int meter_width;
+ int vumeter_width;
+ int vumeter_height;
std::string *meter_text;
cairo_surface_t *cache_surface;
cairo_pattern_t *pat;
@@ -75,6 +77,10 @@ extern void calf_vumeter_set_hold(CalfVUMeter *meter, float value);
extern float calf_vumeter_get_hold(CalfVUMeter *meter);
extern void calf_vumeter_set_falloff(CalfVUMeter *meter, float value);
extern float calf_vumeter_get_falloff(CalfVUMeter *meter);
+extern void calf_vumeter_set_width(CalfVUMeter *meter, int value);
+extern int calf_vumeter_get_width(CalfVUMeter *meter);
+extern void calf_vumeter_set_height(CalfVUMeter *meter, int value);
+extern int calf_vumeter_get_height(CalfVUMeter *meter);
G_END_DECLS
diff --git a/src/calf/metadata.h b/src/calf/metadata.h
index 27cd2bf..c76cfaa 100644
--- a/src/calf/metadata.h
+++ b/src/calf/metadata.h
@@ -230,6 +230,21 @@ struct sidechaingate_metadata: public plugin_metadata<sidechaingate_metadata>
PLUGIN_NAME_ID_LABEL("sidechaingate", "sidechaingate", "Sidechain Gate")
};
+/// Markus's multibandlimiter - metadata
+struct multibandlimiter_metadata: public plugin_metadata<multibandlimiter_metadata>
+{
+ enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
+ enum { param_bypass, param_level_in, param_level_out,
+ STEREO_VU_METER_PARAMS,
+ param_freq0, param_freq1, param_freq2,
+ param_sep0, param_sep1, param_sep2,
+ param_q0, param_q1, param_q2,
+ param_limit, param_release,
+ param_att0, param_att1, param_att2, param_att3,
+ param_count };
+ PLUGIN_NAME_ID_LABEL("multiband_limiter", "multibandlimiter", "Multiband Limiter")
+};
+
/// Markus's 5-band EQ - metadata
struct equalizer5band_metadata: public plugin_metadata<equalizer5band_metadata>
{
diff --git a/src/calf/modulelist.h b/src/calf/modulelist.h
index 85dead8..1588921 100644
--- a/src/calf/modulelist.h
+++ b/src/calf/modulelist.h
@@ -15,6 +15,7 @@
PER_MODULE_ITEM(deesser, false, "deesser")
PER_MODULE_ITEM(gate, false, "gate")
PER_MODULE_ITEM(sidechaingate, false, "sidechaingate")
+ PER_MODULE_ITEM(multibandlimiter, false, "multibandlimiter")
PER_MODULE_ITEM(pulsator, false, "pulsator")
PER_MODULE_ITEM(equalizer5band, false, "eq5")
PER_MODULE_ITEM(equalizer8band, false, "eq8")
diff --git a/src/calf/modules_limit.h b/src/calf/modules_limit.h
new file mode 100644
index 0000000..2c563ae
--- /dev/null
+++ b/src/calf/modules_limit.h
@@ -0,0 +1,58 @@
+/* Calf DSP plugin pack
+ * Limiter related plugins
+ *
+ * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifndef CALF_MODULES_LIMIT_H
+#define CALF_MODULES_LIMIT_H
+
+#include <assert.h>
+#include <limits.h>
+#include "biquad.h"
+#include "inertia.h"
+#include "audio_fx.h"
+#include "giface.h"
+#include "metadata.h"
+#include "plugin_tools.h"
+
+namespace calf_plugins {
+
+/// Multiband Limiter by Markus Schmidt (based on Krzysztof's filters and Steve's lookahead limiter algorythm)
+class multibandlimiter_audio_module: public audio_module<multibandlimiter_metadata>, public line_graph_iface {
+private:
+ typedef multibandlimiter_audio_module AM;
+ static const int strips = 4;
+ uint32_t clip_inL, clip_inR, clip_outL, clip_outR;
+ float meter_inL, meter_inR, meter_outL, meter_outR;
+ dsp::lookahead_limiter strip[strips];
+ dsp::biquad_d2<float> lpL0, lpR0, lpL1, lpR1, lpL2, lpR2, hpL0, hpR0, hpL1, hpR1, hpL2, hpR2;
+ float freq_old[strips - 1], sep_old[strips - 1], q_old[strips - 1];
+public:
+ uint32_t srate;
+ bool is_active;
+ multibandlimiter_audio_module();
+ void activate();
+ void deactivate();
+ void params_changed();
+ uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask);
+ void set_sample_rate(uint32_t sr);
+};
+
+};
+
+#endif
diff --git a/src/ctl_vumeter.cpp b/src/ctl_vumeter.cpp
index ccd3877..788a1d0 100644
--- a/src/ctl_vumeter.cpp
+++ b/src/ctl_vumeter.cpp
@@ -67,7 +67,7 @@ calf_vumeter_expose (GtkWidget *widget, GdkEventExpose *event)
if (mx > widget->allocation.width / 2)
mx = 0;
int sx = widget->allocation.width - (ox * 2), sy = widget->allocation.height - (oy * 2);
- int sx1 = sx - ((widget->allocation.width - inner * 2 - ox * 2) % led) - 1 - mx;
+ int sx1 = sx - ((widget->allocation.width - inner * 2 - ox * 2) % led) - mx;
style = gtk_widget_get_style(widget);
cairo_t *c = gdk_cairo_create(GDK_DRAWABLE(widget->window));
if( vu->cache_surface == NULL ) {
@@ -261,9 +261,9 @@ calf_vumeter_size_request (GtkWidget *widget,
GtkRequisition *requisition)
{
g_assert(CALF_IS_VUMETER(widget));
-
- requisition->width = 50;
- requisition->height = 18;
+ CalfVUMeter *self = CALF_VUMETER(widget);
+ requisition->width = self->vumeter_width;
+ requisition->height = self->vumeter_height;
}
static void
@@ -296,8 +296,8 @@ calf_vumeter_init (CalfVUMeter *self)
{
GtkWidget *widget = GTK_WIDGET(self);
//GTK_WIDGET_SET_FLAGS (widget, GTK_NO_WINDOW);
- widget->requisition.width = 50;
- widget->requisition.height = 18;
+ widget->requisition.width = self->vumeter_width;
+ widget->requisition.height = self->vumeter_height;
self->cache_surface = NULL;
self->falling = false;
self->holding = false;
@@ -401,7 +401,7 @@ extern float calf_vumeter_get_falloff(CalfVUMeter *meter)
extern void calf_vumeter_set_hold(CalfVUMeter *meter, float value)
{
- if (value != meter->vumeter_falloff)
+ if (value != meter->vumeter_hold)
{
meter->vumeter_hold = value;
gtk_widget_queue_draw(GTK_WIDGET(meter));
@@ -413,3 +413,30 @@ extern float calf_vumeter_get_hold(CalfVUMeter *meter)
return meter->vumeter_hold;
}
+extern void calf_vumeter_set_width(CalfVUMeter *meter, int value)
+{
+ if (value != meter->vumeter_width)
+ {
+ meter->vumeter_width = value;
+ gtk_widget_queue_draw(GTK_WIDGET(meter));
+ }
+}
+
+extern int calf_vumeter_get_width(CalfVUMeter *meter)
+{
+ return meter->vumeter_width;
+}
+
+extern void calf_vumeter_set_height(CalfVUMeter *meter, int value)
+{
+ if (value != meter->vumeter_height)
+ {
+ meter->vumeter_height = value;
+ gtk_widget_queue_draw(GTK_WIDGET(meter));
+ }
+}
+
+extern int calf_vumeter_get_height(CalfVUMeter *meter)
+{
+ return meter->vumeter_height;
+}
diff --git a/src/gui_controls.cpp b/src/gui_controls.cpp
index 17e123b..04b23ba 100644
--- a/src/gui_controls.cpp
+++ b/src/gui_controls.cpp
@@ -433,6 +433,8 @@ GtkWidget *vumeter_param_control::create(plugin_gui *_gui, int _param_no)
calf_vumeter_set_mode (CALF_VUMETER (widget), (CalfVUMeterMode)get_int("mode", 0));
CALF_VUMETER(widget)->vumeter_hold = get_float("hold", 0);
CALF_VUMETER(widget)->vumeter_falloff = get_float("falloff", 0.f);
+ CALF_VUMETER(widget)->vumeter_width = get_int("width", 50);
+ CALF_VUMETER(widget)->vumeter_height = get_int("height", 18);
gtk_widget_set_name(GTK_WIDGET(widget), "Calf-VUMeter");
return widget;
}
diff --git a/src/metadata.cpp b/src/metadata.cpp
index 0aa27fc..c284a98 100644
--- a/src/metadata.cpp
+++ b/src/metadata.cpp
@@ -489,6 +489,49 @@ CALF_PORT_PROPS(sidechaingate) = {
CALF_PLUGIN_INFO(sidechaingate) = { 0x8504, "Sidechaingate", "Calf Sidechain Gate", "Markus Schmidt / Damien Zammit / Thor Harald Johansen", calf_plugins::calf_copyright_info, "ExpanderPlugin" };
+////////////////////////////////////////////////////////////////////////////
+
+CALF_PORT_NAMES(multibandlimiter) = {"In L", "In R", "Out L", "Out R"};
+
+CALF_PORT_PROPS(multibandlimiter) = {
+ { 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", "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-InL" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inR", "0dB-InR" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB-OutL" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB-OutR" },
+
+ { 100, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq0", "Split 1/2" },
+ { 1000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq1", "Split 2/3" },
+ { 6000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq2", "Split 3/4" },
+
+ { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep0", "S1" },
+ { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep1", "S2" },
+ { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep2", "S3" },
+
+ { 0.895025, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q0", "Q1" },
+ { 0.895025, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q1", "Q2" },
+ { 0.895025, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q2", "Q3" },
+
+
+ { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "limit", "Limit" },
+ { 50, 1, 1000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release", "Release" },
+
+ { 1, 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, "att0", "Low" },
+ { 1, 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, "att1", "LMid" },
+ { 1, 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, "att2", "HMid" },
+ { 1, 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, "att3", "Hi" },
+
+ {}
+};
+
+CALF_PLUGIN_INFO(multibandlimiter) = { 0x8520, "Multibandlimiter", "Calf Multiband Limiter", "Markus Schmidt / Steve Harris", calf_plugins::calf_copyright_info, "LimiterPlugin" };
+
////////////////////////////////////////////////////////////////////////////
// A few macros to make
diff --git a/src/modules_comp.cpp b/src/modules_comp.cpp
index b75f2ef..de6e14b 100644
--- a/src/modules_comp.cpp
+++ b/src/modules_comp.cpp
@@ -28,7 +28,7 @@ using namespace calf_plugins;
#define SET_IF_CONNECTED(name) if (params[AM::param_##name] != NULL) *params[AM::param_##name] = name;
-/// Multibandcompressor by Markus Schmidt
+/// Multiband Compressor by Markus Schmidt
///
/// This module splits the signal in four different bands
/// and sends them through multiple filters (implemented by
diff --git a/src/modules_limit.cpp b/src/modules_limit.cpp
new file mode 100644
index 0000000..4da8295
--- /dev/null
+++ b/src/modules_limit.cpp
@@ -0,0 +1,289 @@
+/* Calf DSP plugin pack
+ * Limiter related plugins
+ *
+ * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+#include <limits.h>
+#include <memory.h>
+#include <calf/giface.h>
+#include <calf/modules_limit.h>
+
+using namespace dsp;
+using namespace calf_plugins;
+
+#define SET_IF_CONNECTED(name) if (params[AM::param_##name] != NULL) *params[AM::param_##name] = name;
+
+/// Multiband Limiter by Markus Schmidt
+///
+/// This module splits the signal in four different bands
+/// and sends them through multiple filters (implemented by
+/// Krzysztof). They are processed by a compressing routine
+/// (implemented by Steve Harris) afterwards and summed up to the
+/// final output again.
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+multibandlimiter_audio_module::multibandlimiter_audio_module()
+{
+ is_active = false;
+ srate = 0;
+ // zero all displays
+ 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 multibandlimiter_audio_module::activate()
+{
+ is_active = true;
+ // set all filters and strips
+ params_changed();
+ // activate all strips
+ for (int j = 0; j < strips; j ++) {
+ strip[j].activate();
+ strip[j].id = j;
+ }
+}
+
+void multibandlimiter_audio_module::deactivate()
+{
+ is_active = false;
+ // deactivate all strips
+ for (int j = 0; j < strips; j ++) {
+ strip[j].deactivate();
+ }
+}
+
+void multibandlimiter_audio_module::params_changed()
+{
+ // set the params of all filters
+ if(*params[param_freq0] != freq_old[0] or *params[param_sep0] != sep_old[0] or *params[param_q0] != q_old[0]) {
+ lpL0.set_lp_rbj((float)(*params[param_freq0] * (1 - *params[param_sep0])), *params[param_q0], (float)srate);
+ lpR0.copy_coeffs(lpL0);
+ hpL0.set_hp_rbj((float)(*params[param_freq0] * (1 + *params[param_sep0])), *params[param_q0], (float)srate);
+ hpR0.copy_coeffs(hpL0);
+ freq_old[0] = *params[param_freq0];
+ sep_old[0] = *params[param_sep0];
+ q_old[0] = *params[param_q0];
+ }
+ if(*params[param_freq1] != freq_old[1] or *params[param_sep1] != sep_old[1] or *params[param_q1] != q_old[1]) {
+ lpL1.set_lp_rbj((float)(*params[param_freq1] * (1 - *params[param_sep1])), *params[param_q1], (float)srate);
+ lpR1.copy_coeffs(lpL1);
+ hpL1.set_hp_rbj((float)(*params[param_freq1] * (1 + *params[param_sep1])), *params[param_q1], (float)srate);
+ hpR1.copy_coeffs(hpL1);
+ freq_old[1] = *params[param_freq1];
+ sep_old[1] = *params[param_sep1];
+ q_old[1] = *params[param_q1];
+ }
+ if(*params[param_freq2] != freq_old[2] or *params[param_sep2] != sep_old[2] or *params[param_q2] != q_old[2]) {
+ lpL2.set_lp_rbj((float)(*params[param_freq2] * (1 - *params[param_sep2])), *params[param_q2], (float)srate);
+ lpR2.copy_coeffs(lpL2);
+ hpL2.set_hp_rbj((float)(*params[param_freq2] * (1 + *params[param_sep2])), *params[param_q2], (float)srate);
+ hpR2.copy_coeffs(hpL2);
+ freq_old[2] = *params[param_freq2];
+ sep_old[2] = *params[param_sep2];
+ q_old[2] = *params[param_q2];
+ }
+ // set the params of all strips
+ strip[0].set_params(*params[param_limit], *params[param_release], 1.f, srate);
+ strip[1].set_params(*params[param_limit], *params[param_release], 1.f, srate);
+ strip[2].set_params(*params[param_limit], *params[param_release], 1.f, srate);
+ strip[3].set_params(*params[param_limit], *params[param_release], 1.f, srate);
+}
+
+void multibandlimiter_audio_module::set_sample_rate(uint32_t sr)
+{
+ srate = sr;
+ // set srate of all strips
+ for (int j = 0; j < strips; j ++) {
+ strip[j].set_sample_rate(srate);
+ }
+}
+
+#define BYPASSED_COMPRESSION(index) \
+ if(params[param_att##index] != NULL) \
+ *params[param_att##index] = 1.0; \
+
+#define ACTIVE_COMPRESSION(index) \
+ if(params[param_att##index] != NULL) \
+ *params[param_att##index] = strip[index].get_attenuation(); \
+
+uint32_t multibandlimiter_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;
+// for (int i = 0; i < strips; i++)
+// strip[i].update_curve();
+ 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 {
+ // process all strips
+
+ // let meters fall a bit
+ 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;
+ while(offset < numsamples) {
+ // cycle through samples
+ float inL = ins[0][offset];
+ float inR = ins[1][offset];
+ // in level
+ inR *= *params[param_level_in];
+ inL *= *params[param_level_in];
+ // out vars
+ float outL = 0.f;
+ float outR = 0.f;
+ for (int i = 0; i < strips; i ++) {
+ float left = inL;
+ float right = inR;
+ // send trough filters
+ switch (i) {
+ case 0:
+ left = lpL0.process(left);
+ right = lpR0.process(right);
+ lpL0.sanitize();
+ lpR0.sanitize();
+ break;
+ case 1:
+ left = lpL1.process(left);
+ right = lpR1.process(right);
+ left = hpL0.process(left);
+ right = hpR0.process(right);
+ lpL1.sanitize();
+ lpR1.sanitize();
+ hpL0.sanitize();
+ hpR0.sanitize();
+ break;
+ case 2:
+ left = lpL2.process(left);
+ right = lpR2.process(right);
+ left = hpL1.process(left);
+ right = hpR1.process(right);
+ lpL2.sanitize();
+ lpR2.sanitize();
+ hpL1.sanitize();
+ hpR1.sanitize();
+ break;
+ case 3:
+ left = hpL2.process(left);
+ right = hpR2.process(right);
+ hpL2.sanitize();
+ hpR2.sanitize();
+ break;
+ }
+ // process gain reduction
+ strip[i].process(left, right);
+ // sum up output
+ outL += left;
+ outR += right;
+ } // process single strip
+
+ // even out filters gain reduction
+ // 3dB - levelled manually (based on default sep and q settings)
+ outL *= 1.414213562;
+ outR *= 1.414213562;
+
+ // out level
+ outL *= *params[param_level_out];
+ outR *= *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
+
+ } // process all strips (no bypass)
+
+ // draw meters
+ SET_IF_CONNECTED(clip_inL);
+ SET_IF_CONNECTED(clip_inR);
+ SET_IF_CONNECTED(clip_outL);
+ SET_IF_CONNECTED(clip_outR);
+ SET_IF_CONNECTED(meter_inL);
+ SET_IF_CONNECTED(meter_inR);
+ SET_IF_CONNECTED(meter_outL);
+ SET_IF_CONNECTED(meter_outR);
+ // draw strip meters
+ if(bypass > 0.5f) {
+ BYPASSED_COMPRESSION(0)
+ BYPASSED_COMPRESSION(1)
+ BYPASSED_COMPRESSION(2)
+ BYPASSED_COMPRESSION(3)
+ } else {
+ ACTIVE_COMPRESSION(0)
+ ACTIVE_COMPRESSION(1)
+ ACTIVE_COMPRESSION(2)
+ ACTIVE_COMPRESSION(3)
+ }
+ // whatever has to be returned x)
+ return outputs_mask;
+}
+
+
diff --git a/src/plugin.cpp b/src/plugin.cpp
index 2f78bc9..ac26fd6 100644
--- a/src/plugin.cpp
+++ b/src/plugin.cpp
@@ -23,6 +23,7 @@
#include <calf/lv2wrap.h>
#include <calf/modules.h>
#include <calf/modules_comp.h>
+#include <calf/modules_limit.h>
#include <calf/modules_dev.h>
#include <calf/modules_dist.h>
#include <calf/modules_eq.h>
--
calf audio plugins packaging
More information about the pkg-multimedia-commits
mailing list