~ubuntu-branches/ubuntu/saucy/pd-smlib/saucy

« back to all changes in this revision

Viewing changes to lrange.c

  • Committer: Bazaar Package Importer
  • Author(s): Hans-Christoph Steiner
  • Date: 2010-11-10 15:17:58 UTC
  • Revision ID: james.westby@ubuntu.com-20101110151758-3acjf69kiudo3gh4
Tags: upstream-0.12.1
ImportĀ upstreamĀ versionĀ 0.12.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "defines.h"
 
2
 
 
3
/*--------------- lrange ---------------*/
 
4
 
 
5
static t_class *lrange_class;
 
6
 
 
7
typedef struct _lrange
 
8
{
 
9
    t_object x_obj;
 
10
        float m_min;
 
11
        float m_max;
 
12
        float m_c_leak;
 
13
        float m_leak;
 
14
} t_lrange;
 
15
 
 
16
 
 
17
static void lrange_perform(t_lrange *x, t_float in)
 
18
{
 
19
        x->m_max=(in > x->m_max) ? in : x->m_max * x->m_c_leak + in * x->m_leak;
 
20
        x->m_min=(in < x->m_min) ? in : x->m_min * x->m_c_leak + in * x->m_leak;
 
21
    outlet_float(x->x_obj.ob_outlet, x->m_max-x->m_min);
 
22
}
 
23
 
 
24
static void lrange_setHalfDecay(t_lrange *x, t_float halfDecayTime)
 
25
{
 
26
        x->m_c_leak=(float)powf(.5,(1.0f/halfDecayTime));
 
27
        x->m_leak=1.0f-x->m_c_leak;
 
28
}
 
29
 
 
30
static void lrange_clear(t_lrange *x)
 
31
{
 
32
        x->m_max = - MAXFLOAT;
 
33
        x->m_min = MAXFLOAT;
 
34
}
 
35
 
 
36
static void *lrange_new( t_float halfDecayTime)
 
37
{
 
38
        t_lrange *x=(t_lrange *)pd_new(lrange_class);
 
39
        outlet_new(&x->x_obj, gensym("float"));
 
40
 
 
41
        lrange_setHalfDecay(x, halfDecayTime);
 
42
        lrange_clear(x);
 
43
        return (void *)x;
 
44
}
 
45
 
 
46
 
 
47
void lrange_setup(void)
 
48
{
 
49
    lrange_class = class_new(gensym("lrange"),
 
50
        (t_newmethod)lrange_new, 0,
 
51
                sizeof(t_lrange), 
 
52
                CLASS_DEFAULT,
 
53
            A_DEFFLOAT, 0);
 
54
    class_addfloat(lrange_class, (t_method)lrange_perform);
 
55
        class_addmethod(lrange_class, (t_method)lrange_clear,
 
56
        gensym("clear"), A_GIMME, NULL);
 
57
        class_addmethod(lrange_class, (t_method)lrange_setHalfDecay,
 
58
        gensym("decay"), A_DEFFLOAT, NULL);
 
59
}
 
60