aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.config/SuperCollider/functions.scd172
-rw-r--r--.config/SuperCollider/startup.scd7
-rw-r--r--.config/SuperCollider/synthdefs.scd4
-rw-r--r--.config/qtile/config.py23
4 files changed, 200 insertions, 6 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],
diff --git a/.config/qtile/config.py b/.config/qtile/config.py
index 9c2a19e..c8a535b 100644
--- a/.config/qtile/config.py
+++ b/.config/qtile/config.py
@@ -6,7 +6,8 @@ import os
import re
import subprocess
from libqtile.log_utils import logger
-
+# import psutil
+# import getpass
mod = "mod4"
alt = "mod1"
@@ -18,9 +19,9 @@ terminal = "termite"
drun_launcher = "rofi -show drun"
run_launcher = "rofi -show run"
lock = home+"/bin/xorg_lock"
-brightness_step = "5"
-brightness_up = "xbacklight -inc "+brightness_step
-brightness_down = "xbacklight -dec "+brightness_step
+brightness_step = "2"
+brightness_up = "backlight -i "+brightness_step
+brightness_down = "backlight -i -"+brightness_step
volume_up = home+"/bin/set_volume increase"
volume_down = home+"/bin/set_volume decrease"
volume_toggle = home+"/bin/set_volume toggle"
@@ -153,6 +154,7 @@ matchers = {
Match(wm_class=[
re.compile('Chromium$'),
re.compile('Firefox$'),
+ re.compile('.*qutebrowser$'),
re.compile('TorLauncher'),
re.compile('Tor Browser'),
]),
@@ -196,6 +198,8 @@ matchers = {
re.compile('Ardour'),
re.compile('Audacity'),
re.compile('Calfjackhost'),
+ re.compile('Carla'),
+ re.compile('Cadence'),
re.compile('Ffado-mixer'),
re.compile('Guitarix'),
re.compile('Session Setup'),
@@ -486,3 +490,14 @@ def autostart_conky():
@hook.subscribe.startup_complete
def autostart_compton():
subprocess.call(compton)
+# get_user_processes('compton')
+
+
+# def get_user_processes(process_name):
+# for process in psutil.process_iter(attrs=['name', 'username']):
+# if process.info['username'] == getpass.getuser() and \
+# process.info['name'] == process_name:
+# logger.setLevel(logging.INFO)
+# logger.info(process.pid)
+# logger.info(process.info['name'])
+# logger.setLevel(logging.WARNING)