“wavesets” are really a methodology for analysis more than synthesis. e.g., Waldorf’s PPG waveset is a dataset, not a synthesis engine, and it is patented. trevor wishart’s work with GRM (and the SC classes that implement it) are about (e.g.) chopping up an input soundfile by zero crossings, and sorting the resulting chunks by various metrics. the results can be used as wavetables or grains or whatever.
saying we need to “implement waveset synthesis” on norns doesn’t really mean much to me. creating wavesets seems like a process far more suited to a desktop interface (big screen, M+K, &c.) allowing norns to use waveset data for WT/grains is of course feasible if there is some standard format or a particular set that is of interest. (like, doesn’t Reaktor have a waveset format? anyone use that?)
i’ll point out that the PolySub engine has modulation busses for each parameter (of course.) additionally you can disconnect a given voice from the mod busses with the solo command, so it is polytimbral. mod busses have arbitrary slew. so things like “random”, “lfo”, “envelope” can naturally be implemented on the scripting side.
seems like by “mod bus” you really mean that you want pre-made modulation signal generators.
PolySub was intended to be sort of a template; it is i think i a pretty clean approach to a polyphonic engine with basically arbitrary oscillator types and polyphonic modulation busses. @lazzarello made effective use of this template to make the FM7 engine and i encourage similar efforts!
likewise, @jah’s CroneGenEngine wraps an arbitrary synthdef in a polyphonic framework and generates glue for it. so if you want to play with a specific “wacky” UGen, it’s very easy to use that.
there is also a raw 64-voice sinewave engine with chebyshev shaping. it is one way to make “harmonic oscillators” or whatever.
finally, to me the “experimental” nature of a sound is rarely about the synthesis technique. polytimbrality, and most especially the complete lack of an imposed tuning system give you a lot of freedom even with simple waveforms.
honestly i’m totally cluless as to what “sort of thing” that is. seems like a number of things that are not very related, some of which are already present (e.g. there are at least a couple versions of tuned “resonators” for realtime audio input.) but sure, more stuff would be cool.
anyways, with all that said i think i will add a few more oscillator types to PolySub to complement the traditional bandlimited shapes that are there. thinking of this:
-
at least two wavetables. these also need commands to fill them. could add AKWF data but it’s good to be able to have arbitrary fill functions. have to think about this since the ideal would be to accept arbitrary [freq, amp, phase] arrays, but the current lua->SC glue doesn’t support arrays or variadic arguments. good first start might be commands to define different kinds of sequences (odd/even harmonics with decay, randomized, &c)
-
at least one noise flavor (maybe Dust2 but probably something else as well. pink noise is already there.)
-
at least one chaotic oscillator (probably cubic, which needs a new UGen, or lorenz which is less nicely parameterized for timbre sweeps IMHO.)
-
PD oscillator. (really? this is interesting? like CZ-series or is there some other reference point i’m not aware of?)
this is enough stuff that you don’t want to be computing it all at once and xfading between. it would have to be a separate synthdef for each oscillator type, selected at voice creation time. (not a big deal)
-
i suppose a dedicated LFO would also be helpful for some (though i’d personally do that in the script)
-
and i guess a per-voice shape modulation envelope. (hm, thought i’d already added that but remembered wrong.)
-
add commands to allow parameters of a solo’d voice to be modulated explicitly.
side note on wavetable synthesis here: there is a big difference between “naively” looping a single wavetable buffer, and the kind of multisampled wavetable used in waldorf synths and similar softsynths. the former lets you alias like crazy a la 259e [red/twisted] or VOsc.ar.
the latter means making many different brickwall’d versions of each wavetable, and choosing them based on playback rate to avoid aliasing; this is straightforward, but much more memory intensive and a bit complex if you want to use arbitrary data. this is the approach you get in PPG or korg wavestation; it’s clean w/r/t aliasing but that older hardware often had to make bit-depth and overall SR compromises and this is gives you some “grit.”
for the Sines engine (which is just what it says - tons of sines) i’ve been meaning to add a full PM/AM modulation matrix with feedback.
seriously though. take this as an opportunity to find out just how strange you can get with full control over all parameters of simple waveform + filter in a real scripting engine that includes timing. IMHO the answer is “as strange as you want.”
add lee’s 8-op FM with feedback and, i dunno… seems like there’s a lot to explore.
i’d also suggest that a way to make sequencers more “experimental” would be abstracting the actual sequencing logic apart from the mapping of sequencer output. the fact that the typical numerical transform is through MIDI notes seems very limiting. (similar to what @jlmitch5 says above.)
i’m sorry to say that i am not gonna implement such a digital “modular control” system in lua, myself. my musical practice doesn’t need it, i don’t have a lot of spare time, and the point of building the norns lua system was to make development accessible.
here are the engines right now. thanks to anton especially, some of them are modular, or wrappers for arbitrary synthdefs.
Engine_Glut
Engine_PolySub
Engine_FM7
Engine_Sines
CroneGenEngine
Engine_KarplusRings
Engine_Ack
Engine_SoftCut
Engine_MollyThePoly
Engine_R
Engine_PolyPerc
Engine_Passersby
Engine_TestSine
Engine_Why
you’re right, it’s not a lot. i expected more engine contributions by now (they are pretty straightforward to make!) but maybe we’ll get there.
in the new-crone update, softcut is no longer an engine but an always-available time manipulation stage that can process the output of SC/PD engines. it includes resonant filters, saturation, and can work gracefully on a range of timescales that goes from “looper” to “live wavetable osc”. so maybe that will be interesting.
i think for brian and me, the most compelling use of norns is for live-processing audio input in particular ways that aren’t even easy to accomplish in supercollider or max. hence the large amount of work recently on new-softcut and new-crone. we didn’t expect it to be so popular as a platform for synthesis. i will make the PolySub additions described above, which is not too hard, but ultimately if i’m going to put another large chunk of development time into the DSP side i’d rather work on a really good phase-vocoder-based system to complement new-softcut.