Skip to content

Instantly share code, notes, and snippets.

@catfact
catfact / cut_sync.lua
Last active January 30, 2025 19:00
minimal stereo looper to test softcut voice drift
--- test softcut voice sync
--- extremely basic stereo looper
---
--- K2: toggle recording
--- K3: reset to loop start
local s = softcut
local BUFFER_OFFSET = 0.1

//---------------------------------------------------- //--- state variables and parameters

n = 8; // number of "beats" (really 1/8 notes i guesss) d = 6; // ticks per beat. should be LCM of all desired possible divisions

//-- main sequence data, an array of beats q = Array.fill(n, {( activeDown: false, // active on "downbeat"? activeOff: false, // active on "offbeat"?

~nfftpoints = 2048;
~nfftbands = (~nfftpoints / 2) + 1;
s = Server.default;
s.waitForBoot {
SynthDef.new(\freeze_smear_magbands_stereo, {
var input = In.ar(\in.kr, 2);
var chain = FFT(LocalBuf(~nfftpoints.dup, 1), input);
var frozen = PV_MagFreeze(chain, \freeze.kr(0));
local cc_desc = {}
describe_midi_cc = function(num) return cc_desc[num] end
cc_desc[. 0] = "Bank Select (MSB)"
cc_desc[ 1] = "Modulation Wheel"
cc_desc[ 2] = "Breath controller"
cc_desc[ 3] = "Undefined"
cc_desc[ 4] = "Foot Pedal (MSB)"
cc_desc[ 5] = "Portamento Time (MSB)"
//--------------
// describe one thing
/*
first difficulty: classes
SC has a flexible and heterogenous class system, with innumerable classes inherited from `Object`, compared to the limited number of data types in MATLAB. there is no concept of primitive or literal types.
so, our "describe" function needs to explicitly handle types of objects for which numerical description makes sense.
@catfact
catfact / scdoc.css
Created April 7, 2024 16:36
wip - matching dark theme for scide help
*, *::before, *::after {
box-sizing: inherit;
}
html, body {
position: relative;
box-sizing: border-box;
height: 100%;
padding: 0;
margin: 0;
@catfact
catfact / delay_micro
Last active April 5, 2024 00:38
scrappy interpolated delay in JSFX
// This effect Copyright (C) 2024 Ezra Buchla
// License: CC BY-SA 4.0 - https://creativecommons.org/licenses/by-sa/4.0/deed.en
desc: micro delay
// tags: delay
// author: a moth object
slider1:0<0,1000,1>Integer Sample Delay
slider2:0<0,1,0.001>Sub-sample Interpolation
slider3:0<0,2,1>Interpolation Mode
postln("stereoize hello");
s = Server.default;
s.waitForBoot {
r = Routine {
// note that the bands here are not phase-corrected...
SynthDef.new(\splitDelay, {
@catfact
catfact / Engine_AmpPollTest.sc
Last active April 1, 2024 18:33
norns amplitude poll test
Engine_AmpPollTest : CroneEngine {
var <synth;
*new { arg context, doneCallback;
^super.new(context, doneCallback);
}
alloc {
synth = SynthDef.new(\amp_poll_test, {
arg out=0, amp=0.125, which = 0;
@catfact
catfact / chimes.scd
Last active April 3, 2024 03:04
sines and noise windchimes
s = Server.default;
s.waitForBoot {
r = Routine {
SynthDef.new(\sine_pair_perc, {
var hz = \hz.kr(200);
var beatrate = \beatrate.kr(2);
var beatrate_2 = beatrate/2;
var amp = \amp.kr(-30.dbamp);