[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[sc-dev] SF.net SVN: supercollider:[8107] trunk/build/SCClassLibrary/Common/Audio



Revision: 8107
          http://supercollider.svn.sourceforge.net/supercollider/?rev=8107&view=rev
Author:   jrhb
Date:     2008-12-11 19:44:34 +0000 (Thu, 11 Dec 2008)

Log Message:
-----------
add some n-ary operator support for demand ugens

Modified Paths:
--------------
    trunk/build/SCClassLibrary/Common/Audio/Demand.sc
    trunk/build/SCClassLibrary/Common/Audio/UGen.sc

Modified: trunk/build/SCClassLibrary/Common/Audio/Demand.sc
===================================================================
--- trunk/build/SCClassLibrary/Common/Audio/Demand.sc	2008-12-11 19:17:34 UTC (rev 8106)
+++ trunk/build/SCClassLibrary/Common/Audio/Demand.sc	2008-12-11 19:44:34 UTC (rev 8107)
@@ -76,6 +76,27 @@
 	}
 	forceAudioRateInputsIntoUGenGraph {
  		inputs.do { |in| if(in.rate == \audio) { in <! 0 } };	}
+ 	
+ 	// some n-ary op special cases
+ 	
+ 	linlin { arg inMin, inMax, outMin, outMax, clip=\minmax;
+    		^((this.prune(inMin, inMax, clip)-inMin)/(inMax-inMin) * (outMax-outMin) + outMin);
+	}
+
+	linexp { arg inMin, inMax, outMin, outMax, clip=\minmax;
+		^(pow(outMax/outMin, (this-inMin)/(inMax-inMin)) * outMin)
+			.prune(inMin, inMax, clip);
+	}
+
+	explin { arg inMin, inMax, outMin, outMax, clip=\minmax;
+		^(log(this.prune(inMin, inMax, clip)/inMin)) 
+			/ (log(inMax/inMin)) * (outMax-outMin) + outMin
+	}
+
+	expexp { arg inMin, inMax, outMin, outMax, clip=\minmax;
+		^pow(outMax/outMin, log(this.prune(inMin, inMax, clip/inMin) / log(inMax/inMin)) * outMin)
+	}
+	
 }
 
 Dseries : DUGen {

Modified: trunk/build/SCClassLibrary/Common/Audio/UGen.sc
===================================================================
--- trunk/build/SCClassLibrary/Common/Audio/UGen.sc	2008-12-11 19:17:34 UTC (rev 8106)
+++ trunk/build/SCClassLibrary/Common/Audio/UGen.sc	2008-12-11 19:44:34 UTC (rev 8107)
@@ -65,11 +65,11 @@
  	}
  	exprange { arg lo = 0.01, hi = 1.0;
  		var rate = if(this.rate == \audio) { \audio } { \control };
-		if (this.signalRange == \bipolar, {
-			^LinExp.multiNew(rate, this, -1, 1, lo, hi)
-		},{
-			^LinExp.multiNew(rate, this, 0, 1, lo, hi)
-		});
+		^if (this.signalRange == \bipolar) {
+			this.linexp(-1, 1, lo, hi)
+		} {
+			this.linexp(0, 1, lo, hi)
+		};
  	}
  	
  	unipolar { arg mul = 1; 
@@ -81,24 +81,37 @@
   	}
  	
  	clip { arg lo,hi;
- 		if(rate == \audio) {
- 			^Clip.ar(this, lo, hi)
+ 		^if(rate == \audio) {
+ 			Clip.ar(this, lo, hi)
  		}{
- 			^Clip.kr(this, lo, hi)
+ 			if(rate == \demand) {
+ 				max(lo, min(hi, this))
+ 			} {
+ 				Clip.kr(this, lo, hi)
+ 			}
  		}
  	}
+ 	
  	fold { arg lo,hi;
- 		if(rate == \audio) {
- 			^Fold.ar(this, lo, hi)
+ 		^if(rate == \audio) {
+ 			Fold.ar(this, lo, hi)
  		}{
- 			^Fold.kr(this, lo, hi)
+ 			if(rate == \demand) {
+ 				this.notYetImplemented(thisMethod)
+ 			} {
+ 				Fold.kr(this, lo, hi)
+ 			}
  		}
  	}
  	wrap { arg lo,hi;
- 		if(rate == \audio) {
- 			^Wrap.ar(this, lo, hi)
+ 		^if(rate == \audio) {
+ 			Wrap.ar(this, lo, hi)
  		}{
- 			^Wrap.kr(this, lo, hi)
+ 			if(rate == \demand) {
+ 				this.notYetImplemented(thisMethod)
+ 			} {
+ 				Wrap.kr(this, lo, hi)
+ 			}
  		}
  	}
  	


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

_______________________________________________
sc-dev mailing list

info (subscription, etc.): http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml
archive: https://listarc.bham.ac.uk/marchives/sc-dev/
search: https://listarc.bham.ac.uk/lists/sc-dev/search/