sndkit TODO

sndkit TODO

A dynamically generated list of public-facing TODO items for sndkit. The TODO list is managed using this wiki's zetdo, using the state TODO-sndkit.

create tanhclip

UUID: #f30cfcd7.

whip up something that wraps around a tanh approximation with overdrive control

make it possible to manually and automatically seed sndkit from LIL

UUID: #d324715f.

convert chowkick into sndkit node

UUID: #31a59826.

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.

chowkick trigger

UUID: #3667e868.

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.

chowkick pulseshaper

UUID: #e5d0f6b3.

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.

chowkick resonantfilter

UUID: #3367c482.

2021-09-10 09:25:53: this resonant filter looks like a biquad at first glance.

chowkick outfilter

UUID: #76b11e01.

2021-09-10 09:27:19: another biquad, possibly a lowpass filter from the looks of it.

port hexwave into sndkit

UUID: #5b744390.

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

UUID: #8222e6fc.

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

UUID: #a8b39cbf.

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

UUID: #f2945ac3.

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

UUID: #317b788d.

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.

cflooper

UUID: #a1e9dfbb.

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.

lowshelf

UUID: #016662a5.

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.

highshelf

UUID: #ba469f19.

high shelf filter based on the audio EQ cookbook

stringer

UUID: #706c040c.

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

UUID: #d4da5c0c.

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

UUID: #d8de5615.

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

UUID: #845c5c44.

dynamically write pikchr files

UUID: #e7785f38.

sparsenoise

UUID: #27afc91c.

sparsenoise is will fire off random impulses. pretty much velvet noise I think?

clock-synced delay

UUID: #53ea1b63.

this is basically a variable delay line that stays in sync via an external clock signal.

create fixed-point phasor page.

UUID: #ec374b7d.

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

UUID: #8f5d9cc6.

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

UUID: #5583c640.

create a resonante lowpass filter based on the one found in ChucK. Works great for making click sounds.

FM4

UUID: #76f74cad.

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

UUID: #b24e17bf.

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

UUID: #48eecf9c.

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 vafilt that 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.

paulstretch

UUID: #4482dab5.

an implementation of the famous paulstretch algorithm. this code already exists in soundpipe, it just needs to be rewritten as a literate program.

jitseg

UUID: #004ac67a.

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.


home | index