Commit 86950d5f authored by Jonathan Wilkes's avatar Jonathan Wilkes
Browse files

Merge branch 'master' into double-builds

parents ac50d968 e216f5a0
......@@ -32,3 +32,4 @@ packages/linux_make/build/
pd/src/makefile
l2ork_addons/cwiid/defs.mak
CVS
.DS_Store
......@@ -231,7 +231,16 @@ that case, but I haven't tested doing it like that. Sorry. Get a better OS...)
4. Install the dependencies *(5-10 minutes)*
Once the shell opens, we need to install the dependencies for building
Purr Data. Issue the following command:
Purr Data. First we need to update all the packages:
pacman -Syu
After closing and reopening the shell as prompted, you may need to do it
again:
pacman -Syu
Now everything should be up-to-date. Issue the following command:
pacman -S autoconf automake git libtool \
make mingw-w64-i686-dlfcn mingw-w64-i686-fftw \
......
......@@ -106,9 +106,8 @@ typedef struct _scope
int x_frozen;
t_clock *x_clock;
t_pd *x_handle;
int scale_offset_x;
int scale_offset_y;
int scale_offset_x;
int scale_offset_y;
} t_scope;
typedef struct _scopehandle
......@@ -118,6 +117,9 @@ typedef struct _scopehandle
t_symbol *h_bindsym;
char h_pathname[64];
char h_outlinetag[64];
int h_adjust_x;
int h_adjust_y;
int h_constrain;
int h_dragon;
int h_dragx;
int h_dragy;
......@@ -992,49 +994,16 @@ static void scope_tick(t_scope *x)
scope_clear(x, 1);
}
static void scopehandle__clickhook(t_scopehandle *sh, t_floatarg f, t_floatarg xxx, t_floatarg yyy)
extern void canvas_apply_setundo(t_canvas *x, t_gobj *y);
static void scopehandle__clickhook(t_scopehandle *sh, t_floatarg f,
t_floatarg xxx, t_floatarg yyy)
{
t_scope *x = sh->h_master;
//if (xxx) x->scale_offset_x = xxx;
//if (yyy) x->scale_offset_y = yyy;
//int newstate = (int)f;
//if (sh->h_dragon && newstate == 0)
//{
// /* done dragging */
// t_canvas *cv;
// if (sh->h_dragx || sh->h_dragy)
// {
// x->x_width = x->x_width + sh->h_dragx - x->scale_offset_x;
// x->x_height = x->x_height + sh->h_dragy - x->scale_offset_y;
// }
// if (cv = scope_isvisible(x))
// {
// sys_vgui(".x%x.c delete %s\n", cv, sh->h_outlinetag);
// scope_revis(x, cv);
// sys_vgui("destroy %s\n", sh->h_pathname);
// scope_select((t_gobj *)x, x->x_glist, 1);
// canvas_fixlinesfor(x->x_glist, (t_text *)x); /* 2nd inlet */
// }
//}
//else if (!sh->h_dragon && newstate)
//{
// /* dragging */
// t_canvas *cv;
// if (cv = scope_isvisible(x))
// {
// int x1, y1, x2, y2;
// scope_getrect((t_gobj *)x, x->x_glist, &x1, &y1, &x2, &y2);
// sys_vgui("lower %s\n", sh->h_pathname);
// sys_vgui(".x%x.c create rectangle %d %d %d %d\
// -outline $select_color -width %f -tags %s\n",
// cv, x1, y1, x2, y2, SCOPE_SELBDWIDTH, sh->h_outlinetag);
// }
// sh->h_dragx = 0;
// sh->h_dragy = 0;
//}
/* Use constrained dragging. See g_canvas.c clickhook */
sh->h_constrain = (int)f;
sh->h_adjust_x = xxx - (((t_object *)x)->te_xpix + x->x_width);
sh->h_adjust_y = yyy - (((t_object *)x)->te_ypix + x->x_height);
canvas_apply_setundo(x->x_glist, (t_gobj *)x);
sh->h_dragon = f;
}
......@@ -1042,10 +1011,13 @@ static void scopehandle__motionhook(t_scopehandle *sh,
t_floatarg mouse_x, t_floatarg mouse_y)
{
t_scope *x = (t_scope *)(sh->h_master);
int x1, y1, x2, y2, width, height;
scope_getrect((t_gobj *)x, x->x_glist, &x1, &y1, &x2, &y2);
width = mouse_x - x1;
height = mouse_y - y1;
int width = (sh->h_constrain == CURSOR_EDITMODE_RESIZE_Y) ?
x->x_width :
(int)mouse_x - text_xpix((t_text *)x, x->x_glist) - sh->h_adjust_x;
int height = (sh->h_constrain == CURSOR_EDITMODE_RESIZE_X) ?
x->x_height :
(int)mouse_y - text_ypix((t_text *)x, x->x_glist) - sh->h_adjust_y;
x->x_width = width < SCOPE_MINWIDTH ? SCOPE_MINWIDTH : width;
x->x_height = height < SCOPE_MINHEIGHT ? SCOPE_MINHEIGHT : height;
......@@ -1058,25 +1030,6 @@ static void scopehandle__motionhook(t_scopehandle *sh,
scope_vis((t_gobj *)x, x->x_glist, 0);
scope_vis((t_gobj *)x, x->x_glist, 1);
}
//if (sh->h_dragon)
//{
// t_scope *x = sh->h_master;
// int dx = (int)f1, dy = (int)f2;
// int x1, y1, x2, y2, newx, newy;
// scope_getrect((t_gobj *)x, x->x_glist, &x1, &y1, &x2, &y2);
// newx = x2 - x->scale_offset_x + dx;
// newy = y2 - x->scale_offset_y + dy;
// if (newx > x1 + SCOPE_MINWIDTH && newy > y1 + SCOPE_MINHEIGHT)
// {
// t_canvas *cv;
// if (cv = scope_isvisible(x))
// sys_vgui(".x%x.c coords %s %d %d %d %d\n",
// cv, sh->h_outlinetag, x1, y1, newx, newy);
// sh->h_dragx = dx;
// sh->h_dragy = dy;
// }
//}
}
/* wrapper method for forwarding "scopehandle" data */
......@@ -1157,8 +1110,8 @@ static void *scope_new(t_symbol *s, int ac, t_atom *av)
sprintf(sh->h_outlinetag, "h%x", (int)sh);
sh->h_dragon = 0;
x->scale_offset_x = 0;
x->scale_offset_y = 0;
x->scale_offset_x = 0;
x->scale_offset_y = 0;
return (x);
}
......
......@@ -696,39 +696,43 @@ static void grid_bang(t_grid *x) {
static void grid__clickhook(t_scalehandle *sh, int newstate)
{
t_grid *x = (t_grid *)(sh->h_master);
if (newstate)
{
canvas_apply_setundo(x->x_glist, (t_gobj *)x);
}
/* Use constrained dragging-- see g_canvas.c clickhook */
sh->h_constrain = newstate;
sh->h_adjust_x = sh->h_offset_x -
(((t_object *)x)->te_xpix + x->x_width);
sh->h_adjust_y = sh->h_offset_y -
(((t_object *)x)->te_ypix + x->x_height);
canvas_apply_setundo(x->x_glist, (t_gobj *)x);
sh->h_dragon = newstate;
}
static void grid__motionhook(t_scalehandle *sh,
t_floatarg mouse_x, t_floatarg mouse_y)
{
if (sh->h_scale)
t_grid *x = (t_grid *)(sh->h_master);
int width = (sh->h_constrain == CURSOR_EDITMODE_RESIZE_Y) ?
x->x_width :
(int)mouse_x - text_xpix(&x->x_obj, x->x_glist) - sh->h_adjust_x;
int height = (sh->h_constrain == CURSOR_EDITMODE_RESIZE_X) ?
x->x_height :
(int)mouse_y - text_ypix(&x->x_obj, x->x_glist) - sh->h_adjust_y;
int minw = MIN_GRID_WIDTH,
minh = MIN_GRID_HEIGHT;
x->x_width = width < minw ? minw : width;
x->x_height = height < minh ? minh : height;
if (glist_isvisible(x->x_glist))
{
t_grid *x = (t_grid *)(sh->h_master);
int width = mouse_x - text_xpix(&x->x_obj, x->x_glist),
height = mouse_y - text_ypix(&x->x_obj, x->x_glist),
minw = MIN_GRID_WIDTH,
minh = MIN_GRID_HEIGHT;
x->x_width = width < minw ? minw : width;
x->x_height = height < minh ? minh : height;
if (glist_isvisible(x->x_glist))
{
grid_draw_configure(x, x->x_glist);
//scalehandle_unclick_scale(sh);
}
grid_draw_configure(x, x->x_glist);
//scalehandle_unclick_scale(sh);
}
int properties = gfxstub_haveproperties((void *)x);
if (properties)
{
int new_w = x->x_width + sh->h_dragx;
int new_h = x->x_height + sh->h_dragy;
properties_set_field_int(properties,"width",new_w);
properties_set_field_int(properties,"height",new_h);
}
int properties = gfxstub_haveproperties((void *)x);
if (properties)
{
int new_w = x->x_width + sh->h_dragx;
int new_h = x->x_height + sh->h_dragy;
properties_set_field_int(properties,"width",new_w);
properties_set_field_int(properties,"height",new_h);
}
}
......@@ -737,8 +741,9 @@ static void grid_click_for_resizing(t_grid *x, t_floatarg f,
t_floatarg xxx, t_floatarg yyy)
{
t_scalehandle *sh = (t_scalehandle *)x->x_handle;
sh->h_offset_x = (int)xxx;
sh->h_offset_y = (int)yyy;
grid__clickhook(sh, f);
// grid__clickhook(sh, f, xxx, yyy);
}
/* another wrapper for forwarding "scalehandle" motion data */
......
......@@ -5,7 +5,7 @@
<key>defeatrt</key>
<string>0</string>
<key>flags</key>
<string>-helppath ~/Library/Pd-l2ork -helppath /Library/Pd-l2ork</string>
<string>-font-size 12 -helppath ~/Library/Pd-l2ork -helppath /Library/Pd-l2ork</string>
<key>loadlib1</key>
<string>libdir</string>
<key>loadlib2</key>
......
......@@ -5,7 +5,7 @@
<key>defeatrt</key>
<string>0</string>
<key>flags</key>
<string>-helppath ~/Library/Pd-l2ork -helppath /Library/Pd-l2ork</string>
<string>-font-size 12 -helppath ~/Library/Pd-l2ork -helppath /Library/Pd-l2ork</string>
<key>loadlib1</key>
<string>libdir</string>
<key>loadlib2</key>
......
standardpath: 1
verbose: 0
defeatrt: 0
flags: -font-size 12
loadlib1: libdir
loadlib2: Gem
loadlib3: cyclone
......
......@@ -7,3 +7,4 @@ nloadlib: 2
path1: ~/pd-l2ork-externals
path2: /usr/lib/pd-l2ork/extra/pddp
npath: 2
flags: -font-size 12
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Pd-extended]
"flags"=""
"flags"="-font-size 12"
"loadlib1"="libdir"
"loadlib2"="pddp"
"nloadlib"=2
......
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Pd-extended]
"flags"=""
"flags"="-font-size 12"
"loadlib1"="libdir"
"loadlib2"="Gem"
"loadlib3"="cyclone"
......
#N canvas 515 143 555 619 10;
#N canvas 323 74 555 619 10;
#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
14 -228856 -66577 0;
#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header line 3 12 0 18 -204280
-1 0;
#X obj 0 267 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
#X obj 0 230 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
-228856 -1 0;
#N canvas 565 371 494 364 META 0;
#X text 12 125 LIBRARY internal;
......@@ -22,11 +22,11 @@ for Pd version 0.42.;
#X text 12 185 RELEASE_DATE 1997;
#X text 12 5 KEYWORDS control time;
#X restore 500 598 pd META;
#X obj 0 375 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
#X obj 0 418 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
13 -228856 -1 0;
#X obj 0 439 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
#X obj 0 462 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
0 13 -228856 -1 0;
#X obj 0 498 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
#X obj 0 521 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
0 13 -228856 -1 0;
#N canvas 297 500 428 230 Related_objects 0;
#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
......@@ -40,28 +40,24 @@ for Pd version 0.42.;
#X obj 19 182 pddp/helplink iemlib/fade~;
#X obj 19 122 pddp/helplink maxlib/step;
#X restore 101 598 pd Related_objects;
#X obj 78 276 cnv 17 3 63 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
#X obj 78 239 cnv 17 3 83 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
-162280 0;
#X text 98 275 float;
#X text 98 301 list;
#X text 98 383 float;
#X obj 78 384 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
#X text 98 238 float;
#X text 98 269 list;
#X text 98 426 float;
#X obj 78 427 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
-162280 0;
#X obj 78 347 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
#X obj 78 327 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
-162280 0;
#X text 98 346 float;
#X text 98 326 float;
#X obj 509 10 line;
#X obj 137 180 line;
#X msg 137 87 1000 1000;
#X floatatom 137 201 5 0 0 0 - - -, f 5;
#X text 203 86 ramp up.;
#X msg 146 110 0 1000;
#X text 193 110 ramp down.;
#X msg 158 154 stop;
#X msg 154 133 42;
#X text 180 134 jumps to this value immediately.;
#X text 195 154 stops the current ramp.;
#N canvas 106 115 428 446 continuous_ramps 0;
#X obj 137 183 line;
#X msg 137 50 1000 1000;
#X floatatom 137 204 5 0 0 0 - - -, f 5;
#X msg 146 73 0 1000;
#X msg 158 117 stop;
#X msg 154 96 42;
#N canvas 315 171 428 446 continuous_ramps 0;
#X text 19 98 In other words \, if [line] receives a message specifying
some new target and time before reaching the previous target \, it
takes off from its current value.;
......@@ -72,181 +68,159 @@ takes off from its current value.;
#X obj 23 226 line;
#X msg 23 144 127 5000;
#X msg 41 165 0 5000;
#X text 16 271 Due to this unique behavior \, a common construct found
in Pd patches includes the [pack] object as follows:;
#X obj 30 392 line;
#X floatatom 30 413 10 0 0 0 - - -, f 10;
#X floatatom 30 306 5 0 0 0 - - -, f 5;
#X floatatom 30 326 5 0 0 0 - - -, f 5;
#X obj 30 372 pack f 500;
#X msg 41 325 50;
#X msg 49 346 2000;
#X msg 71 325 50;
#X msg 79 346 2000;
#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
14 -204280 -1 0;
#X text 8 2 [line] Continuous Ramps;
#X text 21 37 [line] does not schedule its incoming messages. What
this means is that if you send [line] a new target value mid-way through
#X text 21 37 If you send [line] a new target value mid-way through
a ramp \, a new ramp is immediately created to the new target value
starting from the "current" value.;
#X text 81 185 <-- will jump immediately to 42;
#X text 16 271 Due to this unique behavior \, a common construct found
in Pd patches includes the [pack] object as below:;
#X connect 2 0 4 0;
#X connect 3 0 4 0;
#X connect 4 0 1 0;
#X connect 5 0 4 0;
#X connect 6 0 4 0;
#X connect 8 0 9 0;
#X connect 10 0 11 0;
#X connect 11 0 8 0;
#X connect 12 0 11 0;
#X connect 13 0 11 0;
#X restore 101 551 pd continuous_ramps;
#N canvas 107 25 428 516 grain_rate_and_creation_arguments 0;
#X text 21 39 The "grain rate" of [line] is the rate at which it will
output its values. The faster the grain is \, the smoother the ramp
will appear. While slower grain rates will produce a more disjunct
ramp. Of course this setting will alter the amount of CPU that the
[line] object will require. Higher rates require more computation.
;
#X text 22 145 This means simply that [line] will output a new value
between its current value and your new value once every 20 milliseconds.
;
#X text 22 126 The default grain rate is 20 milliseconds.;
#X text 19 193 [line]'s optional creation arguments can be used to
reset the grain rate. However \, the grain rate cannot be reset dynamically.
;
#X text 21 248 First creation argument is the initial value: the starting
point of the first ramp.;
#X text 20 287 The second creation argument sets the grain rate. Observe
the following two examples to see how the grain rate effects the output.
;
#X obj 33 403 line 0 5;
#X obj 36 436 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
-1 -1 0 1;
#X msg 136 332 127;
#X msg 168 340 0;
#X obj 135 368 pack f 5000;
#X obj 203 436 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
-1 -1 0 1;
#X obj 200 403 line 0 500;
#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
14 -204280 -1 0;
#X text 8 2 [line] Grain Rate;
#X text 31 469 You can check the default grain rate in the subpatch
below:;
#N canvas 398 136 429 326 default_grain_rate 0;
#X obj 22 87 line;
#X obj 22 226 timer;
#X obj 22 111 t b b;
#X obj 49 137 spigot;
#X obj 101 169 0;
#X obj 22 193 spigot;
#X obj 22 64 t a b;
#X obj 65 87 1;
#X obj 71 226 1;
#X obj 22 251 print Pd's_default_grain_rate;
#X msg 22 42 0 200;
#X text 19 274 Here we assume the grain rate is less than 200 ms. For
a more comprehensive test we could start with a time value of 1 ms
and step up until the output ceases to increase.;
#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header empty 3 12 0 14
-204280 -1 0;
#X text 7 1 [line] Pd's Default Grain Rate;
#X text 60 42 Click here to output pd's default grain rate to the console
;
#X connect 0 0 2 0;
#X connect 1 0 9 0;
#X connect 2 0 5 0;
#X connect 2 1 3 0;
#X connect 3 0 4 0;
#X connect 3 0 1 1;
#X connect 4 0 3 1;
#X connect 4 0 5 1;
#X connect 5 0 1 0;
#X connect 5 0 8 0;
#X connect 6 0 0 0;
#X connect 6 1 7 0;
#X connect 7 0 5 1;
#X connect 8 0 3 1;
#X connect 10 0 6 0;
#X restore 34 491 pd default_grain_rate;
#X connect 6 0 7 0;
#X connect 8 0 10 0;
#X connect 7 0 8 0;
#X connect 9 0 10 0;
#X connect 10 0 6 0;
#X connect 10 0 12 0;
#X connect 12 0 11 0;
#X restore 101 529 pd grain_rate_and_creation_arguments;
#X connect 10 0 7 0;
#X connect 11 0 10 0;
#X connect 12 0 10 0;
#X restore 341 530 pd continuous_ramps;
#X text 11 23 ramp generator;
#X text 98 325 stop;
#X text 168 325 - stop the current ramp.;
#X text 167 346 - time to reach the target value (in milliseconds).
#X text 98 299 stop;
#X text 168 299 - stop the current ramp.;
#X text 167 326 - time to reach the target value (in milliseconds).
;
#X text 168 275 - target value. This value is stored and used as the
#X text 168 238 - target value. This value is stored and used as the
starting value for the next ramp.;
#X text 168 301 - a (target \, time) pair is distributed between the
#X text 168 269 - a (target \, time) pair is distributed between the
two inlets.;
#X text 168 474 - grain rate in milliseconds (default: 20 ms).;
#X text 168 383 - [line] outputs a linear ramp \, reaching the target
value within the time value specified by the right inlet and at a grain
rate specified by the second creation argument (default 20 ms).;
#N canvas 106 32 428 493 tips_on_using_line 0;
#X text 20 39 [line]'s left inlet defines the "target" value. The right
inlet defines the "time" value. The "target \, time" pair of numbers
inform [line] to produce a numeric "ramp" from its current value (whatever
that might be at any given moment) to the new value within the alloted
time which is defined at the right inlet.;
#X obj 25 242 line;
#X msg 59 218 1000;
#X msg 25 218 1000;
#X obj 25 175 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
#N canvas 305 114 428 508 tips_on_using_line 0;
#X obj 42 269 line;
#X msg 76 238 1000;
#X msg 42 238 1000;
#X obj 42 192 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 25 195 t b b;
#X floatatom 25 264 5 0 0 0 - - -, f 5;
#X obj 150 260 line;
#X msg 150 236 1000;
#X obj 150 216 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
#X obj 42 212 t b b;
#X floatatom 42 291 5 0 0 0 - - -, f 5;
#X obj 150 270 line;
#X msg 150 238 1000;
#X obj 150 192 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X floatatom 150 282 5 0 0 0 - - -, f 5;
#X text 20 309 If [line] receives a new target value without an accompanying
"time" \, it simply jumps to the new value...as in the example above
on the right. In the example above on the left \, you'll see that [line]
will create a numeric ramp from 0 to 1000 over 1000 milliseconds. You
should also note that if you click that [bng] again a second time \,
nothing happens. This is because [line] is already at 1000 \, so sending
it new instructions to ramp to 1000 is meaningless and has no effect.
;
#X text 20 425 Having said all of that \, let's just reiterate that
#X floatatom 150 292 5 0 0 0 - - -, f 5;
#X text 20 437 Having said all of that \, let's just reiterate that
it's important to send a "time" value to [line] before sending it a
new "target" value...unless of course you WANT it to jump immediately
to the new target.;
#X text 149 182 While this does NOT work unless;
#X text 149 196 you click "500" first.;
#X msg 184 236 500;
#X text 179 197 While this does NOT work unless;
#X text 179 211 you click "500" first.;
#X msg 184 238 500;
#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
14 -204280 -1 0;
#X text 8 2 [line] Tips;
#X text 20 118 It is important to realize that [line] stores only the
#X text 20 125 It is important to realize that [line] stores only the
current value...it does not remember the defined "time" (duration of
the ramp). Hence \, the example to the left works:;
#X connect 1 0 6 0;
#X connect 2 0 1 1;
#X connect 3 0 1 0;
#X connect 4 0 5 0;
#X connect 5 0 3 0;
#X connect 5 1 2 0;
#X connect 7 0 10 0;
#X text 20 39 [line]'s left inlet defines the "target" value. The 2nd
inlet defines the "time" value. The "target \, time" pair of numbers
inform [line] to produce a numeric "ramp" from its current value (whatever
that might be at any given moment) to the new value within the alloted
time which is defined at the right inlet.;
#X text 20 316 If [line] receives a new target value without an accompanying
"time" \, it simply jumps to the new value as in the example above
on the right. In the example above on the left \, you'll see that [line]
will create a numeric ramp from 0 to 1000 over 1000 milliseconds. You
should also note that if you click that [bng] again a second time \,
it doesn't ramp from 0 to 1000 again. This is because [line] is already
at 1000 Sending it new instructions to ramp to 1000 will output a stream
of values that are all 1000;
#X connect 0 0 5 0;
#X connect 1 0 0 1;
#X connect 2 0 0 0;
#X connect 3 0 4 0;
#X connect 4 0 2 0;
#X connect 4 1 1 0;
#X connect 6 0 9 0;
#X connect 7 0 6 0;
#X connect 8 0 7 0;
#X connect 9 0 8 0;
#X connect 15 0 7 1;
#X restore 101 507 pd tips_on_using_line;
#X text 80 459 1) float;
#X text 80 474 2) float;
#X text 168 459 - initial value \, i.e. \, the starting point of the
#X connect 13 0 6 1;
#X restore 101 530 pd tips_on_using_line;
#X text 80 482 1) float;
#X text 80 497 2) float;
#X text 168 482 - initial value \, i.e. \, the starting point of the
first ramp.;
#X obj 3 598 pddp/pddplink all_about_help_patches.pd -text Usage Guide
;
#X obj 98 571 pddp/pddplink ../3.audio.examples/C03.zipper.noise.pd
#X obj 98 574 pddp/pddplink ../3.audio.examples/C03.zipper.noise.pd
-text doc/3.audio.examples/C03.zipper.noise.pd;
#X text 180 97 jump to this value immediately.;
#X text 203 49 ramp up over 1000 ms;
#X text 193 73 ramp down over 1000 ms;
#X text 195 117 stop the current ramp.;
#X obj 78 357 cnv 17 3 57 empty \$0-pddp.cnv.let.1 2 5 9 0 16 -228856
-162280 0;
#X text 98 356 float;
#X text 167 356 - grain size \, or how often messages get sent to the
outlet during the ramp (defaults to 20 ms). Note: there may be a shorter
delay before the final message in order to precisely match the total
ramp duration given from the 2nd inlet.;
#X text 168 497 - grain size in milliseconds (default: 20 ms).;
#X text 168 426 - [line] outputs a linear ramp \, reaching the target
value within the duration specified at the 2nd inlet.;
#N canvas 370 126 428 471 grain_size_and_creation_arguments 0;
#X text 22 125 This means simply that [line] will output a new value
between its current value and your new value once every 20 milliseconds.
;
#X text 22 101 The default grain rate is 20 milliseconds.;
#X obj 135 413 line 0 5;