aboutsummaryrefslogtreecommitdiffstats
path: root/.config/SuperCollider
diff options
context:
space:
mode:
authorDavid Runge <dave@sleepmap.de>2019-03-05 09:34:32 +0100
committerDavid Runge <dave@sleepmap.de>2019-03-05 09:34:32 +0100
commit1ee10e6b733a81389d9718363deb6cf7daec79d3 (patch)
tree9c98d99dc0d0b2805f7d674688b7bad345704376 /.config/SuperCollider
parent688a8394f0e3f7c962da8fcb7da2002822f99de2 (diff)
parentc1e5d08d58034c8b53d4789dd32983016f4a5456 (diff)
downloaddotfiles-1ee10e6b733a81389d9718363deb6cf7daec79d3.tar.gz
dotfiles-1ee10e6b733a81389d9718363deb6cf7daec79d3.tar.bz2
dotfiles-1ee10e6b733a81389d9718363deb6cf7daec79d3.tar.xz
dotfiles-1ee10e6b733a81389d9718363deb6cf7daec79d3.zip
Merge branch 'master' of sleepmap.de:config/dotfiles
* 'master' of sleepmap.de:config/dotfiles: .config/SuperCollider/functions.scd: Minor style fixes and adding of a convenience function for MIDI, to map to a given Bus. .config/SuperCollider/functions.scd: Adding SSR specific helper functions. Adding TODOs. .config/SuperCollider/functions.scd: Adding simple helper functions to connect/disconnect JACK clients by name:port_name. Adding function to add additional channels (above hardware in and outputs), which automatically increments Server.local.options.num{In,Out}putBuschannels. .config/SuperCollider/synthdefs.scd: Being more clear in the description. .config/SuperCollider/startup.scd: Introducing the concept of additional channels (to scsynth), above the hardware in and outputs (to be defined before starting the server). Conditionally adding functions.scd, holding custom functions. .config/qtile/config.py: Adding qutebrowser to web tag. Adding Carla and Cadence to audio tag. .config/qtile/config.py: Adding WIP for retrieving and killing compton on demand. Adding call to DIY backlight script call, instead of xbacklight.
Diffstat (limited to '.config/SuperCollider')
-rw-r--r--.config/SuperCollider/functions.scd172
-rw-r--r--.config/SuperCollider/startup.scd7
-rw-r--r--.config/SuperCollider/synthdefs.scd4
3 files changed, 181 insertions, 2 deletions
diff --git a/.config/SuperCollider/functions.scd b/.config/SuperCollider/functions.scd
new file mode 100644
index 0000000..3f27e31
--- /dev/null
+++ b/.config/SuperCollider/functions.scd
@@ -0,0 +1,172 @@
+postln('Loading custom functions.');
+
+/*
+ * JACK specific helper functions
+ * TODO: move to Quark
+ */
+// disconnect a port
+~jackDisconnectPort = {
+ arg source, sourceChannel, destination, destinationChannel;
+ ("jack_disconnect "++source++":"++sourceChannel++" "++destination++":"++destinationChannel).unixCmd({
+ arg exitCode;
+ if(exitCode != 0, {
+ postln("Disconnecting "++source++":"++sourceChannel++" from "++destination++":"++destinationChannel++" was unsuccessful!");
+ });
+ });
+};
+
+// connect a port
+~jackConnectPort = {
+ arg source, sourceChannel, destination, destinationChannel;
+ ("jack_connect "++source++":"++sourceChannel++" "++destination++":"++destinationChannel).unixCmd({
+ arg exitCode;
+ if(exitCode != 0, {
+ postln("Connecting "++source++":"++sourceChannel++" from "++destination++":"++destinationChannel++" was unsuccessful!");
+ });
+ });
+};
+
+// returns the amount of ports of a given client
+~jackClientPorts = {
+ arg clientName;
+ ("jack_lsp "++clientName++"| wc -l").unixCmdGetStdOut.asInt;
+};
+
+/*
+ * SuperCollider specific helper functions
+ *
+ */
+// adds one or more channels to Server.local.options.num{In,Out}putBusChannels
+// makes the tuple available in ~additionalChannels Dictionairy
+~addAdditionalChannels = {
+ arg type, name, channels;
+ if( (name.isKindOf(Symbol) && channels.isArray), {
+ switch (type,
+ \input, {
+ ~additionalChannels.at(\inputs).add(name -> channels);
+ postln("Added additional input channels for '"++name++"': "++channels.asString);
+ Server.local.options.numInputBusChannels = Server.local.options.numInputBusChannels + channels.size;
+ postln("Setting numInputBusChannels to "++Server.local.options.numInputBusChannels);
+ },
+ \output, {
+ ~additionalChannels.at(\outputs).add(name -> channels);
+ postln("Added additional output channels for '"++name++"': "++channels.asString);
+ Server.local.options.numOutputBusChannels = Server.local.options.numOutputBusChannels + channels.size;
+ postln("Setting numOutputBusChannels to "++Server.local.options.numOutputBusChannels);
+ },
+ { error("Expecting \input or \output as type, got "++type.asString);
+ });
+ },{
+ error('Expecting type Symbol for name and type Array for channels.');
+ });
+};
+
+/*
+ * SSR specific helper functions
+ * TODO: move to Quark
+ */
+
+// sets up the necessary OSC connection for an existing local or remote SSR
+// instance, subscribes to it and returns the NetAddr associated with it
+~ssrSetupOSC = {
+ arg host="localhost", port=50001;
+ var ssr;
+ // set ssr of the client instance
+ ssr = NetAddr(host, port);
+ // answer /poll messages with an /alive answer
+ OSCdef(
+ \pollreply,
+ {
+ arg msg, time, addr, recvPort;
+ ~ssr.sendMsg("/alive");
+ },
+ '/poll',
+ ssr
+ );
+ // subscribe to server with MessageLevel::SERVER
+ ssr.sendMsg("/subscribe", $T, 2);
+ ssr;
+};
+
+// clears the SSR scene, unsubscribes from the instance and removes alive
+// answers OSCdef
+~ssrDismantleOSC = {
+ arg ssr;
+ if (ssr.isKindOf(NetAddr), {
+ // remove all sources
+ ssr.sendMsg("/scene/clear");
+ // unsubscribe from server
+ ssr.sendMsg("/subscribe", $F);
+ // disable alive answers
+ OSCdef(\alive).disable;
+ });
+};
+
+// adds a source to an SSR instance
+~ssrAddSource = {
+ arg ssr, name, model = "point", port, x = 0.0, y = 0.0, orientation = 0.0,
+ gain = 0.0, movability = $F, orientationMovability = $F, mute = $F;
+ if (ssr.isKindOf(NetAddr), {
+ if (name.isString, {
+ if (model.isString, {
+ if (port.isString, {
+ ssr.sendMsg("/source/new", name, model, port, x, y, orientation,
+ gain, movability, orientationMovability, mute)
+ },{
+ error("The port argument is not of type String: "++port.class);
+ });
+ },{
+ error("The model argument is not of type String: "++model.class);
+ });
+ },{
+ error("The name argument is not of type String: "++name.class);
+ });
+ },{
+ error("The ssr argument is not of type NetAddr: "++ssr.class);
+ });
+};
+
+/*
+ * MIDI specific helper functions
+ * TODO: move to Quark
+ */
+
+// map inputs of a given MIDI device's control messages to the values on a
+// control Bus
+~midiControlToBus = {
+ arg key, msgNum, chan, uid, bus;
+ if(key.isKindOf(Symbol),{
+ if((msgNum.isArray),{
+ if (chan.isInteger, {
+ if (uid.isInteger, {
+ if (bus.isKindOf(Bus), {
+ MIDIdef.new(
+ key: key,
+ func: {
+ arg ...args;
+ bus.setAt(
+ msgNum.indexOf(args[1].asInteger),
+ args[0].asInteger.lincurve(0, 127, 0.0, 1.0, 4, nil)
+ );
+ },
+ msgNum: msgNum,
+ chan: chan,
+ msgType: \control,
+ srcID: uid
+ );
+ },{
+ error('Argument bus must be of type Bus: '++bus.class);
+ });
+ },{
+ error('Argument uid must be of type Integer: '++uid.class);
+ });
+ },{
+ error('Argument chan must be of type Integer: '++chan.class);
+ });
+ },{
+ error('Argument msgNum must be of type Array: '++msgNum.class);
+ });
+ },{
+ error('Argument key must be of type Symbol: '++key.class);
+ });
+};
diff --git a/.config/SuperCollider/startup.scd b/.config/SuperCollider/startup.scd
index 4bf8669..1bc834d 100644
--- a/.config/SuperCollider/startup.scd
+++ b/.config/SuperCollider/startup.scd
@@ -87,9 +87,12 @@ if(PathName("/dev/fw1").isFile, {
};
});
});
+~additionalChannels = Dictionary.with(*[\inputs -> Dictionary.with(*[]), \outputs -> Dictionary.with(*[])]);
Server.local.options.numInputBusChannels = ~audioInterfaceOptions.at(\numInputs);
Server.local.options.numOutputBusChannels = ~audioInterfaceOptions.at(\numOutputs);
postln("Loaded settings for: "++~audioInterfaceOptions.at(\name));
+postln("Additional channels: "++~additionalChannels.at(\inputs).values++"/ "++~additionalChannels.at(\outputs).values);
+
//postln("Initializing and connecting MIDI devices.");
//MIDIClient.init;
//MIDIIn.connectAll;
@@ -98,3 +101,7 @@ postln("Loaded settings for: "++~audioInterfaceOptions.at(\name));
if (File.exists(Platform.userConfigDir++"/synthdefs.scd"), {
File.readAllString(Platform.userConfigDir++"/synthdefs.scd").interpret;
});
+
+if (File.exists(Platform.userConfigDir++"/functions.scd"), {
+ File.readAllString(Platform.userConfigDir++"/functions.scd").interpret;
+});
diff --git a/.config/SuperCollider/synthdefs.scd b/.config/SuperCollider/synthdefs.scd
index 4a75b4c..51d320d 100644
--- a/.config/SuperCollider/synthdefs.scd
+++ b/.config/SuperCollider/synthdefs.scd
@@ -1,6 +1,6 @@
postln("Adding custom SynthDefs");
-// route 8 Ins to Out
+// route 8 Ins to 8 Outs
SynthDef(\route8BussesToOut, {
arg in=0,
volume=#[0,0,0,0,0,0,0,0],
@@ -25,7 +25,7 @@ SynthDef(\filter8Rumble, {
);
}).add;
-// Mix down SoundIns to one
+// Mix down SoundIns to one Out
SynthDef(\mix4BussesToOut, {
arg in=#[0,1,2,3],
volume=#[0,0,0,0],