blob: f2b309f1ef6c28f8f227307f09607bb7e531e78e (
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
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
#ifndef __GS_H
#define __GS_H
#include <qobject.h>
// sound includes
#include <sys/soundcard.h>
#define BUFSIZE 256
#define NUMCHANS 7
class gs : public QObject {
Q_OBJECT
public:
gs();
~gs();
private:
int initial_fret;
int finger[6];
int tuning[6];
signed short *reverb;
int reverb_ptr;
int reverb_max;
int audio_fd;
signed short audio_buf[BUFSIZE];
static int note_periods[12];
static int octave_step[6];
int frames;
// 7 channel synth
signed short *tonebank0; // source of waveform
signed short *tonebank1;
signed short *tonebank2;
signed short *tonebank3;
signed short *tonebank4;
signed short *tonebank5;
signed short *tonebank6;
int tonebank_length0;
int tonebank_length1;
int tonebank_length2;
int tonebank_length3;
int tonebank_length4;
int tonebank_length5;
int tonebank_length6;
int pb_rate0; // playback rate or 0
int pb_rate1;
int pb_rate2;
int pb_rate3;
int pb_rate4;
int pb_rate5;
int pb_rate6;
int pb_ratio0; // accumulator for ratio
int pb_ratio1;
int pb_ratio2;
int pb_ratio3;
int pb_ratio4;
int pb_ratio5;
int pb_ratio6;
int pb_rsc0; // pointer to current position
int pb_rsc1;
int pb_rsc2;
int pb_rsc3;
int pb_rsc4;
int pb_rsc5;
int pb_rsc6;
int pb_oct0; // octave
int pb_oct1;
int pb_oct2;
int pb_oct3;
int pb_oct4;
int pb_oct5;
int pb_oct6;
void set_tonebank(int bank, signed short *buffer, int length);
protected:
public:
static const int MUTED=7;
static const int OPEN=0;
// accessors
int Frames(){return frames;};
int Finger(int finger);
int Fret(){return initial_fret;};
int Playing(){
if (pb_rate0 == 0 &&
pb_rate1 == 0 &&
pb_rate2 == 0 &&
pb_rate3 == 0 &&
pb_rate4 == 0 &&
pb_rate5 == 0 &&
pb_rate6 == 0) return 0;
return 1;
};
public :
// mutators
void Reverb(int size){reverb_max = 64 * size;};
void Finger(int finger, int position);
void Fret(int position){initial_fret = position;};
void Tuning(int t[6]);
void note_start(int chan, int note, int octave);
// methods
int Play();
void fill_buffer();
void write_buffer();
void Stop();
};
#endif
|