~ubuntu-branches/ubuntu/wily/python-pyo/wily-proposed

« back to all changes in this revision

Viewing changes to src/objects/noisemodule.c

  • Committer: Package Import Robot
  • Author(s): Tiago Bortoletto Vaz
  • Date: 2015-05-25 09:55:36 UTC
  • mfrom: (13.1.2 experimental)
  • Revision ID: package-import@ubuntu.com-20150525095536-haz5xfrxl6u3m085
Tags: 0.7.5-2
Minor packaging fixes and push to unstable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*************************************************************************
2
 
 * Copyright 2010 Olivier Belanger                                        *                  
3
 
 *                                                                        * 
 
1
/**************************************************************************
 
2
 * Copyright 2009-2015 Olivier Belanger                                   *
 
3
 *                                                                        *
4
4
 * This file is part of pyo, a python module to help digital signal       *
5
 
 * processing script creation.                                            *  
6
 
 *                                                                        * 
 
5
 * processing script creation.                                            *
 
6
 *                                                                        *
7
7
 * pyo is free software: you can redistribute it and/or modify            *
8
 
 * it under the terms of the GNU General Public License as published by   *
9
 
 * the Free Software Foundation, either version 3 of the License, or      *
10
 
 * (at your option) any later version.                                    * 
 
8
 * it under the terms of the GNU Lesser General Public License as         *
 
9
 * published by the Free Software Foundation, either version 3 of the     *
 
10
 * License, or (at your option) any later version.                        *
11
11
 *                                                                        *
12
12
 * pyo is distributed in the hope that it will be useful,                 *
13
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of         *    
 
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of         *
14
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
15
 
 * GNU General Public License for more details.                           *
 
15
 * GNU Lesser General Public License for more details.                    *
16
16
 *                                                                        *
17
 
 * You should have received a copy of the GNU General Public License      *
18
 
 * along with pyo.  If not, see <http://www.gnu.org/licenses/>.           *
 
17
 * You should have received a copy of the GNU Lesser General Public       *
 
18
 * License along with pyo.  If not, see <http://www.gnu.org/licenses/>.   *
19
19
 *************************************************************************/
20
20
 
