Merge pull request #506 from andrewcsmith/patch-2
[supercollider.git] / SCClassLibrary / Common / Audio / canFreeSynth.sc
blobcd2ad160af121996ffae0d8c214a1ecb6794667b
1 ///////////  query whether some UGen can possibly free its synth from within
4 + Object {
5         canFreeSynth {
6                 ^false
7         }
10 +SequenceableCollection {
11         canFreeSynth {
12                 ^this.any({ arg item; item.canFreeSynth })
13         }
17 + EnvGen {
18         canFreeSynth {
19                 ^(inputs.at(4).isNumber.not or: {inputs.at(4) > 1}) and: //doneAction
20                         { // it can happen that the gate is 1 and the envelope runs out
21                                 inputs.at(0).isNumber.not or: //variable gate
22                                 { inputs.at(7) == -99 }         //or self releasing envelope
23                         }
25         }
29 + Linen {
30         canFreeSynth {
31                 ^(inputs.at(4).isNumber.not or: { inputs.at(4) > 1 }) and: { inputs.at(0).isNumber.not }
32         }
34 + Line {
35         canFreeSynth { ^inputs.at(3).isNumber.not or: { inputs.at(3) > 1 } }
37 + XLine {
38         canFreeSynth { ^inputs.at(3).isNumber.not or: { inputs.at(3) > 1 }  }
41 + Free {
42         canFreeSynth { ^true }
45 + FreeSelf {
46         canFreeSynth { ^true }
49 + DetectSilence {
50         canFreeSynth { ^inputs.at(3).isNumber.not or: { inputs.at(3) > 1 }  }
53 + Duty {
54         canFreeSynth { ^inputs.at(2).isNumber.not or: { inputs.at(2) > 1 }  }
57 + DemandEnvGen {
58         canFreeSynth { ^inputs.at(9).isNumber.not or: { inputs.at(9) > 1 }  }
61 + SynthDef {
62         canFreeSynth { ^children.canFreeSynth }
63         canReleaseSynth { ^this.hasGateControl and: { this.canFreeSynth } }
64         hasGateControl {
65                 if(allControlNames.isNil) { ^false };
66                 ^allControlNames.any { arg cn;
67                         cn.notNil and: { cn.name == 'gate' } and: { cn.rate !== 'scalar' }
68                 };
69         }