whip up something that wraps around a tanh approximation with overdrive control
make it possible to manually and automatically seed sndkit from LIL
convert chowkick into sndkit node
chowkick is a kick plugin under a BSD license. it would be neat to extract the core DSP code from the JUCE plugin code, wrap it into a sndkit node, and then reduce the C++ code into ANSI C.
2021-09-10 09:32:14: clearly, this kick is not something I am going to have time for this month. will have to push aside for now.
2021-09-10 09:22:53: added the chowdsp utilities, which is where I think the WDF utilities are.
2021-09-10 09:16:40: the pulseshaper has all the circuit stuff. uses WDFs from another project I think.
2021-09-10 09:10:13: chowkick outfilter
2021-09-10 09:09:42: chowkick resonantfilter
2021-09-10 09:09:10: chowkick pulseshaper
2021-09-10 09:08:50: chowkick trigger
2021-09-10 09:06:55: ah okay. I don't think I'll need to compile this code. the DSP bits are quite simple. trigger goes into pulseshaper which goes into resonate filter, which goes into an 'outputfilter' and then a DC blocker. there's also work to account for polyphony. this will be discarded.
2021-09-10 09:02:00: peaking at the code. seeing if I can get the DSP code to compile without the JUCE plugin bits.
2021-09-10 09:24:25: this is going to have to be rewritten. from what I see so far, this looks like a thing that takes MIDI signals and turns them into gate signals. for the pulseshaper.
2021-09-10 09:25:30: this is the most complicated bit, and is where the WDFs are. the best course of action here is to reduce the C++ code to a point where it builds okay on my system, then reduce to C.
2021-09-10 09:25:53: this resonant filter looks like a biquad at first glance.
2021-09-10 09:27:19: another biquad, possibly a lowpass filter from the looks of it.
port hexwave into sndkit
it's a really neat sounding technique and is part of the stb library collection, so it is public domain.
2021-08-03 08:52:41: code: https://github.com/nothings/stb/blob/master/stb_hexwave.h.
2021-08-03 08:52:29: demo video https://www.youtube.com/watch?v=hsUCrAsDN-M
port soundpipe to sndkit
this is a long-term task. I eventually want every module in soundpipe available in sndkit. Some will be ported to public domain literate programs, others will just be C code with an MIT license.
2021-07-26 20:38:53: maybe someday Ill have a voc redux as an improvement to tract.
2021-07-26 20:36:44: stuff that I think I could port without issue: adsr, butterworth filters, clamp, clock, compressor, crossfade, delay, diode, dmetro, expon, line, loadwav, maygate, noise, paulstretch, peaklim, randh, saturator, scrambler, tadsr, tdiv, tenv, tenv2, tenvx, tgate, thresh, tseq...
2021-07-26 20:34:22: ones that aren't worth holding onto or are FAUST-based: autowah (FAUST), bitcrush (needs to be re-written), bl-stuff (faust, also blep replaces them), count (too basic/weird), dtrig, incr, jcrev (FAUST), nsmp, phaser, prop (!gest works better), randmt, random, reverse, sdelay, spa, sparec, tread, zitarev (FAUST)
2021-07-26 20:31:18: loosely glancing at the soundpipe folder the ones that stick out are: pinknoise, brown, talkbox, verbity, lpc.
2021-07-26 20:29:12: FAUST-derived stuff is not getting ported, unless I can reverse engineer them (but I do not intend to). some of my old stuff is a bit silly and not worth keeping. When you factor those out, there's very little that will remain as "code only".
make a boilerplate function that frees cables and frees data for nodes
the destroy function in patchwerk is used so frequently that it would be worth creating a wrapper around it. Also, maybe memory allocation stuff as well?
create bitcrush algo
the current soundpipe module is broken and not worth repair (totalled). it would be better to build another one from scratch.
2021-03-30 22:01:20: should downsampling be a normalized value so that it can be sample-rate independant? I'm going to say no for now because the soundpipe bitcrush wasn't.
2021-03-30 21:59:02: yeah. I think that makes sense. bit depth all comes down to reducing noise floor. and noise floor happens as you strip away bits that are LSB. it was just a bit counter-intuitive for me for some reason.
2021-03-30 21:56:52: bit reduction can be done with a shift I think? but is it really about losing LSBs?
2021-03-30 21:53:58: downsampling is done via a sample and hold. the counter can be managed using a phasor. aliasing is desired.
2021-03-30 21:51:29: a bitcrusher actually does two things: it truncates the bit depth, and it downsamples. Both are done in an intentionally crude way.
add error codes to sndkit core
it is going to be difficult to know what goes wrong when things go wrong. adding specific error codes with canned messages will make life easier.
a cross-fade looping sampler with adjustable crossfade times and pitch control.
2021-01-31 10:59:19: If I can't figure out continuous adjustment, having something that dynamically produces a crossfade at run-time is good enough I guess. Since I added (crate), I've been able to mess around with samples before and being able to turn any sound into a seamless texture is exciting to me.
2021-01-31 10:57:38: I already have a static crossfade loop generator (cfloop). I want this one to have seamlessly adjustable crossfade looping abilities. Being able to do that continuously without clicks is what is interesting to me. I'm sure there may be a clever way to do this, I just haven't figured it out.
low shelf filter based on the audio EQ cookbook
2021-01-31 11:02:47: from an educational standpoint, it might be useful to structure the writeup so that it starts with the math equation, and ends up in C code.
2021-01-31 11:02:09: all it is is a biquad filter with the right coefficients. The coefficients would come from the audio EQ cookbook, which I've already rewritten in TeX for myself. Those could be a nice part of the page.
2021-01-31 11:01:08: a low shelf filter is more useful to me than a high shelf filter right now, so this comes first.
high shelf filter based on the audio EQ cookbook
stringer is a string resonator filter
2021-07-10 08:03:24: I miss having something like this.
use pikchr to draw diagrams in sndkit
2021-08-23 20:33:55: wow, I've really lost interest in this haven't I?
2021-03-04 09:37:56: dynamically write pikchr files
2021-03-04 09:36:45: import pikchr into sndkit
2021-03-04 09:34:56: display SVG files as sndkit figures
2021-03-04 09:34:12: create pikchr diagram for swell
2021-03-04 09:33:57: I really need to just make a diagram for swell to learn how the pikchr language works.
2021-02-12 09:34:52: the hard part in pikchr is learning the syntax. but I do have a simple usecase that would be very helpful. swell is filter that is very easy to explain with a flowchart.
create pikchr diagram for swell
2021-03-09 11:24:12: had an initial go at it. it looks like crap, but it is progress.
2021-03-09 09:56:14: an initial flowchart with the right boxes, text, and arrows. icons and other bits would be nice to have for later.
2021-03-09 09:55:23: going to try to make a flowchart for swell today.
2021-03-08 09:10:08: documentation for pickhr https://pikchr.org/home/doc/trunk/doc/userman.md
display SVG files as sndkit figures
dynamically write pikchr files
sparsenoise is will fire off random impulses. pretty much velvet noise I think?
this is basically a variable delay line that stays in sync via an external clock signal.
create fixed-point phasor page.
this component is used so frequently, it would be helpful to have an informational page about this.
2021-02-10 15:59:06: this should be a fixed vs floating point phasor page. the key difference is how the phasor is reset. fixed point is a bit more efficient. Beyond that, the two are pretty identical.
2021-02-07 10:16:16: lots of older computer music algorithms use fixed point precision phasors, and I have no intention of updating those to be floating point. what I'm interested in is: is it worth the trouble using fixed point on new algorithms?
2021-02-07 10:15:17: I've been saying that it is less prone to weird numerical errors compared to floating point. I don't know how true that actually is. Will look into it.
2021-02-07 10:14:37: I'm going to get to the bottom of this: is a fixed point phasor actually meaningful in any way on modern hardware and compilers?
create coding conventions page
There are definitely patterns and conventions that I follow. It would be good to create a formal page on this to document the consistency.
create LPF algorithm
create a resonante lowpass filter based on the one found in ChucK. Works great for making click sounds.
a 4 operator FM voice designed to be highly flexible.
2021-07-23 20:24:51: pushing this aside for a while I guess.
2021-02-12 09:40:03: I want this FM oscillator to be keep me interested for a while. Each operator should be able to take in wavetables of arbitrary size. I should also be able to morph between an arbitrary set of wavetables, possibly with arbitray sizes. Feedback control will be a global knob. Since I want different configurations, it seems like any other solution would be too messy.
port plateau DSP to patchwerk node
see playground/plateau for more deets. the idea is to get the original C++ running, then to make a version of it in ANSI C later.
valp4 is a Virtual-Analogue Low-Pass 4-pole filter
2021-07-23 20:35:37: this feels less pressing to me, so I'm removing it from the list. wavetables and FM and phase distortion is more interesting to me anyways.
2021-07-05 12:17:33: I also want to consult Zavalishin again, and try to see if I can grok the TPT stuff. I seem to recall things making sense at one point for valp1. Hopefully I can understand things again, and keep it long enough in my head to write it down!
2021-07-05 12:13:48: it seems nonmateria has done the heavy lifting of porting Pirkle's C++ code to C: https://codeberg.org/nonmateria/folderkit/src/branch/main/src/dsp/va_filter.c. I may end up turning this into a more generic
vafiltthat can be configured for different filter types, similar to how blep is configured for different waveforms.
2021-03-02 14:00:28: this needs to be examined more closely. similar to growl or bigverb, this has a lot of underlying components.
2021-02-12 09:19:23: I wrote a comment about this, but on the wrong task. will pirkle has a C++ implementation that is worth examining. It is from the same Art of VA filter design book. My version would ported to ANSI C, and of course would give credit to Pirkle.
an implementation of the famous paulstretch algorithm. this code already exists in soundpipe, it just needs to be rewritten as a literate program.
jitseg hopes to be a jitter signal generator
2021-02-23 16:23:50: now that I am looking at it more critically, I'm putting this aside for now. It is already very similar to rline, and there are more important algorithms worth implementing.
2021-02-23 10:42:29: this one will be really quick to write up I think. I'm going to hold off until I get a better API in place for local testing.
2021-02-23 10:29:19: writing some initial words now.
2021-02-12 09:29:44: no, there is no initial writings on this. I will have to fix that.
2021-02-12 09:28:11: do I even have any words for this yet?
2021-02-07 09:53:08: jitseg is actually a very small algorithm that will end up being under 100 lines of C. shouldn't be too hard to right about. the most complex part is the internal RNG to write about.
2021-01-31 10:53:50: there is some initial working code for this. maybe even a few words and outlines.