aboutsummaryrefslogtreecommitdiff
path: root/modules/permut.c
diff options
context:
space:
mode:
authorHans-Christoph Steiner <eighthave@users.sourceforge.net>2006-05-25 16:40:19 +0000
committerHans-Christoph Steiner <eighthave@users.sourceforge.net>2006-05-25 16:40:19 +0000
commitd962ed33f6b5fe3040cfbd798f63ab9aa36d1f9e (patch)
treef700234efa8d57c28ce9be56e0db5f6526921fbe /modules/permut.c
parent2994949cca515f63fb82fa1d114ce07eb213220d (diff)
renamed files to match their class names
svn path=/trunk/externals/creb/; revision=5127
Diffstat (limited to 'modules/permut.c')
-rw-r--r--modules/permut.c177
1 files changed, 0 insertions, 177 deletions
diff --git a/modules/permut.c b/modules/permut.c
deleted file mode 100644
index a81cc12..0000000
--- a/modules/permut.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * permut.c - applies a (random) permutation on a signal block
- * intended for spectral processing, dynwav
- *
- * Copyright (c) 2000-2003 by Tom Schouten
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <m_pd.h>
-#include <math.h>
-#include "extlib_util.h"
-#include <stdlib.h>
-
-typedef struct permutctl
-{
- char c_type;
- t_int *c_permutationtable;
- int c_blocksize;
-} t_permutctl;
-
-typedef struct permut
-{
- t_object x_obj;
- t_float x_f;
- t_permutctl x_ctl;
-} t_permut;
-
-
-static inline void permut_perform_permutation(t_float *S, int n, t_int *f)
-{
- t_int k,l;
- t_float swap;
- for(k=0; k<n; k++)
- {
- l = f[k];
- while (l<k) l = f[l];
- swap = S[k];
- S[k] = S[l];
- S[l] = swap;
- }
-}
-
-
-static void permut_random(t_permut *x, t_floatarg seed)
-{
- int i,j;
- int N = x->x_ctl.c_blocksize;
- int mask = N-1;
- t_int *p = x->x_ctl.c_permutationtable;
- int r, last = 0;
-
- //srand(* ((unsigned int *)(&seed)));
- srand (((t_flint)seed).i);
-
- if(p)
- {
- p[0] = rand() & mask;
- for (i=1;i<N;i++)
- {
- r = rand() & mask;
- j = 0;
- while(j<i)
- {
- if (p[j] == r)
- {
- r = (r + 1) & mask;
- j = 0;
- }
- else j++;
- }
- p[i] = r;
-
- }
- }
-}
-
-static void permut_bang(t_permut *x)
-{
- unsigned int r = rand();
- //permut_random(x, *((float *)(&r)));
- permut_random(x, ((t_flint)r).f);
-}
-
-static void permut_resize_table(t_permut *x, int size)
-{
- if (x->x_ctl.c_blocksize != size)
- {
- if (x->x_ctl.c_permutationtable)
- free(x->x_ctl.c_permutationtable);
- x->x_ctl.c_permutationtable = (t_int *)malloc(sizeof(int)*size);
- x->x_ctl.c_blocksize = size;
-
- /* make sure it's initialized */
- permut_bang(x);
-
-
- }
-}
-
-
-
-
-static t_int *permut_perform(t_int *w)
-{
-
-
- t_float *in = (float *)(w[3]);
- t_float *out = (float *)(w[4]);
- t_permutctl *ctl = (t_permutctl *)(w[1]);
- t_int i;
- t_int n = (t_int)(w[2]);
- t_float x,y;
- t_int *p = ctl->c_permutationtable;
-
-
- if (in != out)
- for (i=0; i<n; i++) out[i] = in[i];
-
-
- permut_perform_permutation(out, n, p);
-
- return (w+5);
-}
-
-static void permut_dsp(t_permut *x, t_signal **sp)
-{
- permut_resize_table(x, sp[0]->s_n);
- dsp_add(permut_perform, 4, &x->x_ctl, sp[0]->s_n, sp[0]->s_vec, sp[1]->s_vec);
-
-}
-
-static void permut_free(t_permut *x)
-{
- if (x->x_ctl.c_permutationtable) free(x->x_ctl.c_permutationtable);
-
-}
-
-t_class *permut_class;
-
-static void *permut_new(void)
-{
- t_permut *x = (t_permut *)pd_new(permut_class);
- outlet_new(&x->x_obj, gensym("signal"));
-
- x->x_ctl.c_permutationtable = 0;
- x->x_ctl.c_blocksize = 0;
- permut_resize_table(x, 64);
- permut_random(x, 0);
-
- return (void *)x;
-}
-
-void permut_tilde_setup(void)
-{
- //post("permut~ v0.1");
- permut_class = class_new(gensym("permut~"), (t_newmethod)permut_new,
- (t_method)permut_free, sizeof(t_permut), 0, A_DEFFLOAT, 0);
- CLASS_MAINSIGNALIN(permut_class, t_permut, x_f);
- class_addmethod(permut_class, (t_method)permut_random, gensym("random"), A_FLOAT, 0);
- class_addmethod(permut_class, (t_method)permut_bang, gensym("bang"), 0);
- class_addmethod(permut_class, (t_method)permut_dsp, gensym("dsp"), 0);
-
-}
-