00001 00002 #ifndef __GS_H 00003 #define __GS_H 00004 00005 #include <qobject.h> 00006 // sound includes 00007 #include <sys/soundcard.h> 00008 00009 #define BUFSIZE 256 00010 #define NUMCHANS 7 00011 00012 class gs : public QObject { 00013 00014 Q_OBJECT 00015 00016 public: 00017 gs(); 00018 ~gs(); 00019 00020 private: 00021 00022 int initial_fret; 00023 int finger[6]; 00024 int tuning[6]; 00025 00026 signed short *reverb; 00027 int reverb_ptr; 00028 int reverb_max; 00029 00030 int audio_fd; 00031 signed short audio_buf[BUFSIZE]; 00032 static int note_periods[12]; 00033 static int octave_step[6]; 00034 int frames; 00035 00036 00037 // 7 channel synth 00038 signed short *tonebank0; // source of waveform 00039 signed short *tonebank1; 00040 signed short *tonebank2; 00041 signed short *tonebank3; 00042 signed short *tonebank4; 00043 signed short *tonebank5; 00044 signed short *tonebank6; 00045 int tonebank_length0; 00046 int tonebank_length1; 00047 int tonebank_length2; 00048 int tonebank_length3; 00049 int tonebank_length4; 00050 int tonebank_length5; 00051 int tonebank_length6; 00052 int pb_rate0; // playback rate or 0 00053 int pb_rate1; 00054 int pb_rate2; 00055 int pb_rate3; 00056 int pb_rate4; 00057 int pb_rate5; 00058 int pb_rate6; 00059 int pb_ratio0; // accumulator for ratio 00060 int pb_ratio1; 00061 int pb_ratio2; 00062 int pb_ratio3; 00063 int pb_ratio4; 00064 int pb_ratio5; 00065 int pb_ratio6; 00066 int pb_rsc0; // pointer to current position 00067 int pb_rsc1; 00068 int pb_rsc2; 00069 int pb_rsc3; 00070 int pb_rsc4; 00071 int pb_rsc5; 00072 int pb_rsc6; 00073 int pb_oct0; // octave 00074 int pb_oct1; 00075 int pb_oct2; 00076 int pb_oct3; 00077 int pb_oct4; 00078 int pb_oct5; 00079 int pb_oct6; 00080 00081 void set_tonebank(int bank, signed short *buffer, int length); 00082 protected: 00083 00084 public: 00085 static const int MUTED=7; 00086 static const int OPEN=0; 00087 00088 // accessors 00089 int Frames(){return frames;}; 00090 int Finger(int finger); 00091 int Fret(){return initial_fret;}; 00092 int Playing(){ 00093 if (pb_rate0 == 0 && 00094 pb_rate1 == 0 && 00095 pb_rate2 == 0 && 00096 pb_rate3 == 0 && 00097 pb_rate4 == 0 && 00098 pb_rate5 == 0 && 00099 pb_rate6 == 0) return 0; 00100 return 1; 00101 }; 00102 00103 public : 00104 // mutators 00105 void Reverb(int size){reverb_max = 64 * size;}; 00106 void Finger(int finger, int position); 00107 void Fret(int position){initial_fret = position;}; 00108 void Tuning(int t[6]); 00109 void note_start(int chan, int note, int octave); 00110 00111 // methods 00112 int Play(); 00113 void fill_buffer(); 00114 void write_buffer(); 00115 void Stop(); 00116 }; 00117 00118 #endif 00119 00120 00121 00122 00123
1.4.2