help with genexpr syntax
hi all
i'm trying to do quite a simple operation inside genexpr but am struggling with syntax if and functions etc (never really used text based stuff before)
i know what i'm trying to do, and i think my overall method is right, but it seems that this is way too long to be the best way to do it.
i want to (in gen (part of a bigger patch))-
copy a 16 sample buffer (seq1) into 16 sample data (seq2) to be overwritten
look inside the 16 sample buffer
check for the minimum grain, i.e. check sample 1, 3, 5, 7, 9, 11, 13, 15, if any of these !=0 then return grain =16
else if 2 6 10 14 != 0 return 8
else if 4 12 !0 return 4, etc...
then, depending on grain value, i want to scale either every sample from 0 1, to mult 1, or if 8 then every other etc...
here's the long winded codebox (from 49 - 169 doesn't seem to work at all)
i'm just after some general tips as to how i might do some of these calculations more elegantly, and why i can't return multiple things from one if statement
thanks for any help and tips !
Buffer seq1("seq1"); // a 16 step sequence stored in a buffer
Data seq2(19); // modified copy of seq1
mult = in2; // multiplier to multiply every sample according to minimum grain
grain = 0; // minimum division
scan = counter (1,0,16); //
seq1_state = peek (seq1, scan, 0, channels=1);
poke (seq2, seq1_state, scan, 0 , 0 ); // copy seq1 buffer into seq2 data
// look inside buffer seq1 at sample 0, 1, 2, 3, ...... 15
peek0 = peek (seq1, 0, 0, channels=1);
peek1 = peek (seq1, 1, 0, channels=1);
peek2 = peek (seq1, 2, 0, channels=1);
peek3 = peek (seq1, 3, 0, channels=1);
peek4 = peek (seq1, 4, 0, channels=1);
peek5 = peek (seq1, 5, 0, channels=1);
peek6 = peek (seq1, 6, 0, channels=1);
peek7 = peek (seq1, 7, 0, channels=1);
peek8 = peek (seq1, 8, 0, channels=1);
peek9 = peek (seq1, 9, 0, channels=1);
peek10 = peek (seq1, 10, 0, channels=1);
peek11 = peek (seq1, 11, 0, channels=1);
peek12 = peek (seq1, 12, 0, channels=1);
peek13 = peek (seq1, 13, 0, channels=1);
peek14 = peek (seq1, 14, 0, channels=1);
peek15 = peek (seq1, 15, 0, channels=1);
// checks the minimum grain of the sequence
if (peek1 + peek3 + peek5 + peek7 + peek9 + peek11 + peek13 + peek15 != 0) {
grain = 16;
} else if(peek2 + peek6 + peek10 + peek14 !=0) {
grain = 8;
} else if (peek4 + peek12 !=0) {
grain = 4;
} else if (peek8 !=0) {
grain = 2;
} else if (peek0 !=0) {
grain = 1;
} else grain = 0;
// defining mult
mult0 = 0;
mult1 = 0;
mult2 = 0;
mult3 = 0;
mult4 = 0;
mult5 = 0;
mult6 = 0;
mult7 = 0;
mult8 = 0;
mult9 = 0;
mult10 = 0;
mult11 = 0;
mult12 = 0;
mult13 = 0;
mult14 = 0;
mult15 = 0;
// if grain is 16, scale each sample, if 8, scale even, if 4, every 4 etc....
if (grain == 16) {
mult0 = mult;
mult1 = mult;
mult2 = mult;
mult3 = mult;
mult4 = mult;
mult5 = mult;
mult6 = mult;
mult7 = mult;
mult8 = mult;
mult9 = mult;
mult10 = mult;
mult11 = mult;
mult12 = mult;
mult13 = mult;
mult14 = mult;
mult15 = mult;
} else if (grain == 8) {
mult0 = mult;
mult1 = 0;
mult2 = mult;
mult3 = 0;
mult4 = mult;
mult5 = 0;
mult6 = mult;
mult7 = 0;
mult8 = mult;
mult9 = 0;
mult10 = mult;
mult11 = 0;
mult12 = mult;
mult13 = 0;
mult14 = mult;
mult15 = 0;
} else if (grain == 4) {
mult0 = mult;
mult1 = 0;
mult2 = 0;
mult3 = 0;
mult4 = mult;
mult5 = 0;
mult6 = 0;
mult7 = 0;
mult8 = mult;
mult9 = 0;
mult10 = 0;
mult11 = 0;
mult12 = mult;
mult13 = 0;
mult14 = 0;
mult15 = 0;
} else if (grain == 2) {
mult0 = mult;
mult1 = 0;
mult2 = 0;
mult3 = 0;
mult4 = 0;
mult5 = 0;
mult6 = 0;
mult7 = 0;
mult8 = mult;
mult9 = 0;
mult10 = 0;
mult11 = 0;
mult12 = 0;
mult13 = 0;
mult14 = 0;
mult15 = 0;
} else if (grain == 1) {
mult0 = mult;
mult1 = 0;
mult2 = 0;
mult3 = 0;
mult4 = 0;
mult5 = 0;
mult6 = 0;
mult7 = 0;
mult8 = 0;
mult9 = 0;
mult10 = 0;
mult11 = 0;
mult12 = 0;
mult13 = 0;
mult14 = 0;
mult15 = 0;
} else
mult0 = 0;
mult1 = 0;
mult2 = 0;
mult3 = 0;
mult4 = 0;
mult5 = 0;
mult6 = 0;
mult7 = 0;
mult8 = 0;
mult9 = 0;
mult10 = 0;
mult11 = 0;
mult12 = 0;
mult13 = 0;
mult14 = 0;
mult15 = 0;
// scale the samples from seq1 [peek1] and send to data seq2
poke (seq2, (scale (peek0, 0, 1, mult0, 1)), 0, 0);
poke (seq2, (scale (peek1, 1, 1, mult1, 1)), 0, 0);
poke (seq2, (scale (peek2, 2, 1, mult2, 1)), 0, 0);
poke (seq2, (scale (peek3, 3, 1, mult3, 1)), 0, 0);
poke (seq2, (scale (peek4, 4, 1, mult4, 1)), 0, 0);
poke (seq2, (scale (peek5, 5, 1, mult5, 1)), 0, 0);
poke (seq2, (scale (peek6, 6, 1, mult6, 1)), 0, 0);
poke (seq2, (scale (peek7, 7, 1, mult7, 1)), 0, 0);
poke (seq2, (scale (peek8, 8, 1, mult8, 1)), 0, 0);
poke (seq2, (scale (peek9, 9, 1, mult9, 1)), 0, 0);
poke (seq2, (scale (peek10, 10, 1, mult10, 1)), 0, 0);
poke (seq2, (scale (peek11, 11, 1, mult11, 1)), 0, 0);
poke (seq2, (scale (peek12, 12, 1, mult12, 1)), 0, 0);
poke (seq2, (scale (peek13, 13, 1, mult13, 1)), 0, 0);
poke (seq2, (scale (peek14, 14, 1, mult14, 1)), 0, 0);
poke (seq2, (scale (peek15, 15, 1, mult15, 1)), 0, 0);
out1 = mult0;
i edited and it works perfectly now, but i am still very interested to find out what might be better practice in syntax as i'm sure this isn't the best way
thanks