aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--Makefile9
-rw-r--r--Makefile.sccompile30
-rw-r--r--loquelic_pm.dsp36
-rw-r--r--loquelic_ss.dsp28
-rw-r--r--loquelic_ss_cv.dsp29
-rw-r--r--loquelic_vo.dsp30
-rw-r--r--src/util.dsp26
8 files changed, 192 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ad31c67
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.DS_Store
+*.log
+tmp/
+build/
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..356b110
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,9 @@
+##
+# loquelic iteritas
+
+BUILD_DIR := ./build
+#SC_EXTENSION_DIR := $(BUILD_DIR)/loquelic/Supercollider/Extensions/
+#INT_DIR := $(BUILD_DIR)/loquelic/src/
+
+supercollider:
+ $(MAKE) BUILD_DIR=$(BUILD_DIR) -f Makefile.sccompile
diff --git a/Makefile.sccompile b/Makefile.sccompile
new file mode 100644
index 0000000..9357afb
--- /dev/null
+++ b/Makefile.sccompile
@@ -0,0 +1,30 @@
+BUILD_DIR ?= ./build
+
+CXXFLAGS := $(CXXFLAGS)
+LFLAGS := -fPIC -shared $(LFLAGS)
+
+scbuilddir := $(BUILD_DIR)/Supercollider
+extdir := $(scbuilddir)/Extensions
+
+dspsrc := $(wildcard *.dsp)
+scfiles := $(addprefix $(extdir)/, $(dspsrc:.dsp=.sc))
+sofiles := $(addprefix $(extdir)/, $(dspsrc:.dsp=.so))
+
+archfile := /usr/share/faust/supercollider.cpp
+scincludes := -I/usr/include/SuperCollider/plugin_interface -I/usr/include/SuperCollider/common
+
+all: $(sofiles) $(scfiles)
+
+%.cpp: %.dsp
+ faust -a $(archfile) $< -o $@
+
+$(extdir)/%.so: %.cpp
+ mkdir -p $(extdir)
+ $(CXX) $(CXXFLAGS) $(scincludes) $(OPTFLAGS) $(LFLAGS) $< -o $@
+
+$(extdir)/%.sc: %.dsp.xml
+ mkdir -p $(extdir)
+ faust2sc --prefix="" $< --output=$@
+
+%.dsp.xml: %.dsp
+ faust --xml -o /dev/null $<
diff --git a/loquelic_pm.dsp b/loquelic_pm.dsp
new file mode 100644
index 0000000..fc1536e
--- /dev/null
+++ b/loquelic_pm.dsp
@@ -0,0 +1,36 @@
+import("stdfaust.lib");
+import("src/util.dsp");
+
+UIGroupOscA(x) = vgroup("Oscillator A", x);
+UIFreqA = UIGroupOscA(hslider("Frequency", 440.0, 20.0, 10000.0, 1));
+UIMorphA = UIGroupOscA(hslider("Morph", 0.5, 0.0, 1.0, 0.001));
+
+UIGroupOscB(x) = vgroup("Oscillator B", x);
+UIFreqB = UIGroupOscB(hslider("Frequency", 440.0, 20.0, 10000.0, 1));
+UIMorphB = UIGroupOscB(hslider("Morph", 0.5, 0.0, 1.0, 0.001));
+
+UIFoldGain = hslider("Fold", 1.0, 0.0, 5.0, 0.01);
+UIMix = hslider("Mix", -1.0, -1.0, 1.0, 0.001);
+UIMod = hslider("Modulation", 0.0, 0.0, 1.0, 0.001);
+
+process =
+ pmoscillators ~ (scaletwo(UIMod) : crossconnect)
+ : \(a, b).(a, a*b, b)
+ : blendthree(UIMix)
+ : *(UIFoldGain)
+ : fold
+with {
+ pmsinemorph(morph, freq, pmod) =
+ freq
+ : phase + pmod
+ : fmod(_, 1.0)
+ : knee(morph)
+ : sin(_*2.0*ma.PI);
+
+ pmoscillators =
+ pmsinemorph(UIMorphA, UIFreqA)
+ , pmsinemorph(UIMorphB, UIFreqB);
+
+ scaletwo(s) = par(i, 2, *(s));
+ crossconnect = route(2,2,1,2,2,1);
+};
diff --git a/loquelic_ss.dsp b/loquelic_ss.dsp
new file mode 100644
index 0000000..5e13b4e
--- /dev/null
+++ b/loquelic_ss.dsp
@@ -0,0 +1,28 @@
+import("stdfaust.lib");
+import("src/util.dsp");
+
+UIGroupOscA(x) = vgroup("Oscillator A", x);
+UIFreqA = UIGroupOscA(hslider("Frequency", 440.0, 20.0, 10000.0, 1));
+UIMorphA = UIGroupOscA(hslider("Morph", 0.5, 0.0, 1.0, 0.001));
+
+UIGroupOscB(x) = vgroup("Oscillator B", x);
+UIFreqB = UIGroupOscB(hslider("Frequency", 440.0, 20.0, 10000.0, 1));
+UIMorphB = UIGroupOscB(hslider("Morph", 0.5, 0.0, 1.0, 0.001));
+
+UIFoldGain = hslider("Fold", 1.0, 0.0, 5.0, 0.01);
+UIMod = hslider("Modulation", 0.0, 0.0, 1.0, 0.001);
+UIDamp = hslider("Damp", 0.0, 0.0, 1.0, 0.001);
+
+process = (oscA - a*oscC)/(1.0 + a^2 - 2*a*oscB) : *(UIFoldGain) : fold
+with {
+ a = UIDamp;
+ sinemorph(morph) = knee(morph) : sin(_*2.0*ma.PI);
+
+ tA = UIFreqA : phase + oscB*UIMod : fmod(_, 1.0);
+ tB = UIFreqB : phase + 0.25 : fmod(_, 1.0);
+ tC = tB - tA : fmod(_, 1.0);
+
+ oscA = tA : sinemorph(UIMorphA);
+ oscB = tB : sinemorph(UIMorphB);
+ oscC = tA - tB : sin(_*2.0+ma.PI);
+};
diff --git a/loquelic_ss_cv.dsp b/loquelic_ss_cv.dsp
new file mode 100644
index 0000000..772b321
--- /dev/null
+++ b/loquelic_ss_cv.dsp
@@ -0,0 +1,29 @@
+import("stdfaust.lib");
+import("src/util.dsp");
+
+UIGroupOscA(x) = vgroup("Oscillator A", x);
+UIFreqA = UIGroupOscA(hslider("Frequency", 440.0, 20.0, 10000.0, 1));
+UIMorphA = UIGroupOscA(hslider("Morph", 0.5, 0.0, 1.0, 0.001));
+
+UIGroupOscB(x) = vgroup("Oscillator B", x);
+UIFreqB = UIGroupOscB(hslider("Frequency", 440.0, 20.0, 10000.0, 1));
+UIMorphB = UIGroupOscB(hslider("Morph", 0.5, 0.0, 1.0, 0.001));
+
+UIFoldGain = hslider("Fold", 1.0, 0.0, 5.0, 0.01);
+UIMod = hslider("Modulation", 0.0, 0.0, 1.0, 0.001);
+UIDamp = hslider("Damp", 0.0, 0.0, 1.0, 0.001);
+
+process(pitchA, pitchB, morphA, morphB, foldgain, mod, damp) =
+ (oscA - a*oscC)/(1.0 + a^2 - 2*a*oscB) : *(UIFoldGain + foldgain) : fold
+with {
+ a = UIDamp;
+ sinemorph(morph) = knee(morph) : sin(_*2.0*ma.PI);
+
+ tA = pitchA : phase + oscB*(UIMod + mod) : fmod(_, 1.0);
+ tB = pitchB : phase + 0.25 : fmod(_, 1.0);
+ tC = tB - tA : fmod(_, 1.0);
+
+ oscA = tA : sinemorph(morphA + UIMorphA);
+ oscB = tB : sinemorph(morphB + UIMorphB);
+ oscC = tA - tB : sin(_*2.0+ma.PI);
+};
diff --git a/loquelic_vo.dsp b/loquelic_vo.dsp
new file mode 100644
index 0000000..7687932
--- /dev/null
+++ b/loquelic_vo.dsp
@@ -0,0 +1,30 @@
+import("stdfaust.lib");
+import("src/util.dsp");
+
+UIGroupOscA(x) = hgroup("Oscillator A", x);
+UIFreqA = UIGroupOscA(vslider("Frequency", 440.0, 20.0, 10000.0, 1));
+UIFoldGain = UIGroupOscA(vslider("Fold", 1.0, 0.0, 5.0, 0.01));
+UIMorph = UIGroupOscA(vslider("Morph", 0.5, 0.0, 1.0, 0.001));
+
+UIGroupOscB(x) = hgroup("Oscillator B", x);
+UIFreqB = UIGroupOscB(vslider("Frequency", 440.0, 20.0, 10000.0, 1));
+UIDecay = UIGroupOscB(vslider("Decay", 0.0, 0.0, 1.0, 0.01));
+
+UIMod = vslider("Modulation", 0.0, 0.0, 1.0, 0.001);
+
+process = oscA * oscB
+with {
+ oscB = UIFreqA
+ : phase
+ : *(-UIDecay*10.0)
+ : exp;
+
+ oscA = UIFreqB
+ : phase
+ : +(oscB*UIMod)
+ : fmod(_,1.0)
+ : knee(UIMorph)
+ : sin(_*2.0*ma.PI)
+ : *(UIFoldGain)
+ : fold;
+};
diff --git a/src/util.dsp b/src/util.dsp
new file mode 100644
index 0000000..72902d3
--- /dev/null
+++ b/src/util.dsp
@@ -0,0 +1,26 @@
+import("stdfaust.lib");
+
+/* phasor: 0.0 to 1.0 at freq Hz */
+phase(freq) = (+(freq/ma.SR) : _,1.0 : fmod) ~ _;
+
+/* knee is a piecewise linear mapping
+ * [0,m) -> [0,0.5)
+ * and [m,1] -> [0.5,1] */
+knee(c, in) = 0.5*(min(x, m)/m + max(x - m, 0.0)/(1.0 - m))
+with {
+ x = clamp(0.0, 1.0, in);
+ m = clamp(0.001, 0.999, c);
+};
+
+/* simple wave folding */
+fold(x) = 4*(abs(0.25*x + 0.25 - int(0.25*x + 0.25)) - 0.25);
+
+clamp(m, M) = _ : min(M) : max(m);
+
+blendthree(value, inA, inB, inC) =
+ max(-clamped_value, 0.0)*inA
+ + max(clamped_value, 0.0)*inC
+ + max(1.0 - abs(clamped_value), 0.0)*inC
+with {
+ clamped_value = value : clamp(-1.0, 1.0);
+};