1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
/////////// query whether some UGen can possibly free its synth from within
+ Object {
canFreeSynth {
^false
}
}
+SequenceableCollection {
canFreeSynth {
^this.any({ arg item; item.canFreeSynth })
}
}
+ EnvGen {
canFreeSynth {
^(inputs.at(4).isNumber.not or: {inputs.at(4) > 1}) and: //doneAction
{ // it can happen that the gate is 1 and the envelope runs out
inputs.at(0).isNumber.not or: //variable gate
{ inputs.at(7) == -99 } //or self releasing envelope
}
}
}
+ Linen {
canFreeSynth {
^(inputs.at(4).isNumber.not or: { inputs.at(4) > 1 }) and: { inputs.at(0).isNumber.not }
}
}
+ Line {
canFreeSynth { ^inputs.at(3).isNumber.not or: { inputs.at(3) > 1 } }
}
+ XLine {
canFreeSynth { ^inputs.at(3).isNumber.not or: { inputs.at(3) > 1 } }
}
+ Free {
canFreeSynth { ^true }
}
+ FreeSelf {
canFreeSynth { ^true }
}
+ DetectSilence {
canFreeSynth { ^inputs.at(3).isNumber.not or: { inputs.at(3) > 1 } }
}
+ Duty {
canFreeSynth { ^inputs.at(2).isNumber.not or: { inputs.at(2) > 1 } }
}
+ DemandEnvGen {
canFreeSynth { ^inputs.at(9).isNumber.not or: { inputs.at(9) > 1 } }
}
+ SynthDef {
canFreeSynth { ^children.canFreeSynth }
canReleaseSynth { ^this.hasGateControl and: { this.canFreeSynth } }
hasGateControl {
if(allControlNames.isNil) { ^false };
^allControlNames.any { arg cn;
cn.notNil and: { cn.name == 'gate' } and: { cn.rate !== 'scalar' }
};
}
}
|