summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2012-12-18 20:55:49 +0100
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2012-12-18 20:55:49 +0100
commit46e77b128373ad7d10e004e790f1ff4d4021d4af (patch)
tree202cec07ab007396ab489bad96349ca4cbcd6dc0
parenta7278be9668c5f09165f7a673a54dfff324a65a2 (diff)
downloaddigitale-debutanten-master.tar.gz
added "soft" clipper based on arcus tangensHEADmaster
-rw-r--r--chugins/Makefile3
-rw-r--r--chugins/SoftClipper.cpp28
-rw-r--r--lib/SoftClipperGen.ck10
3 files changed, 40 insertions, 1 deletions
diff --git a/chugins/Makefile b/chugins/Makefile
index 0aee682..f577e10 100644
--- a/chugins/Makefile
+++ b/chugins/Makefile
@@ -3,8 +3,9 @@ CFLAGS ?= -O3
CFLAGS += -fPIC
CPPFLAGS += -I/usr/include/chuck -D__UNIX_JACK__ -D__LINUX_JACK__
CXXFLAGS += $(CFLAGS)
+LDFLAGS += -lm
-all : Clipper.chug
+all : Clipper.chug SoftClipper.chug
%.chug : %.o
$(CXX) -shared $(LDFLAGS) -o $@ $^
diff --git a/chugins/SoftClipper.cpp b/chugins/SoftClipper.cpp
new file mode 100644
index 0000000..d702576
--- /dev/null
+++ b/chugins/SoftClipper.cpp
@@ -0,0 +1,28 @@
+#include <math.h>
+
+#include <chuck_dl.h>
+#include <chuck_def.h>
+
+CK_DLL_TICK(clipper_tick);
+
+CK_DLL_QUERY(SoftClipper)
+{
+ QUERY->setname(QUERY, "SoftClipper");
+
+ QUERY->begin_class(QUERY, "SoftClipper", "UGen");
+ QUERY->add_ugen_func(QUERY, clipper_tick, NULL, 1, 1);
+ QUERY->end_class(QUERY);
+
+ return TRUE;
+}
+
+CK_DLL_TICK(clipper_tick)
+{
+#ifdef __CHUCK_USE_64_BIT_SAMPLE__
+ *out = atan(in * 2.)/M_PI_2;
+#else
+ *out = atanf(in * 2.)/M_PI_2;
+#endif
+
+ return TRUE;
+}
diff --git a/lib/SoftClipperGen.ck b/lib/SoftClipperGen.ck
new file mode 100644
index 0000000..9969cd8
--- /dev/null
+++ b/lib/SoftClipperGen.ck
@@ -0,0 +1,10 @@
+/*
+ * soft-clip a signal within -1 to 1 using a Ghugen
+ */
+public class SoftClipper extends Chugen {
+ fun float
+ tick(float in)
+ {
+ return Math.atan(in*2)/(Math.PI/2);
+ }
+}