[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [sc-users] A method.chaining idiom for livecoding?




When not only scrambling one would also want to define the number of choices.
I'd rewrite Prandc with a length arg:

Prandc : ListPattern {
var <>length;

*new { arg list, repeats = inf, length;
^super.new(list, repeats).length_(length ?? { list.size })
}

embedInStream { arg inval;
var item, stream;
var localList = { list.choose } ! length;

repeats.value(inval).do({ arg j;
localList.size.do({ arg i;
item = localList.wrapAt(i);
inval = item.embedInStream(inval);
});
});
^inval;
}
}


// the wrapper has to be adapted

+ ArrayedCollection {
    prandc {|repeats=inf, length|
        ^Prandc(this, repeats, length);
    }
}

After recompile:

Pbindef(\a, \note, (0..7).prandc(2, 4).repeat, \dur, 0.15).play

Pbindef(\a, \note, (0..7).prandc(3, 4).repeat, \dur, 0.15).play

Pbindef(\a, \note, (0..7).prandc(2, 3).repeat, \dur, 0.15).play


// with no length passed the array length is taken

Pbindef(\a, \note, (0..7).prandc(2).repeat, \dur, 0.15).play


Greetings

Daniel

-----------------------------
http://daniel-mayer.at
-----------------------------