simple master clock source in BPM. outputs pulses for beat, triplets, fourths and a variable rate multiplier. Remco van der Most BSD lfo.axh 0?BPM:1; if (inlet_reset && r) { Phase = 0; r = 0; } else { if (!inlet_reset) r = 1; freq=(uint32_t)(1<<30)/(22500/BPM); Phase += freq>>2; } outlet_beat= (Phase>0)?1:0; outlet_trips=((Phase*rate1)>0)?1:0; outlet_fours=((Phase*rate2)>0)?1:0; outlet_32=((Phase<<5)>0)?1:0; outlet_64=((Phase<<6)>0)?1:0; outlet_vari1=((Phase*param_vari1)>0)?1:0; outlet_vari2=((Phase*param_vari2)>0)?1:0; outlet_vari3=((Phase*(inlet_vari3+param_vari3))>0)?1:0; outlet_rate3=inlet_vari3<<4; } outlet_timing=(uint64_t)(1<<30)*(1<<17)/freq; outlet_delaybase=(uint64_t)(1<<30)*(1<<17)/freq; outlet_ratebase=freq>>2;]]> uniform distributed (white) noise, triggered generation. Range -64..64 Johannes Taelman BSD >4; ntrig = 0;]]> 0) && !ntrig) { if(val==0){val = ((int32_t)(GenerateRandomNumber()>>5))0)) ntrig=0; outlet_rand= val;]]> uniform distributed (white) noise, k-rate generation. Range 0..(n-1) Johannes Taelman BSD 0) && !ntrig) { if (param_max) val = ((int32_t)(GenerateRandomNumber()% (param_max-1))+1)*6; else val = 0; ntrig=1; } else if (!(inlet_trig>0)) ntrig=0; outlet_v = val;]]> uniform distributed (white) noise, k-rate generation. Range 0..(n-1) Johannes Taelman BSD 0) && !ntrig) { if (param_max) val = 1<<((int32_t)(GenerateRandomNumber()% (param_max))); else val = 0; ntrig=1; } else if (!(inlet_trig>0)) ntrig=0; outlet_v = val;]]> Copies the input to the output at the rising edge of the trigger input. Keeps the output otherwise. Johannes Taelman BSD logic.axh 0) && !ntrig) {latch = inlet_count-inlet_max; ntrig=1;} if (!(inlet_trig>0)) ntrig=0; if(inlet_trig){ outlet_o= latch+inlet_in; } else if(!inlet_trig){outlet_o=inlet_count;}]]> add Johannes Taelman BSD math.axh 0?1:0;]]> add Johannes Taelman BSD math.axh 0?1:0;]]> add Johannes Taelman BSD math.axh 0?1:0;]]> add Johannes Taelman BSD math.axh 0?1:0;]]> add Johannes Taelman BSD math.axh 0?1:0;]]> add Johannes Taelman BSD math.axh 0?1:0;]]> add Johannes Taelman BSD math.axh 0?1:0;]]> add Johannes Taelman BSD math.axh 0?1:0;]]> snare module Remco van der Most BSD env.axh 0){ cnt=___SMMUL(param_hold,cnt-(cnt>>9))<<1; //cnt-=cnt>>3; } else{cnt=0; val = ___SMMUL(val, param_decay)<<1; } shell=___SMMUL(shell,param_shell)<<1; shell-=shell>>8; if ((inlet_trig>0)&&!trg) { phs1=0; bass=0; trg=1; cnt=1<<20; val =1<<27; shell=1<<27; } else if(inlet_trig<1){trg=0;} int32_t p1; MTOFEXTENDED(param_pitch+inlet_pitch,p1) int32_t fm=___SMMUL(shell,param_mod)<<5;]]> >2; switch(param_mode){ case 0: SINE2TINTERP(phs1,r1);r1=r1>>2;break; case 1: r1=phs1>0?phs1:-phs1;r1=-(r1-(1<<30))>>1;break; case 2: r1=-phs1>>2;break; case 3: r1=phs1>0?(1<<29):-(1<<29);break; } int32_t freq; MTOFEXTENDED(__SSAT(param_freq+inlet_pitch+(___SMMUL(shell,param_env)<<5)+(___SMMUL(fm,r1)<<3),28),freq); bass+=freq; SINE2TINTERP(bass,r2) int32_t ts=___SMMUL(r2,val); ts+=___SMMUL(shell,r1); ts=__SSAT(ts+__SSAT(__SSAT(___SMMUL(param_gain,ts),21)<<8,28),28); int32_t tsq31 = ts<<3; int32_t tsq31p3 = ___SMMUL(tsq31,___SMMUL(tsq31,tsq31)); outlet_out = ts + (ts>>1) - (tsq31p3)>>1;]]> snare module Remco van der Most BSD env.axh 0){ cnt=___SMMUL(param_hold,cnt-(cnt>>9))<<1; //cnt-=cnt>>3; } else{cnt=0; val = ___SMMUL(val, param_decay)<<1; } shell=___SMMUL(shell,param_shell)<<1; shell-=shell>>8; if ((inlet_trig>0)&&!trg) { phs1=0; bass=0; trg=1; cnt=1<<20; val =1<<27; shell=1<<27; } else if(inlet_trig<1){trg=0;} int32_t p1; MTOFEXTENDED(param_pitch,p1) int32_t fm=___SMMUL(shell,param_mod)<<5;]]> >2; switch(param_mode){ case 0: SINE2TINTERP(phs1,r1);r1=r1>>2;break; case 1: r1=phs1>0?phs1:-phs1;r1=-(r1-(1<<30))>>1;break; case 2: r1=-phs1>>2;break; case 3: r1=phs1>0?(1<<29):-(1<<29);break; } int32_t freq; MTOFEXTENDED(__SSAT(param_freq+(___SMMUL(shell,param_env)<<5)+(___SMMUL(fm,r1)<<3),28),freq); bass+=freq; SINE2TINTERP(bass,r2) int32_t ts=___SMMUL(r2,val); ts+=___SMMUL(shell,r1); ts=__SSAT(ts+__SSAT(__SSAT(___SMMUL(param_gain,ts),21)<<8,28),28); int32_t tsq31 = ts<<3; int32_t tsq31p3 = ___SMMUL(tsq31,___SMMUL(tsq31,tsq31)); outlet_out = ts + (ts>>1) - (tsq31p3)>>1;]]> snare module Remco van der Most BSD env.axh 0){ cnt=___SMMUL(param_hold,cnt-(cnt>>4))<<1; //cnt-=cnt>>3; } else{cnt=0; val = ___SMMUL(val-(val>>7), param_decay)<<1; } res=___SMMUL(res,param_decay)<<1; res-=res>>8; shell=___SMMUL(shell,param_shell)<<1; shell-=shell>>7; if ((inlet_trig>0)&&!trg) { low = 0; band = 0; res=param_res; trg=1; cnt=1<<20; val =1<<27; shell=1<<27; } else if(inlet_trig<1){trg=0;} int32_t damp = (0x80<<24) - (res<<4); damp = ___SMMUL(damp,damp); int32_t alpha; int32_t freq; MTOFEXTENDED(param_freq+(___SMMUL(shell,param_env)<<3),alpha); SINE2TINTERP(alpha,freq); int32_t p1; MTOFEXTENDED(param_pitch,p1)]]> >1; ns=___SMMUL(ns,___SMMUL(ns,ns)<<1)<<1; ns+=ns>0?-(1<<27):(1<<27); int32_t in1 = ns-(___SMMUL(shell,(ns>>1))<<5); in1=___SMMUL(val,in1)<<5; int32_t notch = in1 - (___SMMUL(damp,band)<<1); low = low + (___SMMUL(freq,band)<<1); int32_t high = notch - low; band = (___SMMUL(freq,high)<<1) + band;// - drive*band*band*band; int32_t ts; switch(param_mode){ case 0: ts=low;break; case 1: ts=band;break; case 2: ts=high;break; case 3: ts=notch;break; } //ts=___SMMUL(ts,val)<<5; ts+=___SMMUL(shell,r1); ts=__SSAT(ts+__SSAT(__SSAT(___SMMUL(param_gain,ts),21)<<8,28),28); int32_t tsq31 = ts<<3; int32_t tsq31p3 = ___SMMUL(tsq31,___SMMUL(tsq31,tsq31)); outlet_out = ts + (ts>>1) - (tsq31p3)>>1;]]> snare module Remco van der Most BSD env.axh 0){ cnt=___SMMUL(param_hold,cnt-(cnt>>4))<<1; //cnt-=cnt>>3; } else{cnt=0; val = ___SMMUL(val-(val>>7), param_decay)<<1; } res=___SMMUL(res,param_decay)<<1; res-=res>>8; shell=___SMMUL(shell,param_shell)<<1; shell-=shell>>7; if ((inlet_trig>0)&&!trg) { low = 0; band = 0; res=param_res; trg=1; cnt=1<<20; val =1<<27; shell=1<<27; } else if(inlet_trig<1){trg=0;} int32_t damp = (0x80<<24) - (res<<4); damp = ___SMMUL(damp,damp); int32_t alpha; int32_t freq; MTOFEXTENDED(param_freq+(___SMMUL(shell,param_env)<<3),alpha); SINE2TINTERP(alpha,freq); int32_t p1; MTOFEXTENDED(param_pitch,p1)]]> >1; ns=___SMMUL(ns,___SMMUL(ns,ns)<<1)<<1; ns+=ns>0?-(1<<27):(1<<27); int32_t in1 = ns-(___SMMUL(shell,(ns>>1))<<5); in1=___SMMUL(val,in1)<<5; int32_t notch = in1 - (___SMMUL(damp,band)<<1); low = low + (___SMMUL(freq,band)<<1); int32_t high = notch - low; band = (___SMMUL(freq,high)<<1) + band;// - drive*band*band*band; int32_t ts; switch(param_mode){ case 0: ts=low;break; case 1: ts=band;break; case 2: ts=high;break; case 3: ts=notch;break; } //ts=___SMMUL(ts,val)<<5; ts+=___SMMUL(shell,r1); ts=__SSAT(ts+__SSAT(__SSAT(___SMMUL(param_gain,ts),21)<<8,28),28); int32_t tsq31 = ts<<3; int32_t tsq31p3 = ___SMMUL(tsq31,___SMMUL(tsq31,tsq31)); outlet_out = ts + (ts>>1) - (tsq31p3)>>1;]]> snare module Remco van der Most BSD env.axh 0){ cnt=___SMMUL(param_hold,cnt-(cnt>>4))<<1; //cnt-=cnt>>3; } else{cnt=0; val = ___SMMUL(val-(val>>7), param_decay)<<1; int32_t tmp=___SMMUL(vil, param_decay)<<1; vil = tmp+(___SMMUL(vil-tmp,param_tail)<<5); } res=___SMMUL(res,param_decay)<<1; res-=res>>8; shell=___SMMUL(shell,param_shell)<<1; shell-=shell>>7; if ((inlet_trig>0)&&!trg) { low = 0; band = 0; res=param_res; trg=1; cnt=1<<20; val =1<<27; vil =1<<23; shell=1<<27; } else if(inlet_trig<1){trg=0;} int32_t damp = (0x80<<24) - (res<<4); damp = ___SMMUL(damp,damp); int32_t alpha; int32_t freq; MTOFEXTENDED(param_freq+(___SMMUL(shell,param_env)<<3),alpha); SINE2TINTERP(alpha,freq); int32_t vl=val>vil?val:vil; int32_t p1; MTOFEXTENDED(param_pitch+inlet_pitch,p1)]]> >1; ns=___SMMUL(ns,___SMMUL(ns,ns)<<1)<<1; ns+=ns>0?-(1<<27):(1<<27); int32_t in1 = ns-(___SMMUL(shell,(ns>>1))<<5); in1=___SMMUL(vl,in1)<<5; int32_t notch = in1 - (___SMMUL(damp,band)<<1); low = low + (___SMMUL(freq,band)<<1); int32_t high = notch - low; band = (___SMMUL(freq,high)<<1) + band;// - drive*band*band*band; int32_t ts; switch(param_mode){ case 0: ts=low;break; case 1: ts=band;break; case 2: ts=high;break; case 3: ts=notch;break; } //ts=___SMMUL(ts,val)<<5; ts+=___SMMUL(shell,r1); ts=__SSAT(ts+__SSAT(__SSAT(___SMMUL(param_gain,ts),21)<<8,28),28); int32_t tsq31 = ts<<3; int32_t tsq31p3 = ___SMMUL(tsq31,___SMMUL(tsq31,tsq31)); outlet_out = ts + (ts>>1) - (tsq31p3)>>1;]]> snare module Remco van der Most BSD env.axh 0){ cnt=___SMMUL(param_hold,cnt-(cnt>>4))<<1; //cnt-=cnt>>3; } else{cnt=0; val = ___SMMUL(val-(val>>7), param_decay)<<1; int32_t tmp=___SMMUL(vil, param_decay)<<1; vil = tmp+(___SMMUL(vil-tmp,param_tail)<<5); } res=___SMMUL(res,param_decay)<<1; res-=res>>8; shell=___SMMUL(shell,param_shell)<<1; shell-=shell>>7; if ((inlet_trig>0)&&!trg) { low = 0; band = 0; res=param_res; trg=1; cnt=1<<20; val =1<<27; vil =1<<23; shell=1<<27; } else if(inlet_trig<1){trg=0;} int32_t damp = (0x80<<24) - (res<<4); damp = ___SMMUL(damp,damp); int32_t alpha; int32_t freq; MTOFEXTENDED(param_freq+(___SMMUL(shell,param_env)<<3),alpha); SINE2TINTERP(alpha,freq); int32_t vl=val>vil?val:vil; int32_t p1; MTOFEXTENDED(param_pitch+inlet_pitch,p1)]]> >1; ns=___SMMUL(ns,___SMMUL(ns,ns)<<1)<<1; ns+=ns>0?-(1<<27):(1<<27); int32_t in1 = ns-(___SMMUL(shell,(ns>>1))<<5); in1=___SMMUL(vl,in1)<<5; int32_t notch = in1 - (___SMMUL(damp,band)<<1); low = low + (___SMMUL(freq,band)<<1); int32_t high = notch - low; band = (___SMMUL(freq,high)<<1) + band;// - drive*band*band*band; int32_t ts; switch(param_mode){ case 0: ts=low;break; case 1: ts=band;break; case 2: ts=high;break; case 3: ts=notch;break; } //ts=___SMMUL(ts,val)<<5; ts+=___SMMUL(shell,r1); ts=__SSAT(ts+__SSAT(__SSAT(___SMMUL(param_gain,ts),21)<<8,28),28); int32_t tsq31 = ts<<3; int32_t tsq31p3 = ___SMMUL(tsq31,___SMMUL(tsq31,tsq31)); outlet_out = ts + (ts>>1) - (tsq31p3)>>1;]]> snare module Remco van der Most BSD env.axh 0){ cnt=___SMMUL(param_hold,cnt-(cnt>>4))<<1; //cnt-=cnt>>3; } else{cnt=0; val = ___SMMUL(val-(val>>7), param_decay)<<1; int32_t tmp=___SMMUL(vil, param_decay)<<1; vil = tmp+(___SMMUL(vil-tmp,param_tail)<<5); } res=___SMMUL(res,param_decay)<<1; res-=res>>8; shell=___SMMUL(shell,param_shell)<<1; shell-=shell>>7; if ((inlet_trig>0)&&!trg) { low = 0; band = 0; res=param_res; trg=1; cnt=1<<20; val =1<<27; vil =1<<23; shell=1<<27; } else if(inlet_trig<1){trg=0;} int32_t damp = (0x80<<24) - (res<<4); damp = ___SMMUL(damp,damp); int32_t alpha; int32_t freq; MTOFEXTENDED(param_freq+(___SMMUL(shell,param_env)<<3),alpha); SINE2TINTERP(alpha,freq); int32_t vl=val>vil?val:vil; int32_t p1; MTOFEXTENDED(param_pitch+inlet_pitch,p1)]]> >1; ns=___SMMUL(ns,___SMMUL(ns,ns)<<1)<<1; ns+=ns>0?-(1<<27):(1<<27); int32_t in1 = ns-(___SMMUL(shell,(ns>>1))<<5); in1=___SMMUL(vl,in1)<<5; int32_t notch = in1 - (___SMMUL(damp,band)<<1); low = low + (___SMMUL(freq,band)<<1); int32_t high = notch - low; band = (___SMMUL(freq,high)<<1) + band;// - drive*band*band*band; int32_t ts; switch(param_mode){ case 0: ts=low;break; case 1: ts=band;break; case 2: ts=high;break; case 3: ts=notch;break; } //ts=___SMMUL(ts,val)<<5; ts+=___SMMUL(shell,r1); ts=__SSAT(ts+__SSAT(__SSAT(___SMMUL(param_gain,ts),21)<<8,28),28); int32_t tsq31 = ts<<3; int32_t tsq31p3 = ___SMMUL(tsq31,___SMMUL(tsq31,tsq31)); outlet_out = ts + (ts>>1) - (tsq31p3)>>1;]]> snare module Remco van der Most BSD env.axh 0){ cnt=___SMMUL(param_hold,cnt-(cnt>>4))<<1; //cnt-=cnt>>3; } else{cnt=0; val = ___SMMUL(val-(val>>7), param_decay)<<1; } res=___SMMUL(res,param_decay)<<1; res-=res>>8; shell=___SMMUL(shell,param_shell)<<1; shell-=shell>>7; if ((inlet_trig>0)&&!trg) { low = 0; band = 0; res=param_res; trg=1; cnt=1<<20; val =1<<27; shell=1<<27; } else if(inlet_trig<1){trg=0;} int32_t damp = (0x80<<24) - (res<<4); damp = ___SMMUL(damp,damp); int32_t alpha; int32_t freq; MTOFEXTENDED(param_freq+(___SMMUL(shell,param_env)<<3),alpha); SINE2TINTERP(alpha,freq); int32_t p1; MTOFEXTENDED(param_pitch,p1)]]> >1; ns=___SMMUL(ns,___SMMUL(ns,ns)<<1)<<1; ns+=ns>0?-(1<<27):(1<<27); int32_t in1 = ns-(___SMMUL(shell,(ns>>1))<<5); in1=___SMMUL(val,in1)<<5; int32_t notch = in1 - (___SMMUL(damp,band)<<1); low = low + (___SMMUL(freq,band)<<1); int32_t high = notch - low; band = (___SMMUL(freq,high)<<1) + band;// - drive*band*band*band; int32_t ts; switch(param_mode){ case 0: ts=low;break; case 1: ts=band;break; case 2: ts=high;break; case 3: ts=notch;break; } //ts=___SMMUL(ts,val)<<5; ts+=___SMMUL(shell,r1); ts=__SSAT(ts+__SSAT(__SSAT(___SMMUL(param_gain,ts),21)<<8,28),28); int32_t tsq31 = ts<<3; int32_t tsq31p3 = ___SMMUL(tsq31,___SMMUL(tsq31,tsq31)); outlet_out = ts + (ts>>1) - (tsq31p3)>>1;]]> 8 input s-rate mixer, square gain scale Johannes Taelman BSD Dynamic range compressor. Gain calculation only. Envelope follower, attack, decay and VCA are not included. Johannes Taelman BSD comp.axh >15]<<10; return r1 + r3; } int32_t frac_exp(int32_t a) { int8_t s = (a>>24)+4; uint8_t ei = a>>16; if (s>=0) return expt[ei]<>(-s); } int32_t accum; int i; int32_t prev; int32_t step; int32_t lp; int32_t follow;]]> 0?in:-in; accum=in>accum?in:(accum+(___SMMUL(in-accum,rel)>>4)); } int32_t inlog = frac_log(accum); int32_t treshlog = frac_log(param_tresh); int32_t over = inlog-treshlog; int32_t gain; if (over<0){ over=over<-(3<<25)?-(3<<25):over; int32_t tmp=frac_exp(over+(___SMMUL(___SMMUL(over>>1,___SMMUL(over,over))-(over>>1),param_slope)<<5))<<8; tmp=(___SMMUL(tmp,-0x80000+frac_exp(-___SMMUL(over,param_ratio)<<5))<<5); gain = 0x80000+(___SMMUL(tmp,param_expand)<<5); } else { gain = frac_exp(-___SMMUL(over,param_ratio)<<5); } gain = (gain<<8); step = (gain - prev)>>4; int32_t D = prev; prev = gain; for(i=0;i>4)); int32_t in=inlet_in[i]; in=__SSAT(in+__SSAT(__SSAT(___SMMUL(in,param_gainIn)<<5,24)<<4,28),28); outlet_out[i] = __SSAT(___SMMUL(in,lp)<<5,28); D += step; } */]]> 0?in:-in; accum=in>accum?in:(accum+(___SMMUL(in-accum,rel)>>2)); int32_t inlog = frac_log(accum); int32_t treshlog = frac_log(param_tresh); int32_t over = inlog-treshlog; int32_t gain; if (over<0){ over=(over>>3)*7; int32_t tmp=frac_exp(over+(___SMMUL(___SMMUL(over>>1,___SMMUL(over,over))-(over>>1),param_slope)<<5))<<8; tmp=(___SMMUL(tmp,-0x80000+frac_exp(-___SMMUL(over,param_ratio)<<5))<<5); gain = 0x80000+(___SMMUL(tmp,param_expand)<<5); } else { gain = frac_exp(-___SMMUL(over,param_ratio)<<5); } gain = (gain<<8); int32_t D = gain; lp=D>4)); in=inlet_in; in=__SSAT(in+__SSAT(__SSAT(___SMMUL(in,param_gainIn)<<5,24)<<4,28),28); outlet_out = __SSAT(___SMMUL(in,lp)<<5,28); D += step;]]> no -8 -8 1849 1096