hey, im trying to subdivide a phase by a sequence of divisions. First i create a measure phase running at 120 bpm. I then create a step phase by multiplying by the steps per measure and wrap between 0 and 1. I create triggers from these phases with rampToTrig. I then use a Demand sequence of durations triggered by the step trigger and create the event phases by using the measure phase multiplied by the steps per measure and divided by the durations and wrap it between 0 and 1. For some sequences this seems to work fine for others not and i have no idea why that is:
(
var rampToTrig = { |phase|
var history = Delay1.ar(phase);
var delta = (phase - history);
var sum = (phase + history);
var trig = (delta / sum).abs > 0.5;
Trig1.ar(trig, SampleDur.ir);
};
{
var measurePhase, measureTrigger, stepPhase, stepTrigger, durations, eventPhase, eventTrigger;
var plotScale = 100;
var bpm = 120 * plotScale;
var beatsPerSec = bpm / 60;
var beatsPerMeasure = 4;
var measureRate = beatsPerSec / beatsPerMeasure;
var stepsPerMeasure = 12;
// measure phase & trigger
measurePhase = (Phasor.ar(DC.ar(0), measureRate * SampleDur.ir) - SampleDur.ir).wrap(0, 1);
measureTrigger = rampToTrig.(measurePhase);
// step phase & trigger
stepPhase = (measurePhase * stepsPerMeasure).wrap(0, 1);
stepTrigger = rampToTrig.(stepPhase);
//durations = Demand.ar(stepTrigger, 0, Dseq([3, 3, 3, 2, 2, 1, 3, 3, 3, 3, 3, 3], inf));
durations = Demand.ar(stepTrigger, 0, Dseq([3, 3, 3, 3, 3, 3, 2, 2, 1, 3, 3, 3], inf));
// create event triggers from sequence of durations
eventPhase = (measurePhase * stepsPerMeasure / durations).wrap(0, 1);
eventTrigger = rampToTrig.(eventPhase);
[measurePhase, stepPhase, eventPhase];
}.plot(0.03);
)
works perfectly for this one: [3, 3, 3, 3, 3, 3, 2, 2, 1, 3, 3, 3]
but not for the uncommented other one: [3, 3, 3, 2, 2, 1, 3, 3, 3, 3, 3, 3]
Can someone tell me how to fix that? thanks