[PD-cvs] externals/miXed/cyclone/sickle Makefile.objects,1.2,1.3 buffir.c,1.1,1.2 curve.c,1.1,1.2 sickle.c,1.2,1.3
Krzysztof Czaja
krzyszcz at users.sourceforge.net
Wed Dec 8 16:40:14 CET 2004
- Previous message: [PD-cvs] externals/miXed/cyclone/shadow Makefile,1.1.1.1,1.2 Makefile.objects,1.3,1.4 Makefile.sources,1.2,1.3 cyclone.c,1.6,1.7
- Next message: [PD-cvs] externals/miXed/shared/hammer gui.c,1.3,1.4 gui.h,1.1.1.1,1.2 tree.c,1.1.1.1,1.2 tree.h,1.1.1.1,1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/pure-data/externals/miXed/cyclone/sickle
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10934/cyclone/sickle
Modified Files:
Makefile.objects buffir.c curve.c sickle.c
Log Message:
various bug-fixes, maxmode, toxy .#args
Index: curve.c
===================================================================
RCS file: /cvsroot/pure-data/externals/miXed/cyclone/sickle/curve.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** curve.c 14 Aug 2003 14:31:59 -0000 1.1
--- curve.c 8 Dec 2004 15:40:12 -0000 1.2
***************
*** 1,3 ****
! /* Copyright (c) 2003 krzYszcz and others.
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
--- 1,3 ----
! /* Copyright (c) 2004 krzYszcz and others.
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
***************
*** 8,59 ****
#include "common/grow.h"
#include "common/loud.h"
#include "sickle/sic.h"
//#define CURVE_DEBUG
! /* CHECKED apparently c74's formula was not very carefully tuned. It has 5%
! deviation from the straight line for ccinput=0 (ccinput is user's curve
! control parameter, <0..1>) at half-domain, range=1. It generates nans for
! ccinput > .995.
!
! The formula below generates curves with < .000004% deviation and no nans.
!
! Problem: find a function f : ccinput -> cc, such that the curves will bend
! in a semi-linear way over the ccinput's range of 0..1. The curve function
! is then g(x, p) = (exp(f(p) * x) - 1) / (exp(f(p)) - 1), where x is curve's
! domain, and p is ccinput. If, for example, the points g(0.5, p) are to make
! a semi-linear pattern, then the solution is a function f that minimizes
! the integral of the error function e(p) = sqr(((1-p)/2)-g(.5, p)) over 0..1.
! Until someone does this analytically, we are left with a lame formula, which
! has been tweaked and tested in gnuplot: f(p) = h(p) / (1 - h(p)), where
! h(p) = (((p + 1e-20) * 1.2) ** .41) * .91. The file curve.gp, in the
! sickle's source directory, may come handy, in case there is anyone, who
! fancy tweaking it even further.
!
! To implement this, start from these equations:
! bb * mm ^ npoints = bb + 1
! (bb ^ 2) * (mm ^ npoints) = ((exp(ff/2) - 1) / (exp(ff) - 1)) ^ 2
!
! and calculate:
! hh = pow(((ccinput + c1) * c2), c3) * c4
! ff = hh / (1 - hh)
! eff = exp(ff) - 1
! gh = (exp(ff * .5) - 1) / eff
! bb = gh * (gh / (1 - (gh + gh)))
! mm = ((exp(ff * (1/npoints)) - 1) / (eff * bb)) + 1
!
! The loop is:
! for (vv = bb, i = 0; i < n; vv *= mm, i++)
! result = (vv - bb) * (y1 - y0) + y0
! where y0, y1 are start and destination values
! */
!
! #define CURVE_C1 1e-20
! #define CURVE_C2 1.2
! #define CURVE_C3 0.41
! #define CURVE_C4 0.91
!
! #define CURVE_MINCCINPUT -1.
! #define CURVE_MAXCCINPUT 1.
#define CURVE_INISIZE 64 /* LATER rethink */
--- 8,19 ----
#include "common/grow.h"
#include "common/loud.h"
+ #include "common/clc.h"
#include "sickle/sic.h"
//#define CURVE_DEBUG
! /* CHECKED apparently c74's formula has not been carefully tuned (yet?).
! It has 5% deviation from the straight line for ccinput = 0 at half-domain,
! range 1, and generates nans for ccinput > .995 (cf comment in clc.h). */
#define CURVE_INISIZE 64 /* LATER rethink */
***************
*** 64,68 ****
float s_target;
float s_delta;
! int s_npoints;
float s_ccinput;
double s_bb;
--- 24,28 ----
float s_target;
float s_delta;
! int s_nhops;
float s_ccinput;
double s_bb;
***************
*** 96,100 ****
int dbg_nretargets;
int dbg_exitpoint;
! int dbg_npoints;
#endif
} t_curve;
--- 56,60 ----
int dbg_nretargets;
int dbg_exitpoint;
! int dbg_nhops;
#endif
} t_curve;
***************
*** 105,144 ****
static void curve_cc(t_curve *x, t_curveseg *segp, float f)
{
! int npoints = segp->s_delta * x->x_ksr + 0.5; /* LATER rethink */
segp->s_ccinput = f;
! if (npoints > 0)
! {
! double hh, ff, eff, gh;
! segp->s_npoints = npoints;
! if (f < 0)
! {
! if (f < CURVE_MINCCINPUT)
! f = CURVE_MINCCINPUT;
! hh = pow(((CURVE_C1 - f) * CURVE_C2), CURVE_C3) * CURVE_C4;
! ff = hh / (1. - hh);
! eff = exp(ff) - 1.;
! gh = (exp(ff * .5) - 1.) / eff;
! segp->s_bb = gh * (gh / (1. - (gh + gh)));
! segp->s_mm = 1. / (((exp(ff * (1. / (double)npoints)) - 1.) /
! (eff * segp->s_bb)) + 1.);
! }
! else
! {
! if (f > CURVE_MAXCCINPUT)
! f = CURVE_MAXCCINPUT;
! hh = pow(((f + CURVE_C1) * CURVE_C2), CURVE_C3) * CURVE_C4;
! ff = hh / (1. - hh);
! eff = exp(ff) - 1.;
! gh = (exp(ff * .5) - 1.) / eff;
! segp->s_bb = gh * (gh / (1. - (gh + gh)));
! segp->s_mm = ((exp(ff * (1. / (double)npoints)) - 1.) /
! (eff * segp->s_bb)) + 1.;
! }
! }
! else
! {
! segp->s_npoints = 0;
! segp->s_bb = segp->s_mm = 1.;
! }
#ifdef CURVE_DEBUG
post("%g %g %g %g",
--- 65,72 ----
static void curve_cc(t_curve *x, t_curveseg *segp, float f)
{
! int nhops = segp->s_delta * x->x_ksr + 0.5; /* LATER rethink */
segp->s_ccinput = f;
! segp->s_nhops = (nhops > 0 ? nhops : 0);
! clccurve_coefs(segp->s_nhops, (double)f, &segp->s_bb, &segp->s_mm);
#ifdef CURVE_DEBUG
post("%g %g %g %g",
***************
*** 153,159 ****
post("exit point %d, after %d retarget calls",
x->dbg_exitpoint, x->dbg_nretargets);
! post("at value %g, after last %d npoints, with bb %g, mm %g",
! x->x_value, x->dbg_npoints, x->x_bb, x->x_mm);
! x->dbg_nretargets = x->dbg_exitpoint = x->dbg_npoints = 0;
#endif
}
--- 81,87 ----
post("exit point %d, after %d retarget calls",
x->dbg_exitpoint, x->dbg_nretargets);
! post("at value %g, after last %d nhops, with bb %g, mm %g",
! x->x_value, x->dbg_nhops, x->x_bb, x->x_mm);
! x->dbg_nretargets = x->dbg_exitpoint = x->dbg_nhops = 0;
#endif
}
***************
*** 178,193 ****
float target = x->x_curseg->s_target;
float delta = x->x_curseg->s_delta;
! int npoints = x->x_curseg->s_npoints;
mm = x->x_curseg->s_mm;
if (x->x_curseg->s_ccinput < 0)
- {
- bb = x->x_curseg->s_bb + 1.;
dy = x->x_value - target;
- }
else
- {
- bb = x->x_curseg->s_bb;
dy = target - x->x_value;
- }
#ifdef CURVE_DEBUG
x->dbg_nretargets++;
--- 106,116 ----
float target = x->x_curseg->s_target;
float delta = x->x_curseg->s_delta;
! int nhops = x->x_curseg->s_nhops;
! bb = x->x_curseg->s_bb;
mm = x->x_curseg->s_mm;
if (x->x_curseg->s_ccinput < 0)
dy = x->x_value - target;
else
dy = target - x->x_value;
#ifdef CURVE_DEBUG
x->dbg_nretargets++;
***************
*** 195,199 ****
x->x_nsegs--;
x->x_curseg++;
! while (npoints <= 0)
{
curval = x->x_value = target;
--- 118,122 ----
x->x_nsegs--;
x->x_curseg++;
! while (nhops <= 0)
{
curval = x->x_value = target;
***************
*** 202,217 ****
target = x->x_curseg->s_target;
delta = x->x_curseg->s_delta;
! npoints = x->x_curseg->s_npoints;
mm = x->x_curseg->s_mm;
if (x->x_curseg->s_ccinput < 0)
- {
- bb = x->x_curseg->s_bb + 1.;
dy = x->x_value - target;
- }
else
- {
- bb = x->x_curseg->s_bb;
dy = target - x->x_value;
- }
x->x_nsegs--;
x->x_curseg++;
--- 125,135 ----
target = x->x_curseg->s_target;
delta = x->x_curseg->s_delta;
! nhops = x->x_curseg->s_nhops;
! bb = x->x_curseg->s_bb;
mm = x->x_curseg->s_mm;
if (x->x_curseg->s_ccinput < 0)
dy = x->x_value - target;
else
dy = target - x->x_value;
x->x_nsegs--;
x->x_curseg++;
***************
*** 229,233 ****
}
}
! nxfer = x->x_nleft = npoints;
x->x_vv = vv = bb;
x->x_bb = bb;
--- 147,151 ----
}
}
! nxfer = x->x_nleft = nhops;
x->x_vv = vv = bb;
x->x_bb = bb;
***************
*** 238,242 ****
x->x_retarget = 0;
#ifdef CURVE_DEBUG
! x->dbg_npoints = npoints;
#endif
}
--- 156,160 ----
x->x_retarget = 0;
#ifdef CURVE_DEBUG
! x->dbg_nhops = nhops;
#endif
}
***************
*** 423,433 ****
static void *curve_new(t_floatarg f1, t_floatarg f2)
{
- static int initialized = 0;
t_curve *x = (t_curve *)pd_new(curve_class);
- if (!initialized)
- {
- curve_coef = CURVE_C2 / exp(CURVE_C3);
- initialized = 1;
- }
x->x_value = x->x_target = f1;
x->x_ccinput = f2;
--- 341,345 ----
Index: Makefile.objects
===================================================================
RCS file: /cvsroot/pure-data/externals/miXed/cyclone/sickle/Makefile.objects,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** Makefile.objects 19 Sep 2003 12:19:32 -0000 1.2
--- Makefile.objects 8 Dec 2004 15:40:12 -0000 1.3
***************
*** 6,9 ****
--- 6,11 ----
common/grow.o \
common/vefl.o \
+ common/clc.o \
+ common/lex.o \
common/binport.o \
common/port.o \
Index: sickle.c
===================================================================
RCS file: /cvsroot/pure-data/externals/miXed/cyclone/sickle/sickle.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** sickle.c 11 Sep 2003 09:04:32 -0000 1.2
--- sickle.c 8 Dec 2004 15:40:12 -0000 1.3
***************
*** 1,3 ****
! /* Copyright (c) 2002-2003 krzYszcz and others.
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
--- 1,3 ----
! /* Copyright (c) 2002-2004 krzYszcz and others.
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
***************
*** 77,80 ****
--- 77,85 ----
return;
}
+ if (zgetfn(&pd_objectmaker, gensym("sickle")))
+ {
+ loud_error(0, "sickle is already loaded");
+ return;
+ }
if (!zgetfn(&pd_objectmaker, gensym("cyclone")))
post("this is sickle %s, %s %s build",
Index: buffir.c
===================================================================
RCS file: /cvsroot/pure-data/externals/miXed/cyclone/sickle/buffir.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** buffir.c 5 Sep 2003 10:03:46 -0000 1.1
--- buffir.c 8 Dec 2004 15:40:12 -0000 1.2
***************
*** 39,47 ****
int newsize, pos = x->x_lohead - x->x_histlo;
int oldbytes = x->x_histsize * sizeof(*x->x_histlo);
! static int warned = 0;
! if (!warned)
{
! loud_incompatible(buffir_class, "stretching history buffer");
! warned = 1;
}
newsize = x->x_histsize * 2;
--- 39,50 ----
int newsize, pos = x->x_lohead - x->x_histlo;
int oldbytes = x->x_histsize * sizeof(*x->x_histlo);
! if (shared_getmaxcompatibility())
{
! static int warned = 0;
! if (!warned)
! {
! loud_incompatible(buffir_class, "stretching history buffer");
! warned = 1;
! }
}
newsize = x->x_histsize * 2;
***************
*** 195,198 ****
--- 198,202 ----
buffir_clear(x);
buffir_setrange(x, f1, f2);
+ shared_usecompatibility();
}
return (x);
- Previous message: [PD-cvs] externals/miXed/cyclone/shadow Makefile,1.1.1.1,1.2 Makefile.objects,1.3,1.4 Makefile.sources,1.2,1.3 cyclone.c,1.6,1.7
- Next message: [PD-cvs] externals/miXed/shared/hammer gui.c,1.3,1.4 gui.h,1.1.1.1,1.2 tree.c,1.1.1.1,1.2 tree.h,1.1.1.1,1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Pd-cvs
mailing list