21
21
#include <Python.h>
44
44
static void
45
45
Noise_generate_cheap(Noise *self) {
46
46
    int i;
47
 
    
 
47
 
48
48
    for (i=0; i<self->bufsize; i++) {
49
49
        self->seed = (self->seed * 15625 + 1) & 0xFFFF;
50
50
        self->data[i] = (self->seed - 0x8000) * 3.0517578125e-05;
66
66
{
67
67
    int muladdmode;
68
68
    muladdmode = self->modebuffer[0] + self->modebuffer[1] * 10;
69
 
    
 
69
 
70
70
    switch (self->type) {
71
71
        case 0:
72
72
            self->proc_func_ptr = Noise_generate;
76
76
            break;
77
77
    }
78
78
        switch (muladdmode) {
79
 
        case 0:        
 
79
        case 0:
80
80
            self->muladd_func_ptr = Noise_postprocessing_ii;
81
81
            break;
82
 
        case 1:    
 
82
        case 1:
83
83
            self->muladd_func_ptr = Noise_postprocessing_ai;
84
84
            break;
85
 
        case 2:    
 
85
        case 2:
86
86
            self->muladd_func_ptr = Noise_postprocessing_revai;
87
87
            break;
88
 
        case 10:        
 
88
        case 10:
89
89
            self->muladd_func_ptr = Noise_postprocessing_ia;
90
90
            break;
91
 
        case 11:    
 
91
        case 11:
92
92
            self->muladd_func_ptr = Noise_postprocessing_aa;
93
93
            break;
94
 
        case 12:    
 
94
        case 12:
95
95
            self->muladd_func_ptr = Noise_postprocessing_revaa;
96
96
            break;
97
 
        case 20:        
 
97
        case 20:
98
98
            self->muladd_func_ptr = Noise_postprocessing_ireva;
99
99
            break;
100
 
        case 21:    
 
100
        case 21:
101
101
            self->muladd_func_ptr = Noise_postprocessing_areva;
102
102
            break;
103
 
        case 22:    
 
103
        case 22:
104
104
            self->muladd_func_ptr = Noise_postprocessing_revareva;
105
105
            break;
106
106
    }
109
109
static void
110
110
Noise_compute_next_data_frame(Noise *self)
111
111
{
112
 
    (*self->proc_func_ptr)(self); 
 
112
    (*self->proc_func_ptr)(self);
113
113
    (*self->muladd_func_ptr)(self);
114
114
}
115
115
 
120
120
    return 0;
121
121
}
122
122
 
123
 
static int 
 
123
static int
124
124
Noise_clear(Noise *self)
125
125
{
126
126
    pyo_CLEAR
142
142
    PyObject *multmp=NULL, *addtmp=NULL;
143
143
    Noise *self;
144
144
    self = (Noise *)type->tp_alloc(type, 0);
145
 
    
 
145
 
146
146
    self->type = 0;
147
147
        self->modebuffer[0] = 0;
148
148
        self->modebuffer[1] = 0;
152
152
    self->mode_func_ptr = Noise_setProcMode;
153
153
 
154
154
    static char *kwlist[] = {"mul", "add", NULL};
155
 
    
 
155
 
156
156
    if (! PyArg_ParseTupleAndKeywords(args, kwds, "|OO", kwlist, &multmp, &addtmp))
157
 
        Py_RETURN_NONE; 
158
 
 
 
157
        Py_RETURN_NONE;
 
158
 
159
159
    if (multmp) {
160
160
        PyObject_CallMethod((PyObject *)self, "setMul", "O", multmp);
161
161
    }
162
 
    
 
162
 
163
163
    if (addtmp) {
164
164
        PyObject_CallMethod((PyObject *)self, "setAdd", "O", addtmp);
165
165
    }
166
 
    
 
166
 
167
167
    PyObject_CallMethod(self->server, "addStream", "O", self->stream);
168
168
 
169
169
    Server_generateSeed((Server *)self->server, NOISE_ID);
170
 
    
 
170
 
171
171
    self->seed = rand();
172
172
 
173
173
    (*self->mode_func_ptr)(self);
174
 
    
 
174
 
175
175
    return (PyObject *)self;
176
176
}
177
177
 
178
178
static PyObject * Noise_getServer(Noise* self) { GET_SERVER };
179
179
static PyObject * Noise_getStream(Noise* self) { GET_STREAM };
180
 
static PyObject * Noise_setMul(Noise *self, PyObject *arg) { SET_MUL }; 
181
 
static PyObject * Noise_setAdd(Noise *self, PyObject *arg) { SET_ADD }; 
182
 
static PyObject * Noise_setSub(Noise *self, PyObject *arg) { SET_SUB }; 
183
 
static PyObject * Noise_setDiv(Noise *self, PyObject *arg) { SET_DIV }; 
 
180
static PyObject * Noise_setMul(Noise *self, PyObject *arg) { SET_MUL };
 
181
static PyObject * Noise_setAdd(Noise *self, PyObject *arg) { SET_ADD };
 
182
static PyObject * Noise_setSub(Noise *self, PyObject *arg) { SET_SUB };
 
183
static PyObject * Noise_setDiv(Noise *self, PyObject *arg) { SET_DIV };
184
184
 
185
185
static PyObject * Noise_play(Noise *self, PyObject *args, PyObject *kwds) { PLAY };
186
186
static PyObject * Noise_out(Noise *self, PyObject *args, PyObject *kwds) { OUT };
197
197
 
198
198
static PyObject *
199
199
Noise_setType(Noise *self, PyObject *arg)
200
 
{       
 
200
{
201
201
    if (arg == NULL) {
202
202
        Py_INCREF(Py_None);
203
203
        return Py_None;
204
204
    }
205
 
    
 
205
 
206
206
    if (PyInt_AS_LONG(arg) == 0)
207
207
        self->type = 0;
208
208
    else if (PyInt_AS_LONG(arg) == 1)
212
212
 
213
213
    Py_INCREF(Py_None);
214
214
    return Py_None;
215
 
}       
 
215
}
216
216
 
217
217
static PyMemberDef Noise_members[] = {
218
218
{"server", T_OBJECT_EX, offsetof(Noise, server), 0, "Pyo server."},
336
336
PinkNoise_generate(PinkNoise *self) {
337
337
    MYFLT in, val;
338
338
    int i;
339
 
    
 
339
 
340
340
    for (i=0; i<self->bufsize; i++) {
341
341
        in = rand()/((MYFLT)(RAND_MAX)+1)*1.98-0.99;
342
342
        self->c0 = self->c0 * 0.99886 + in * 0.0555179;
366
366
{
367
367
    int muladdmode;
368
368
    muladdmode = self->modebuffer[0] + self->modebuffer[1] * 10;
369
 
    
 
369
 
370
370
        switch (muladdmode) {
371
 
        case 0:        
 
371
        case 0:
372
372
            self->muladd_func_ptr = PinkNoise_postprocessing_ii;
373
373
            break;
374
 
        case 1:    
 
374
        case 1:
375
375
            self->muladd_func_ptr = PinkNoise_postprocessing_ai;
376
376
            break;
377
 
        case 2:    
 
377
        case 2:
378
378
            self->muladd_func_ptr = PinkNoise_postprocessing_revai;
379
379
            break;
380
 
        case 10:        
 
380
        case 10:
381
381
            self->muladd_func_ptr = PinkNoise_postprocessing_ia;
382
382
            break;
383
 
        case 11:    
 
383
        case 11:
384
384
            self->muladd_func_ptr = PinkNoise_postprocessing_aa;
385
385
            break;
386
 
        case 12:    
 
386
        case 12:
387
387
            self->muladd_func_ptr = PinkNoise_postprocessing_revaa;
388
388
            break;
389
 
        case 20:        
 
389
        case 20:
390
390
            self->muladd_func_ptr = PinkNoise_postprocessing_ireva;
391
391
            break;
392
 
        case 21:    
 
392
        case 21:
393
393
            self->muladd_func_ptr = PinkNoise_postprocessing_areva;
394
394
            break;
395
 
        case 22:    
 
395
        case 22:
396
396
            self->muladd_func_ptr = PinkNoise_postprocessing_revareva;
397
397
            break;
398
398
    }
401
401
static void
402
402
PinkNoise_compute_next_data_frame(PinkNoise *self)
403
403
{
404
 
    PinkNoise_generate(self); 
 
404
    PinkNoise_generate(self);
405
405
    (*self->muladd_func_ptr)(self);
406
406
}
407
407
 
412
412
    return 0;
413
413
}
414
414
 
415
 
static int 
 
415
static int
416
416
PinkNoise_clear(PinkNoise *self)
417
417
{
418
418
    pyo_CLEAR
434
434
    PyObject *multmp=NULL, *addtmp=NULL;
435
435
    PinkNoise *self;
436
436
    self = (PinkNoise *)type->tp_alloc(type, 0);
437
 
    
 
437
 
438
438
    self->c0 = self->c1 = self->c2 = self->c3 = self->c4 = self->c5 = self->c6 = 0.0;
439
439
        self->modebuffer[0] = 0;
440
440
        self->modebuffer[1] = 0;
441
 
    
 
441
 
442
442
    INIT_OBJECT_COMMON
443
443
    Stream_setFunctionPtr(self->stream, PinkNoise_compute_next_data_frame);
444
444
    self->mode_func_ptr = PinkNoise_setProcMode;
445
445
 
446
446
    static char *kwlist[] = {"mul", "add", NULL};
447
 
    
 
447
 
448
448
    if (! PyArg_ParseTupleAndKeywords(args, kwds, "|OO", kwlist, &multmp, &addtmp))
449
449
        Py_RETURN_NONE;
450
 
    
 
450
 
451
451
    if (multmp) {
452
452
        PyObject_CallMethod((PyObject *)self, "setMul", "O", multmp);
453
453
    }
454
 
    
 
454
 
455
455
    if (addtmp) {
456
456
        PyObject_CallMethod((PyObject *)self, "setAdd", "O", addtmp);
457
457
    }
458
 
    
 
458
 
459
459
    PyObject_CallMethod(self->server, "addStream", "O", self->stream);
460
 
    
 
460
 
461
461
    (*self->mode_func_ptr)(self);
462
 
    
 
462
 
463
463
    Server_generateSeed((Server *)self->server, PINKNOISE_ID);
464
464
 
465
465
    return (PyObject *)self;
467
467
 
468
468
static PyObject * PinkNoise_getServer(PinkNoise* self) { GET_SERVER };
469
469
static PyObject * PinkNoise_getStream(PinkNoise* self) { GET_STREAM };
470
 
static PyObject * PinkNoise_setMul(PinkNoise *self, PyObject *arg) { SET_MUL }; 
471
 
static PyObject * PinkNoise_setAdd(PinkNoise *self, PyObject *arg) { SET_ADD }; 
472
 
static PyObject * PinkNoise_setSub(PinkNoise *self, PyObject *arg) { SET_SUB }; 
473
 
static PyObject * PinkNoise_setDiv(PinkNoise *self, PyObject *arg) { SET_DIV }; 
 
470
static PyObject * PinkNoise_setMul(PinkNoise *self, PyObject *arg) { SET_MUL };
 
471
static PyObject * PinkNoise_setAdd(PinkNoise *self, PyObject *arg) { SET_ADD };
 
472
static PyObject * PinkNoise_setSub(PinkNoise *self, PyObject *arg) { SET_SUB };
 
473
static PyObject * PinkNoise_setDiv(PinkNoise *self, PyObject *arg) { SET_DIV };
474
474
 
475
475
static PyObject * PinkNoise_play(PinkNoise *self, PyObject *args, PyObject *kwds) { PLAY };
476
476
static PyObject * PinkNoise_out(PinkNoise *self, PyObject *args, PyObject *kwds) { OUT };
602
602
BrownNoise_generate(BrownNoise *self) {
603
603
    MYFLT rnd, val;
604
604
    int i;
605
 
    
 
605
 
606
606
    for (i=0; i<self->bufsize; i++) {
607
607
        rnd = rand()/((MYFLT)(RAND_MAX)+1)*1.98-0.99;
608
608
        val = self->c1 * rnd + self->c2 * self->y1;
626
626
{
627
627
    int muladdmode;
628
628
    muladdmode = self->modebuffer[0] + self->modebuffer[1] * 10;
629
 
    
 
629
 
630
630
        switch (muladdmode) {
631
 
        case 0:        
 
631
        case 0:
632
632
            self->muladd_func_ptr = BrownNoise_postprocessing_ii;
633
633
            break;
634
 
        case 1:    
 
634
        case 1:
635
635
            self->muladd_func_ptr = BrownNoise_postprocessing_ai;
636
636
            break;
637
 
        case 2:    
 
637
        case 2:
638
638
            self->muladd_func_ptr = BrownNoise_postprocessing_revai;
639
639
            break;
640
 
        case 10:        
 
640
        case 10:
641
641
            self->muladd_func_ptr = BrownNoise_postprocessing_ia;
642
642
            break;
643
 
        case 11:    
 
643
        case 11:
644
644
            self->muladd_func_ptr = BrownNoise_postprocessing_aa;
645
645
            break;
646
 
        case 12:    
 
646
        case 12:
647
647
            self->muladd_func_ptr = BrownNoise_postprocessing_revaa;
648
648
            break;
649
 
        case 20:        
 
649
        case 20:
650
650
            self->muladd_func_ptr = BrownNoise_postprocessing_ireva;
651
651
            break;
652
 
        case 21:    
 
652
        case 21:
653
653
            self->muladd_func_ptr = BrownNoise_postprocessing_areva;
654
654
            break;
655
 
        case 22:    
 
655
        case 22:
656
656
            self->muladd_func_ptr = BrownNoise_postprocessing_revareva;
657
657
            break;
658
658
    }
661
661
static void
662
662
BrownNoise_compute_next_data_frame(BrownNoise *self)
663
663
{
664
 
    BrownNoise_generate(self); 
 
664
    BrownNoise_generate(self);
665
665
    (*self->muladd_func_ptr)(self);
666
666
}
667
667
 
672
672
    return 0;
673
673
}
674
674
 
675
 
static int 
 
675
static int
676
676
BrownNoise_clear(BrownNoise *self)
677
677
{
678
678
    pyo_CLEAR
695
695
    PyObject *multmp=NULL, *addtmp=NULL;
696
696
    BrownNoise *self;
697
697
    self = (BrownNoise *)type->tp_alloc(type, 0);
698
 
    
 
698
 
699
699
        self->modebuffer[0] = 0;
700
700
        self->modebuffer[1] = 0;
701
701
    self->y1 = self->c1 = self->c2 = 0.0;
702
 
    
 
702
 
703
703
    INIT_OBJECT_COMMON
704
704
    Stream_setFunctionPtr(self->stream, BrownNoise_compute_next_data_frame);
705
705
    self->mode_func_ptr = BrownNoise_setProcMode;
706
706
 
707
707
    static char *kwlist[] = {"mul", "add", NULL};
708
 
    
 
708
 
709
709
    if (! PyArg_ParseTupleAndKeywords(args, kwds, "|OO", kwlist, &multmp, &addtmp))
710
710
        Py_RETURN_NONE;
711
 
    
 
711
 
712
712
    if (multmp) {
713
713
        PyObject_CallMethod((PyObject *)self, "setMul", "O", multmp);
714
714
    }
715
 
    
 
715
 
716
716
    if (addtmp) {
717
717
        PyObject_CallMethod((PyObject *)self, "setAdd", "O", addtmp);
718
718
    }
719
 
    
 
719
 
720
720
    PyObject_CallMethod(self->server, "addStream", "O", self->stream);
721
721
 
722
722
    b = 2.0 - MYCOS(TWOPI * 20.0 / self->sr);
723
723
    self->c2 = (b - MYSQRT(b * b - 1.0));
724
724
    self->c1 = 1.0 - self->c2;
725
 
    
 
725
 
726
726
    (*self->mode_func_ptr)(self);
727
 
    
 
727
 
728
728
    Server_generateSeed((Server *)self->server, BROWNNOISE_ID);
729
 
    
 
729
 
730
730
    return (PyObject *)self;
731
731
}
732
732
 
733
733
static PyObject * BrownNoise_getServer(BrownNoise* self) { GET_SERVER };
734
734
static PyObject * BrownNoise_getStream(BrownNoise* self) { GET_STREAM };
735
 
static PyObject * BrownNoise_setMul(BrownNoise *self, PyObject *arg) { SET_MUL };       
736
 
static PyObject * BrownNoise_setAdd(BrownNoise *self, PyObject *arg) { SET_ADD };       
737
 
static PyObject * BrownNoise_setSub(BrownNoise *self, PyObject *arg) { SET_SUB };       
738
 
static PyObject * BrownNoise_setDiv(BrownNoise *self, PyObject *arg) { SET_DIV };       
 
735
static PyObject * BrownNoise_setMul(BrownNoise *self, PyObject *arg) { SET_MUL };
 
736
static PyObject * BrownNoise_setAdd(BrownNoise *self, PyObject *arg) { SET_ADD };
 
737
static PyObject * BrownNoise_setSub(BrownNoise *self, PyObject *arg) { SET_SUB };
 
738
static PyObject * BrownNoise_setDiv(BrownNoise *self, PyObject *arg) { SET_DIV };
739
739
 
740
740
static PyObject * BrownNoise_play(BrownNoise *self, PyObject *args, PyObject *kwds) { PLAY };
741
741
static PyObject * BrownNoise_out(BrownNoise *self, PyObject *args, PyObject *kwds) { OUT };
854
854
    0,                         /* tp_alloc */
855
855
    BrownNoise_new,                 /* tp_new */
856
856
};
857