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

[Sc-devel] SF.net SVN: supercollider: [6794] trunk



Revision: 6794
          http://svn.sourceforge.net/supercollider/?rev=6794&view=rev
Author:   joshpar
Date:     2007-12-11 06:57:28 -0800 (Tue, 11 Dec 2007)

Log Message:
-----------
fix Grain bugs, update some help

Modified Paths:
--------------
    trunk/Source/plugins/GrainUGens.cpp
    trunk/build/Help/UGens/GranularSynthesis/GrainBuf.html
    trunk/build/Help/UGens/GranularSynthesis/GrainSin.html
    trunk/build/Help/UGens/Reverbs/GVerb.html

Modified: trunk/Source/plugins/GrainUGens.cpp
===================================================================
--- trunk/Source/plugins/GrainUGens.cpp	2007-12-11 14:48:56 UTC (rev 6793)
+++ trunk/Source/plugins/GrainUGens.cpp	2007-12-11 14:57:28 UTC (rev 6794)
@@ -41,12 +41,6 @@
 	rgen.s2 = s2; \
 	rgen.s3 = s3;
 
-const double sqrt3 = sqrt(3.);
-const double sqrt3div6 = sqrt(3.) * 0.1666666667;
-const double sqrt3div2 = sqrt(3.) * 0.5;
-const double rsqrt6 = 1. / sqrt(6.);
-const double sqrt6div3 = sqrt(6.) * 0.3333333333;
-
 static InterfaceTable *ft;
 
 const int kMaxGrains = 64;
@@ -214,7 +208,7 @@
 		return; \
 	}
 
-#define CHECK_GRAIN_WIN \
+#define GET_GRAIN_WIN \
 		window = unit->mWorld->mSndBufs + (int)winType; \
 		windowData = window->data; \
 		windowSamples = window->samples; \
@@ -279,15 +273,7 @@
 		double y0 = b1 * y1 - y2; \
 		y2 = y1; \
 		y1 = y0; \
-    
 
-#define GET_GRAIN_WIN \
-		SndBuf *window = unit->mWorld->mSndBufs + (int)grain->mWindow; \
-		float *windowData __attribute__((__unused__)) = window->data; \
-		uint32 windowSamples __attribute__((__unused__)) = window->samples; \
-		uint32 windowFrames = window->frames; \
-		int windowGuardFrame __attribute__((__unused__)) = windowFrames - 1; \
-		
 #define BUF_GRAIN_AMP \
 		winPos += winInc; \
 		int iWinPos = (int)winPos; \
@@ -399,7 +385,7 @@
 #define CALC_GRAIN_PAN \
 	float panangle, pan1, pan2; \
 	float *out1, *out2; \
