um, ok… well on principle i don’t care to put much time into convincing anyone of the “musical utility” of anything.
but real quick here is a dumb demo of a sinewave arpeggio. pitch is the output of a logistic map, scaled to mid [48, 72] and quantized. parameter is scrubbing up and down in increments of 1/100th of the range.
this is in supercollider but is numerically equivalent to the TT code. this is using minimum R=3.0 as suggested by whoever suggested it, though i think its a little low since as you can hear, the output tends stay pretty predictable over most of the param range.
i don’t know if this is musically appealing to you, but i hypothesize that people exist who like to do this kind of thing.
SC code
s = Server.local;
s.waitForBoot {
x = 0.77;
r = 3.0;
~set_r_norm = { arg rnorm;
r = rnorm.linlin(0, 1, 3.0, 3.999);
};
~iter = {
x = r*x*(1-x);
x
};
~rnorm = 0.0;
~rnorm_inc = 0.01;
~rout = Routine {
var hz;
inf.do {
~iter.value;
~rnorm = ~rnorm + ~rnorm_inc;
if(~rnorm > 1.0, { ~rnorm = 1.0; ~rnorm_inc = -0.01; });
if(~rnorm < 0.0, { ~rnorm = 0.0; ~rnorm_inc = 0.01; });
~set_r_norm.value(~rnorm);
r.postln;
hz = x.linlin(0, 1.0, 48, 72).round.midicps;
[x, hz].postln;
{ (SinOsc.ar(hz) * -12.dbamp
* EnvGen.ar(Env.perc(0.125), doneAction:2)
).dup }.play;
0.125.wait;
} }.play;
};
/*
s.prepareForRecord;
s.record;
~rout.stop;
s.stopRecording;
*/
i’ve already “taken a stab” at the API impliclty, by writing the code. i think it’s pretty simple and yall are seirously overhtinking it.
the state input and output is always [-10k, 10k].
the param input is [0, 10k]. (i didn’t think 100 steps was enough but i think 10000 steps is plenty and 100000000 steps is total overkill.)
if type is LOGISTIC, the output will always be positive.
for LOGISTIC and CUBIC, increasing the parameter generally increases how “random” the output seems. for HENON it’s more unpredictable, if you want to explore more unknown territory. (which some of us do.)
i really have no preference as to whether you want to split them up or have a mode switch, just trying to help by adding the update formulae.
i’m a little annoyed. like, just because you don’t quite understand this doesn’t make it useless. if you want to understand it better you could try downloading the test build or cloning the fork and playing with it for a few minutes.