File: wavegde.h

package info (click to toggle)
csound 1%3A6.18.1%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 63,220 kB
  • sloc: ansic: 192,643; cpp: 14,149; javascript: 9,654; objc: 9,181; python: 3,376; java: 3,337; sh: 1,840; yacc: 1,255; xml: 985; perl: 635; lisp: 411; tcl: 341; lex: 217; makefile: 128
file content (103 lines) | stat: -rw-r--r-- 3,724 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*
    wavegde.h:

    Copyright (C) 1994 Michael A. Casey, John ffitch

    This file is part of Csound.

    The Csound Library is free software; you can redistribute it
    and/or modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    Csound 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 Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with Csound; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
    02110-1301 USA
*/

/* waveguide.h -- primitive data types and declarations for waveguides */

/*
 * Code conversion from C++ to C (October 1994)
 * Author: Michael A. Casey MIT Media Labs
 * Language: C
 * Copyright (c) 1994 MIT Media Lab, All Rights Reserved
 */

#ifndef _waveguide_h
#define _waveguide_h

#include <math.h>
#ifndef sinf
#define sinf(a) (MYFLT)sin((double)(a))
#define cosf(a) (MYFLT)cos((double)(a))
#define sqrtf(a) (MYFLT)sqrt((double)(a))
#define atan2f(a,b) (MYFLT)atan2((double)(a),(double)(b))
#define powf(a,b) (MYFLT)pow((double)(a),(double)(b))
#endif

/* TYPEDEFS */
typedef int64_t    len_t;    /* length type */

/* CLASS DEFINITIONS */

/* circularBuffer -- circular buffer class */
/* serves as base class for waveguides and lattice filters */
typedef struct {
  int32_t    inited;           /* Data initialization flag */
  len_t  size;             /* Size of the digital filter lattice */
  MYFLT* insertionPoint;   /* Position in queue to place new data */
  MYFLT* extractionPoint;  /* Position to read data from */
  MYFLT* data;             /* The lattice data */
  MYFLT* endPoint;         /* The end of the data */
  MYFLT* pointer;          /* pointer to current position in data */
} circularBuffer;

/* class filter -- recursive filter implementation class */
typedef struct {
  circularBuffer buffer; /* The filter's delay line */
  MYFLT* coeffs;         /* The filter's coefficients */
} filter;

/* class filter3-- JPff */
typedef struct {
  MYFLT         x1, x2;         /* Delay line */
  MYFLT         a0, a1;         /* The filter's coefficients */
} filter3;

/* filter member functions */
static void filter3Set(filter3*,MYFLT,MYFLT); /* set the coefficients */
static MYFLT filter3FIR(filter3*,MYFLT);      /* convolution filter routine */

/* waveguide rail implementation class */
typedef circularBuffer guideRail; /* It's just a circular buffer really */

/* guideRail member functions */
static MYFLT guideRailAccess(guideRail*,len_t);  /* delay line access routine */
static void guideRailUpdate(guideRail*,MYFLT);   /* delay line update routine */

/* waveguide -- abstract base class definition for waveguide classes */
typedef struct{
  int32_t
    excited;         /* excitation flag */
  guideRail upperRail; /* the right-going wave */
  guideRail lowerRail; /* the left-going wave */
  MYFLT c;             /* The tuning filter coefficient */
  MYFLT p;             /* The tuning fitler state */
  MYFLT w0;            /* The fundamental frequency (PI normalized) */
  MYFLT f0;            /* The fundamental frequency (Hertz) */
} waveguide;

static MYFLT filterAllpass(waveguide*,MYFLT);/* 1st-order allpass filtering*/

/* waveguide member functions */
static void waveguideWaveguide(CSOUND *, waveguide*, MYFLT, MYFLT*, MYFLT*);
static void waveguideSetTuning(CSOUND *,waveguide*, MYFLT); /* Set tuning filters */
#endif