-	if (numOutputs > 2) { \
+	if (numOutputs > 1) { \
 		pan = sc_wrap(pan * 0.5f, 0.f, 1.f); \
 		float cpan = numOutputs * pan + 0.5; \
 		float ipan = floor(cpan); \
@@ -407,19 +393,14 @@
 		panangle = panfrac * pi2; \
 		grain->chan = (int)ipan; \
 		if (grain->chan >= (int)numOutputs) grain->chan -= numOutputs; \
+		pan1 = grain->pan1 = cos(panangle); \
+		pan2 = grain->pan2 = sin(panangle); \
 	} else { \
 		grain->chan = 0; \
-		pan = sc_wrap(pan * 0.5f + 0.5f, 0.f, 1.f); \
-		panangle = pan * pi2; \
-	} \
-	if(numOutputs > 1){ \
-	    pan1 = grain->pan1 = cos(panangle); \
-	    pan2 = grain->pan2 = sin(panangle); \
-	    } else { \
-	    pan1 = grain->pan1 = 1.; \
-	    pan2 = grain->pan2 = 0.; \
-	    } \
-
+		pan1 = grain->pan1 = 1.; \
+		pan2 = grain->pan2 = 0.; \
+	}
+	
 #define GET_GRAIN_INIT_AMP \
 	if(grain->winType < 0.){ \
 	    w = pi / counter; \
@@ -610,7 +591,7 @@
 			// start a grain
 			if (unit->mNumActive+1 >= kMaxSynthGrains) {Print("Too many grains!\n"); break;}
 			float winType = IN_AT(unit, 4, i);
-			CHECK_GRAIN_WIN
+			GET_GRAIN_WIN
 			if((windowData) || (winType < 0.)) {
 			    GrainInG *grain = unit->mGrains + unit->mNumActive++;
 			    winSize = IN_AT(unit, 1, i);
@@ -709,7 +690,7 @@
 		    Print("Too many grains!\n");
 		    } else {
 		    float winType = IN0(4);
-		    CHECK_GRAIN_WIN
+		    GET_GRAIN_WIN
 		    if((windowData) || (winType < 0.)) {
 			GrainInG *grain = unit->mGrains + unit->mNumActive++;
 			winSize = IN0(1);
@@ -824,7 +805,7 @@
 			// start a grain
 			if (unit->mNumActive+1 >= kMaxSynthGrains) {Print("Too many grains!\n"); break;}
 			float winType = IN_AT(unit, 4, i);
-			CHECK_GRAIN_WIN
+			GET_GRAIN_WIN
 			if((windowData) || (winType < 0.)) {
 			    GrainSinG *grain = unit->mGrains + unit->mNumActive++;
 			    // INRATE(1) == calcFullRate
@@ -937,7 +918,7 @@
 		    Print("Too many grains!\n");
 		    } else {
 		    float winType = IN0(4);
-		    CHECK_GRAIN_WIN
+		    GET_GRAIN_WIN
 		    if((windowData) || (winType < 0.)) {
 			GrainSinG *grain = unit->mGrains + unit->mNumActive++;
 			freq = IN0(2);
@@ -1070,7 +1051,7 @@
 		// start a grain
 		if (unit->mNumActive+1 >= kMaxSynthGrains) {Print("Too many grains!\n"); break;}
 		float winType = IN_AT(unit, 6, i);
-		CHECK_GRAIN_WIN
+		GET_GRAIN_WIN
 		if((windowData) || (winType < 0.)) {
 		    
 		    GrainFMG *grain = unit->mGrains + unit->mNumActive++;
@@ -1196,7 +1177,7 @@
 		if (unit->mNumActive+1 >= kMaxSynthGrains) {Print("Too many grains!\n");
 		} else {
 		float winType = IN0(6);
-		CHECK_GRAIN_WIN
+		GET_GRAIN_WIN
 		if((windowData) || (winType < 0.)) {
 		    GrainFMG *grain = unit->mGrains + unit->mNumActive++;
 		    winSize = IN0(1);
@@ -1397,7 +1378,7 @@
 			} else {
 			float winType = IN_AT(unit, 7, i);
 			if(winType >= 0.) { 
-			    CHECK_GRAIN_WIN
+			    GET_GRAIN_WIN
 			    }
 			if((windowData) || (winType < 0.)) {
 				uint32 bufnum = (uint32)IN_AT(unit, 2, i);
@@ -1552,7 +1533,7 @@
 			} else {
 			float winType = IN0(7);
 			if(winType >= 0.) { 
-			    CHECK_GRAIN_WIN
+			    GET_GRAIN_WIN
 			    }
 			if((windowData) || (winType < 0.)) {
 				uint32 bufnum = (uint32)IN0(2);
@@ -1769,7 +1750,7 @@
 			float phase = IN_AT(unit, 1, i) * (float)bufFrames;
 			grain->interp = (int)IN_AT(unit, 7, i);
 			float winType = grain->winType = (int)IN_AT(unit, 4, i); // the buffer that holds the grain shape
-			CHECK_GRAIN_WIN
+			GET_GRAIN_WIN
 			if((windowData) || (winType < 0.)) {
 			    GET_GRAIN_INIT_AMP
 			    

Modified: trunk/build/Help/UGens/GranularSynthesis/GrainBuf.html
===================================================================
--- trunk/build/Help/UGens/GranularSynthesis/GrainBuf.html	2007-12-11 14:48:56 UTC (rev 6793)
+++ trunk/build/Help/UGens/GranularSynthesis/GrainBuf.html	2007-12-11 14:57:28 UTC (rev 6794)
@@ -13,21 +13,21 @@
 p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
 p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
 p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #606060}
-p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #a91616}
-p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #862323}
-span.s1 {color: #0014bc}
+p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #961e1e}
+p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #782727}
+span.s1 {color: #001db9}
 span.s2 {color: #000000}
-span.s3 {color: #001db9}
-span.s4 {color: #307109}
-span.s5 {color: #0023b6}
-span.s6 {color: #4d6d13}
+span.s3 {color: #0023b6}
+span.s4 {color: #426f0e}
+span.s5 {color: #0428b3}
+span.s6 {color: #556b17}
 span.Apple-tab-span {white-space:pre}
 </style>
 </head>
 <body>
 <p class="p1"><b>GrainBuf<span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>Granular synthesis with sound stored in a buffer</b></p>
 <p class="p2"><br></p>
-<p class="p3"><b>GrainBuf.ar(numChannels, trigger, dur, sndbuf, rate, pos, pan, envbufnum, mul, add)</b></p>
+<p class="p3"><b>GrainBuf.ar(numChannels, trigger, dur, sndbuf, rate, pos, interp, pan, envbufnum, mul, add)</b></p>
 <p class="p2"><br></p>
 <p class="p3"><span class="Apple-tab-span">	</span><b>numChannels</b> - the number of channels to output. If 1, mono is returned and pan is ignored.</p>
 <p class="p3"><b><span class="Apple-tab-span">	</span>trigger </b>- a kr or ar trigger to start a new grain. If ar, grains after the start of the synth are sample accurate.</p>

Modified: trunk/build/Help/UGens/GranularSynthesis/GrainSin.html
===================================================================
--- trunk/build/Help/UGens/GranularSynthesis/GrainSin.html	2007-12-11 14:48:56 UTC (rev 6793)
+++ trunk/build/Help/UGens/GranularSynthesis/GrainSin.html	2007-12-11 14:57:28 UTC (rev 6794)
@@ -12,14 +12,14 @@
 p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
 p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
 p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
-p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #a91616}
-p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #862323}
-p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #4d6d13}
-span.s1 {color: #0014bc}
-span.s2 {color: #307109}
+p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #961e1e}
+p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #782727}
+p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #556b17}
+span.s1 {color: #001db9}
+span.s2 {color: #426f0e}
 span.s3 {color: #000000}
-span.s4 {color: #0023b6}
-span.s5 {color: #4d6d13}
+span.s4 {color: #0428b3}
+span.s5 {color: #556b17}
 span.Apple-tab-span {white-space:pre}
 </style>
 </head>
@@ -51,7 +51,7 @@
 <p class="p5"><span class="s1">SynthDef</span>(<span class="s2">\sin_grain_test</span>, {<span class="s1">arg</span> gate = 1, amp = 1, envbuf;</p>
 <p class="p5"><span class="Apple-tab-span">	</span><span class="s1">var</span> pan, env, freqdev;</p>
 <p class="p6"><span class="s3"><span class="Apple-tab-span">	</span></span>// use mouse x to control panning</p>
-<p class="p5"><span class="Apple-tab-span">	</span>pan = <span class="s1">MouseX</span>.kr(-1, 1);</p>
+<p class="p5"><span class="Apple-tab-span">	</span>pan = -0.5;// <span class="s1">MouseX</span>.kr(-1, 1);</p>
 <p class="p6"><span class="s3"><span class="Apple-tab-span">	</span></span>// use WhiteNoise and mouse y to control deviation from center pitch</p>
 <p class="p5"><span class="Apple-tab-span">	</span>freqdev = <span class="s1">WhiteNoise</span>.kr(<span class="s1">MouseY</span>.kr(0, 400));</p>
 <p class="p5"><span class="Apple-tab-span">	</span>env = <span class="s1">EnvGen</span>.kr(</p>
@@ -64,7 +64,7 @@
 <p class="p5"><span class="Apple-tab-span">	</span>}).send(s);</p>
 <p class="p4"><br></p>
 <p class="p5">)</p>
-<p class="p4"><br></p>
+<p class="p5">s.scope</p>
 <p class="p7">// use built-in env</p>
 <p class="p8"><span class="s3">x = </span><span class="s4">Synth</span><span class="s3">(</span>\sin_grain_test<span class="s3">, [</span>\envbuf<span class="s3">, -1])</span></p>
 <p class="p4"><br></p>

Modified: trunk/build/Help/UGens/Reverbs/GVerb.html
===================================================================
--- trunk/build/Help/UGens/Reverbs/GVerb.html	2007-12-11 14:48:56 UTC (rev 6793)
+++ trunk/build/Help/UGens/Reverbs/GVerb.html	2007-12-11 14:57:28 UTC (rev 6794)
@@ -5,32 +5,31 @@
 <meta http-equiv="Content-Style-Type" content="text/css">
 <title></title>
 <meta name="Generator" content="Cocoa HTML Writer">
-<meta name="CocoaVersion" content="824.44">
+<meta name="CocoaVersion" content="949">
 <style type="text/css">
 p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica}
 p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica; min-height: 22.0px}
 p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
 p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
-p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; color: #0000bf; min-height: 14.0px}
+p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; color: #0014bc; min-height: 14.0px}
 p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
-p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000}
-p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #bf0000}
-p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000; min-height: 12.0px}
-span.s1 {color: #0000bf}
-span.s2 {color: #007300}
+p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
+p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #a91616}
+span.s1 {color: #0014bc}
+span.s2 {color: #307109}
 span.Apple-tab-span {white-space:pre}
 </style>
 </head>
 <body>
 <p class="p1"><b>GVerb<span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>A two-channel reverb</b></p>
-<p class="p2"><b></b><br></p>
+<p class="p2"><br></p>
 <p class="p3"><b>#left, right = GVerb.ar(in, roomsize, revtime, damping, inputbw, spread, drylevel, earlyreflevel, taillevel,<span class="Apple-converted-space"> </span></b></p>
 <p class="p3"><b><span class="Apple-tab-span">	</span>maxroomsize, mul, add)</b></p>
 <p class="p4"><br></p>
 <p class="p3">A two-channel reverb UGen, based on the "GVerb" LADSPA effect by Juhana Sadeharju (kouhia at nic.funet.fi).</p>
 <p class="p4"><br></p>
 <p class="p3"><span class="Apple-tab-span">	</span><b>in -</b> mono input</p>
-<p class="p3"><span class="Apple-tab-span">	</span><b>roomsize -</b> in meters</p>
+<p class="p3"><span class="Apple-tab-span">	</span><b>roomsize -</b> in squared meters</p>
 <p class="p3"><span class="Apple-tab-span">	</span><b>revtime -</b> in seconds</p>
 <p class="p3"><span class="Apple-tab-span">	</span><b>damping -</b> 0 to 1, high frequency rolloff, 0 damps the reverb signal completely, 1 not at all</p>
 <p class="p3"><span class="Apple-tab-span">	</span><b>inputbw -</b> 0 to 1, same as damping control, but on the input signal</p>
@@ -65,31 +64,31 @@
 <p class="p7"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>earlylevel.dbamp,<span class="Apple-converted-space"> </span></p>
 <p class="p7"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>taillevel.dbamp,</p>
 <p class="p7"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>roomsize, 0.3) + a)}).load(s)</p>
-<p class="p9"><span class="Apple-tab-span">	</span></p>
+<p class="p6"><span class="Apple-tab-span">	</span></p>
 <p class="p7">s = <span class="s1">Server</span>.internal.boot;</p>
 <p class="p7">s.scope(2);</p>
-<p class="p9"><br></p>
+<p class="p6"><br></p>
 <p class="p8">// bathroom</p>
 <p class="p7">s.sendMsg(<span class="s2">\s_new</span>, <span class="s2">\test</span>, a=s.nextNodeID, 0, 1, <span class="s2">\roomsize</span>, 5, <span class="s2">\revtime</span>, 0.6, <span class="s2">\damping</span>, 0.62, <span class="s2">\inputbw</span>, 0.48, <span class="s2">\drylevel</span> -6, <span class="s2">\earlylevel</span>, -11, <span class="s2">\taillevel</span>, -13);</p>
 <p class="p7">s.sendMsg(<span class="s2">\n_free</span>, a);</p>
-<p class="p9"><br></p>
+<p class="p6"><br></p>
 <p class="p8">//living room</p>
 <p class="p7">s.sendMsg(<span class="s2">\s_new</span>, <span class="s2">\test</span>, a=s.nextNodeID, 0, 1, <span class="s2">\roomsize</span>, 16, <span class="s2">\revtime</span>, 1.24, <span class="s2">\damping</span>, 0.18, <span class="s2">\inputbw</span>, 0.95, <span class="s2">\drylevel</span> -3, <span class="s2">\earlylevel</span>, -15, <span class="s2">\taillevel</span>, -17);</p>
 <p class="p7">s.sendMsg(<span class="s2">\n_free</span>, a);</p>
-<p class="p9"><br></p>
+<p class="p6"><br></p>
 <p class="p8">//church</p>
 <p class="p7">s.sendMsg(<span class="s2">\s_new</span>, <span class="s2">\test</span>, a=s.nextNodeID, 0, 1, <span class="s2">\roomsize</span>, 80, <span class="s2">\revtime</span>, 4.85, <span class="s2">\damping</span>, 0.41, <span class="s2">\inputbw</span>, 0.19, <span class="s2">\drylevel</span> -3, <span class="s2">\earlylevel</span>, -9, <span class="s2">\taillevel</span>, -11);</p>
 <p class="p7">s.sendMsg(<span class="s2">\n_free</span>, a);</p>
 <p class="p7">s.quit</p>
-<p class="p9"><br></p>
+<p class="p6"><br></p>
 <p class="p8">// cathedral</p>
 <p class="p7">s.sendMsg(<span class="s2">\s_new</span>, <span class="s2">\test</span>, a=s.nextNodeID, 0, 1, <span class="s2">\roomsize</span>, 243, <span class="s2">\revtime</span>, 1, <span class="s2">\damping</span>, 0.1, <span class="s2">\inputbw</span>, 0.34, <span class="s2">\drylevel</span> -3, <span class="s2">\earlylevel</span>, -11, <span class="s2">\taillevel</span>, -9);</p>
 <p class="p7">s.sendMsg(<span class="s2">\n_free</span>, a);</p>
-<p class="p9"><br></p>
+<p class="p6"><br></p>
 <p class="p8">// canyon</p>
 <p class="p7">s.sendMsg(<span class="s2">\s_new</span>, <span class="s2">\test</span>, a=s.nextNodeID, 0, 1, <span class="s2">\roomsize</span>, 300, <span class="s2">\revtime</span>, 103, <span class="s2">\damping</span>, 0.43, <span class="s2">\inputbw</span>, 0.51, <span class="s2">\drylevel</span> -5, <span class="s2">\earlylevel</span>, -26, <span class="s2">\taillevel</span>, -20);</p>
 <p class="p7">s.sendMsg(<span class="s2">\n_free</span>, a);</p>
-<p class="p9"><br></p>
+<p class="p6"><br></p>
 <p class="p7">s.quit;</p>
 </body>
 </html>


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