summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/powerchord/gs.cpp17
-rw-r--r--noncore/multimedia/powerchord/gs.h1
-rw-r--r--noncore/multimedia/powerchord/opie-powerchord.control8
-rw-r--r--share/powerchord/acguitar.rawbin0 -> 50000 bytes
4 files changed, 15 insertions, 11 deletions
diff --git a/noncore/multimedia/powerchord/gs.cpp b/noncore/multimedia/powerchord/gs.cpp
index a3e85c9..fdcfb74 100644
--- a/noncore/multimedia/powerchord/gs.cpp
+++ b/noncore/multimedia/powerchord/gs.cpp
@@ -1,160 +1,165 @@
1 1
2//#include <FL/Fl.H> 2//#include <FL/Fl.H>
3//#include <FL/Fl_Widget.H> 3//#include <FL/Fl_Widget.H>
4//#include <FL/fl_draw.H> 4//#include <FL/fl_draw.H>
5#include <stdio.h> 5#include <stdio.h>
6//#include <qpixmap.h> 6//#include <qpixmap.h>
7#include "gs.h" 7#include "gs.h"
8 8
9#include <sys/ioctl.h> 9#include <sys/ioctl.h>
10#include <unistd.h> 10#include <unistd.h>
11#include <fcntl.h> 11#include <fcntl.h>
12#include <sys/soundcard.h> 12#include <sys/soundcard.h>
13 13
14#include <errno.h> 14#include <errno.h>
15#include <string.h> 15#include <string.h>
16 16
17#include <stdlib.h> 17#include <stdlib.h>
18 18
19//#include <qpainter.h> 19//#include <qpainter.h>
20#include <qmessagebox.h> 20#include <qmessagebox.h>
21#include <qstring.h>
21 22
22 23
23gs::gs() 24gs::gs()
24{ 25{
25 26
26 finger[0] = OPEN; 27 finger[0] = OPEN;
27 finger[1] = OPEN; 28 finger[1] = OPEN;
28 finger[2] = OPEN; 29 finger[2] = OPEN;
29 finger[3] = OPEN; 30 finger[3] = OPEN;
30 finger[4] = OPEN; 31 finger[4] = OPEN;
31 finger[5] = OPEN; 32 finger[5] = OPEN;
32 33
33 tuning[0] = 0; 34 tuning[0] = 0;
34 tuning[1] = 0; 35 tuning[1] = 0;
35 tuning[2] = 0; 36 tuning[2] = 0;
36 tuning[3] = 0; 37 tuning[3] = 0;
37 tuning[4] = 0; 38 tuning[4] = 0;
38 tuning[5] = 0; 39 tuning[5] = 0;
39 40
40 initial_fret = 0; 41 initial_fret = 0;
41 42
42 audio_fd = -1; 43 audio_fd = -1;
43 44
44 pb_rate0 = 0; 45 pb_rate0 = 0;
45 pb_rate1 = 0; 46 pb_rate1 = 0;
46 pb_rate2 = 0; 47 pb_rate2 = 0;
47 pb_rate3 = 0; 48 pb_rate3 = 0;
48 pb_rate4 = 0; 49 pb_rate4 = 0;
49 pb_rate5 = 0; 50 pb_rate5 = 0;
50 pb_rate6 = 0; 51 pb_rate6 = 0;
51 52
52 pb_oct0 = 0; 53 pb_oct0 = 0;
53 pb_oct1 = 0; 54 pb_oct1 = 0;
54 pb_oct2 = 0; 55 pb_oct2 = 0;
55 pb_oct3 = 0; 56 pb_oct3 = 0;
56 pb_oct4 = 0; 57 pb_oct4 = 0;
57 pb_oct5 = 0; 58 pb_oct5 = 0;
58 pb_oct6 = 0; 59 pb_oct6 = 0;
59 60
60 // initialise reverb buffer 61 // initialise reverb buffer
61 reverb = (signed short *)malloc(1024 * sizeof(signed short)); 62 reverb = (signed short *)malloc(1024 * sizeof(signed short));
62 63
63 for (reverb_ptr=0;reverb_ptr<1024;reverb_ptr++){ 64 for (reverb_ptr=0;reverb_ptr<1024;reverb_ptr++){
64 reverb[reverb_ptr] = 0; 65 reverb[reverb_ptr] = 0;
65 } 66 }
66 reverb_ptr = 0; 67 reverb_ptr = 0;
67 reverb_max = 1024; 68 reverb_max = 1024;
68 69
69 // load sampled 'E' string 70 // load sampled 'E' string
70 int samplen = 25000; 71 int samplen = 25000;
71 72
72 signed short *dsp_buf = (signed short *)malloc(samplen * sizeof(signed short)); 73 signed short *dsp_buf = (signed short *)malloc(samplen * sizeof(signed short));
73 signed short *dsp_buf_ptr = dsp_buf; 74 signed short *dsp_buf_ptr = dsp_buf;
74 75
75 int raw_fd; 76 int raw_fd;
76 raw_fd = open(ACGUITAR_PATH_S, O_RDONLY); 77
77 78 QString path = getenv( "OPIEDIR" );
79 path.append( "/share/powerchord/acguitar.raw" );
80
81 raw_fd = open( (const char*) path, O_RDONLY);
82
78 if (raw_fd < 0){ 83 if (raw_fd < 0){
79 fprintf(stderr, "Failed to open raw file (%s)\n", strerror(errno)); 84 fprintf(stderr, "Failed to open raw file (%s)\n", strerror(errno));
80 exit(-1); 85 exit(-1);
81 } 86 }
82 87
83 int totread = 0; 88 int totread = 0;
84 int i; 89 int i;
85 90
86 while (totread < samplen*2){ 91 while (totread < samplen*2){
87 int want = samplen*2 - totread; 92 int want = samplen*2 - totread;
88 93
89 int numread = read(raw_fd, dsp_buf_ptr, want); 94 int numread = read(raw_fd, dsp_buf_ptr, want);
90 fprintf(stderr, "read %d bytes\n", numread); 95 fprintf(stderr, "read %d bytes\n", numread);
91 totread += numread; 96 totread += numread;
92 dsp_buf_ptr += numread/2; 97 dsp_buf_ptr += numread/2;
93 98
94 if (numread == 0){ 99 if (numread == 0){
95 fprintf(stderr, "failed to read bytes\n"); 100 fprintf(stderr, "failed to read bytes\n");
96 exit(-1); 101 exit(-1);
97 } 102 }
98 } 103 }
99 104
100 close(raw_fd); 105 close(raw_fd);
101 106
102 // scale down a bit for mixing 107 // scale down a bit for mixing
103 for (i=0;i<samplen;i++){ 108 for (i=0;i<samplen;i++){
104 dsp_buf[i] /= 6; 109 dsp_buf[i] /= 6;
105 } 110 }
106 111
107 set_tonebank(0, dsp_buf, samplen); 112 set_tonebank(0, dsp_buf, samplen);
108 set_tonebank(1, dsp_buf, samplen); 113 set_tonebank(1, dsp_buf, samplen);
109 set_tonebank(2, dsp_buf, samplen); 114 set_tonebank(2, dsp_buf, samplen);
110 set_tonebank(3, dsp_buf, samplen); 115 set_tonebank(3, dsp_buf, samplen);
111 set_tonebank(4, dsp_buf, samplen); 116 set_tonebank(4, dsp_buf, samplen);
112 set_tonebank(5, dsp_buf, samplen); 117 set_tonebank(5, dsp_buf, samplen);
113 set_tonebank(6, dsp_buf, samplen); 118 set_tonebank(6, dsp_buf, samplen);
114 119
115} 120}
116 121
117void gs::set_tonebank(int tb, signed short *buf, int length) 122void gs::set_tonebank(int tb, signed short *buf, int length)
118{ 123{
119 switch(tb){ 124 switch(tb){
120 case 0: 125 case 0:
121 tonebank0 = buf; 126 tonebank0 = buf;
122 tonebank_length0 = length; 127 tonebank_length0 = length;
123 break; 128 break;
124 case 1: 129 case 1:
125 tonebank1 = buf; 130 tonebank1 = buf;
126 tonebank_length1 = length; 131 tonebank_length1 = length;
127 break; 132 break;
128 case 2: 133 case 2:
129 tonebank2 = buf; 134 tonebank2 = buf;
130 tonebank_length2 = length; 135 tonebank_length2 = length;
131 break; 136 break;
132 case 3: 137 case 3:
133 tonebank3 = buf; 138 tonebank3 = buf;
134 tonebank_length3 = length; 139 tonebank_length3 = length;
135 break; 140 break;
136 case 4: 141 case 4:
137 tonebank4 = buf; 142 tonebank4 = buf;
138 tonebank_length4 = length; 143 tonebank_length4 = length;
139 break; 144 break;
140 case 5: 145 case 5:
141 tonebank5 = buf; 146 tonebank5 = buf;
142 tonebank_length5 = length; 147 tonebank_length5 = length;
143 break; 148 break;
144 case 6: 149 case 6:
145 tonebank6 = buf; 150 tonebank6 = buf;
146 tonebank_length6 = length; 151 tonebank_length6 = length;
147 break; 152 break;
148 153
149 } 154 }
150} 155}
151 156
152 157
153void gs::Finger(int f, int position){ 158void gs::Finger(int f, int position){
154 if (f < 0 || f > 5){ 159 if (f < 0 || f > 5){
155 fprintf(stderr, "Error - finger2 value was %d\n", f); 160 fprintf(stderr, "Error - finger2 value was %d\n", f);
156 return; 161 return;
157 } 162 }
158 163
159 finger[f] = position; 164 finger[f] = position;
160} 165}
diff --git a/noncore/multimedia/powerchord/gs.h b/noncore/multimedia/powerchord/gs.h
index 3e4c04d..f2b309f 100644
--- a/noncore/multimedia/powerchord/gs.h
+++ b/noncore/multimedia/powerchord/gs.h
@@ -1,75 +1,74 @@
1 1
2#ifndef __GS_H 2#ifndef __GS_H
3#define __GS_H 3#define __GS_H
4 4
5#include <qobject.h> 5#include <qobject.h>
6// sound includes 6// sound includes
7#include <sys/soundcard.h> 7#include <sys/soundcard.h>
8 8
9#define BUFSIZE 256 9#define BUFSIZE 256
10#define NUMCHANS 7 10#define NUMCHANS 7
11#define ACGUITAR_PATH_S "/usr/local/projects/opie-head/noncore/multimedia/powerchord/acguitar.raw"
12 11
13class gs : public QObject { 12class gs : public QObject {
14 13
15 Q_OBJECT 14 Q_OBJECT
16 15
17 public: 16 public:
18 gs(); 17 gs();
19 ~gs(); 18 ~gs();
20 19
21 private: 20 private:
22 21
23 int initial_fret; 22 int initial_fret;
24 int finger[6]; 23 int finger[6];
25 int tuning[6]; 24 int tuning[6];
26 25
27 signed short *reverb; 26 signed short *reverb;
28 int reverb_ptr; 27 int reverb_ptr;
29 int reverb_max; 28 int reverb_max;
30 29
31 int audio_fd; 30 int audio_fd;
32 signed short audio_buf[BUFSIZE]; 31 signed short audio_buf[BUFSIZE];
33 static int note_periods[12]; 32 static int note_periods[12];
34 static int octave_step[6]; 33 static int octave_step[6];
35 int frames; 34 int frames;
36 35
37 36
38 // 7 channel synth 37 // 7 channel synth
39 signed short *tonebank0; // source of waveform 38 signed short *tonebank0; // source of waveform
40 signed short *tonebank1; 39 signed short *tonebank1;
41 signed short *tonebank2; 40 signed short *tonebank2;
42 signed short *tonebank3; 41 signed short *tonebank3;
43 signed short *tonebank4; 42 signed short *tonebank4;
44 signed short *tonebank5; 43 signed short *tonebank5;
45 signed short *tonebank6; 44 signed short *tonebank6;
46 int tonebank_length0; 45 int tonebank_length0;
47 int tonebank_length1; 46 int tonebank_length1;
48 int tonebank_length2; 47 int tonebank_length2;
49 int tonebank_length3; 48 int tonebank_length3;
50 int tonebank_length4; 49 int tonebank_length4;
51 int tonebank_length5; 50 int tonebank_length5;
52 int tonebank_length6; 51 int tonebank_length6;
53 int pb_rate0; // playback rate or 0 52 int pb_rate0; // playback rate or 0
54 int pb_rate1; 53 int pb_rate1;
55 int pb_rate2; 54 int pb_rate2;
56 int pb_rate3; 55 int pb_rate3;
57 int pb_rate4; 56 int pb_rate4;
58 int pb_rate5; 57 int pb_rate5;
59 int pb_rate6; 58 int pb_rate6;
60 int pb_ratio0; // accumulator for ratio 59 int pb_ratio0; // accumulator for ratio
61 int pb_ratio1; 60 int pb_ratio1;
62 int pb_ratio2; 61 int pb_ratio2;
63 int pb_ratio3; 62 int pb_ratio3;
64 int pb_ratio4; 63 int pb_ratio4;
65 int pb_ratio5; 64 int pb_ratio5;
66 int pb_ratio6; 65 int pb_ratio6;
67 int pb_rsc0; // pointer to current position 66 int pb_rsc0; // pointer to current position
68 int pb_rsc1; 67 int pb_rsc1;
69 int pb_rsc2; 68 int pb_rsc2;
70 int pb_rsc3; 69 int pb_rsc3;
71 int pb_rsc4; 70 int pb_rsc4;
72 int pb_rsc5; 71 int pb_rsc5;
73 int pb_rsc6; 72 int pb_rsc6;
74 int pb_oct0; // octave 73 int pb_oct0; // octave
75 int pb_oct1; 74 int pb_oct1;
diff --git a/noncore/multimedia/powerchord/opie-powerchord.control b/noncore/multimedia/powerchord/opie-powerchord.control
index 7f45999..d295031 100644
--- a/noncore/multimedia/powerchord/opie-powerchord.control
+++ b/noncore/multimedia/powerchord/opie-powerchord.control
@@ -1,10 +1,10 @@
1Files: bin/powerchord apps/Applications/powerchord.desktop pics/powerchord sounds/powerchord 1Files: bin/powerchord apps/Applications/powerchord.desktop pics/powerchord share/powerchord
2Priority: optional 2Priority: optional
3Section: qpe/applications 3Section: Applications
4Maintainer: Camilo Mesias <camilo@mesias.co.uk> 4Maintainer: Camilo Mesias <camilo@mesias.co.uk>
5Architecture: arm 5Architecture: arm
6Version: 0.0.7 6Version: 0.0.8
7Depends: qpe-base ($QPE_VERSION) 7Depends: task-opie-minimal
8Description: Guitar Chord generator application 8Description: Guitar Chord generator application
9Allows naming of chords using base note and key. Fretboard diagrams are 9Allows naming of chords using base note and key. Fretboard diagrams are
10produced illustrating ways to play the chord. 10produced illustrating ways to play the chord.
diff --git a/share/powerchord/acguitar.raw b/share/powerchord/acguitar.raw
new file mode 100644
index 0000000..1452147
--- a/dev/null
+++ b/share/powerchord/acguitar.raw
Binary files differ