[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.