blob: e00afde657d582bace166555aa30c7f913dcb1ab (
plain)
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
|
(SINE-ALG
(NAME "sine")
(ARGUMENTS ("time_type" "t0") ("double" "hz") ("rate_type" "sr") ("time_type" "d"))
(STATE ("long" "phase" "0")
("long" "ph_incr" "round(((hz * SINE_TABLE_LEN) * (1 << SINE_TABLE_SHIFT) / sr))"))
(TERMINATE (AFTER "d"))
(INNER-LOOP "output = sine_table[phase >> SINE_TABLE_SHIFT];
phase += ph_incr;
phase &= SINE_TABLE_MASK;")
(MAINTAIN ("phase"
"susp->phase = (susp->phase + susp->ph_incr * togo) & SINE_TABLE_MASK"))
(CONSTANT "ph_incr")
(SAMPLE-RATE "sr")
(SUPPORT-HEADER "#define SINE_TABLE_LEN 2048
#define SINE_TABLE_MASK 0x7FFFFFFF
#define SINE_TABLE_SHIFT 20
void sine_init();
extern sample_type sine_table[];
")
(SUPPORT-FUNCTIONS "
sample_type sine_table[SINE_TABLE_LEN + 1];
void sine_init()
{
int i;
for (i = 0; i <= SINE_TABLE_LEN; i++)
sine_table[i] = (sample_type) (sin((PI * 2 * i) / SINE_TABLE_LEN));
}
")
)
|