-
Notifications
You must be signed in to change notification settings - Fork 16
/
ayumi.h
71 lines (63 loc) · 1.58 KB
/
ayumi.h
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
/* Author: Peter Sovietov */
#ifndef AYUMI_H
#define AYUMI_H
enum {
TONE_CHANNELS = 3,
DECIMATE_FACTOR = 8,
FIR_SIZE = 192,
DC_FILTER_SIZE = 1024
};
struct tone_channel {
int tone_period;
int tone_counter;
int tone;
int t_off;
int n_off;
int e_on;
int volume;
double pan_left;
double pan_right;
};
struct interpolator {
double c[4];
double y[4];
};
struct dc_filter {
double sum;
double delay[DC_FILTER_SIZE];
};
struct ayumi {
struct tone_channel channels[TONE_CHANNELS];
int noise_period;
int noise_counter;
int noise;
int envelope_counter;
int envelope_period;
int envelope_shape;
int envelope_segment;
int envelope;
const double* dac_table;
double step;
double x;
struct interpolator interpolator_left;
struct interpolator interpolator_right;
double fir_left[FIR_SIZE * 2];
double fir_right[FIR_SIZE * 2];
int fir_index;
struct dc_filter dc_left;
struct dc_filter dc_right;
int dc_index;
double left;
double right;
};
int ayumi_configure(struct ayumi* ay, int is_ym, double clock_rate, int sr);
void ayumi_set_pan(struct ayumi* ay, int index, double pan, int is_eqp);
void ayumi_set_tone(struct ayumi* ay, int index, int period);
void ayumi_set_noise(struct ayumi* ay, int period);
void ayumi_set_mixer(struct ayumi* ay, int index, int t_off, int n_off, int e_on);
void ayumi_set_volume(struct ayumi* ay, int index, int volume);
void ayumi_set_envelope(struct ayumi* ay, int period);
void ayumi_set_envelope_shape(struct ayumi* ay, int shape);
void ayumi_process(struct ayumi* ay);
void ayumi_remove_dc(struct ayumi* ay);
#endif