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
.
add RNG to sndkit core
UUID: #2674354c.
2021-04-16 20:14:49: this could be something that would be pretty easy to implement this weekend. shoudln't take more than 15 minutes to do.
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.
growl
UUID: #d39bbd95.
GROWL is a kind of vowel filter. Would be a good first speech synthesis thing to have: https://github.com/paulbatchelor/GROWL
2021-02-23 16:51:26: a good initial stab words for this. there are a lot of smaller components, so slow and steady wins the race.
2021-02-23 16:25:32: fast tracking this sndkit algo because it is in the spirit of (toys_not_tools). everyone loves a good vowel filter, and hoping this can be the starting point for building generative articulation engines for vocal synthesis.
2021-02-21 08:33:47: components for this include resonator filters, balancers, and a dc blocker.
blep
UUID: #629c4e3f.
a BLEP oscillator based on an implementation by Taylor Holliday
2021-02-23 10:16:38: normally, I prefer to write words before code. but since the code is already written, I've found this approach is less messy.
2021-02-23 10:15:43: I'm finally going to get around to doing this. I have the original C++ code. I will rewrite it in ANSI C, then put it inside of a literate program.
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
use pikchr to draw diagrams in sndkit
UUID: #d4da5c0c.
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.
clkphs
UUID: #f07ddbdb.
given a clock signal, produce an approximate phasor signal.
2021-01-30 16:39:15: I do have words written up for this. It's definitely been a less important thing to do over time.
create parameter caching page
UUID: #11c1cef6.
create a informational wiki page in sndkit that explains what is meant by the term parameterized caching.
create page that explains what is meant by *normalized range*.
UUID: #ba617253.
the concept of a normalized range keeps coming up consistently, and it would be good to have a page that explains what it is and why it is important.
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-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-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.