duration = 10;
attack = 50;
release = 1;
start = 1;
db = 90;
alldb = 90;
scale = 1000;
start = 0;
function grnd2(a,b) {
result = RandRange(a,b,"SHA1PRNG");
return result;
}
select *
from parameters
where ID = #ID#
maxdur #para.maxdur# can not be larger than total #para.total#
function RndEnvelope() { // 2 part envelope, what's not attack is release (decay)
duration = RandRange(para.mindur*scale,para.maxdur*scale,"SHA1PRNG");
attack = para.attack*duration/100; // % of duration
attack = RandRange(1,attack,"SHA1PRNG");
release = duration - attack;
attack = attack / scale;
release = release / scale;
duration = duration / scale;
// 100 * 10000 attack% @ irnd 1 max / / dup
// attack ! - release !
}
function RndStart() {
start = RandRange(0,para.total*scale,"SHA1PRNG");
start = start/scale;
}
function GenerateEnvelope() {
RndEnvelope();
RndStart();
while(start + duration GT para.total) {
RndEnvelope();
RndStart();
}
}
fundamental = 31.25;
// fundamental = 31.25 // 16000 8000 4000 2000 1000 500 250 125 62.5
function RndFreq() {
// freq = RandRange(para.minfreq*scale,para.maxfreq*scale,"SHA1PRNG");
// range = para.maxfreq*scale - para.minfreq*scale;
freq = fundamental*scale * RandRange(1,20,"SHA1PRNG"); // scale down
freq = freq / scale;
}
FreqLimit = 20000;
dbLimit = 96;
FreqTodBRatio = FreqLimit / dbLimit;
function RndDb() {
db = RandRange(para.mindb*scale,para.maxdb*scale,"SHA1PRNG");
// Ramp = dbLimit*scale-db;
// db = db + RandRange(0,freq*scale/FreqTodBRatio-Ramp,"SHA1PRNG"); // scale up
db = db / scale;
}
function RndPan() {
PanStart = RandRange(0,para.panStart,"SHA1PRNG")/100;
PanEnd = RandRange(0,para.panEnd,"SHA1PRNG")/100;
}
;
; #para.events# events - total #para.total# seconds"
; #NumberFormat(para.minfreq,".0")# - #NumberFormat(para.maxfreq,".0")# Hz
; #NumberFormat(para.mindb,".0")# - #NumberFormat(para.maxdb,".0")# dB
f1 0 4096 10 1
Osc start dur amp freq attack rel panS panE
#GenerateEnvelope()##RndFreq()# #RndDb()##RndPan()#
i1 #NumberFormat(start,".000")# #NumberFormat(duration,".000")# #NumberFormat(db,".0")# #NumberFormat(freq,".0")# #NumberFormat(attack,".000")# #NumberFormat(release,".000")# #PanStart# #PanEnd#
e
;
#para.name#[#trim(numberformat(para.id,'00'))#].sco
#score#
|