mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-05 14:18:53 +02:00
32 lines
900 B
Plaintext
32 lines
900 B
Plaintext
(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));
|
|
}
|
|
")
|
|
)
|
|
|