author | llornkcor <llornkcor> | 2005-03-12 02:23:02 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2005-03-12 02:23:02 (UTC) |
commit | aa7039012cc79c02304e36db16e6f5ff82e19867 (patch) (unidiff) | |
tree | 7e987a42504cfa7fc030bdef813147d61604849d | |
parent | 9815fc1551763226f974f8ea8eab6d0b031e0be3 (diff) | |
download | opie-aa7039012cc79c02304e36db16e6f5ff82e19867.zip opie-aa7039012cc79c02304e36db16e6f5ff82e19867.tar.gz opie-aa7039012cc79c02304e36db16e6f5ff82e19867.tar.bz2 |
remove ouput
-rw-r--r-- | noncore/multimedia/opierec/qtrec.cpp | 35 | ||||
-rw-r--r-- | noncore/multimedia/opierec/qtrec.h | 13 | ||||
-rw-r--r-- | noncore/multimedia/opierec/wavFile.cpp | 36 |
3 files changed, 40 insertions, 44 deletions
diff --git a/noncore/multimedia/opierec/qtrec.cpp b/noncore/multimedia/opierec/qtrec.cpp index 9b761aa..9d3d5cf 100644 --- a/noncore/multimedia/opierec/qtrec.cpp +++ b/noncore/multimedia/opierec/qtrec.cpp | |||
@@ -1,2066 +1,2053 @@ | |||
1 | /**************************************************************************** | 1 | /**************************************************************************** |
2 | // qtrec.cpp | 2 | // qtrec.cpp |
3 | Created: Thu Jan 17 11:19:58 2002 | 3 | Created: Thu Jan 17 11:19:58 2002 |
4 | copyright 2002 by L.J. Potter <ljp@llornkcor.com> | 4 | copyright 2002 by L.J. Potter <ljp@llornkcor.com> |
5 | ****************************************************************************/ | 5 | ****************************************************************************/ |
6 | //#define DEV_VERSION | 6 | //#define DEV_VERSION |
7 | 7 | ||
8 | #include "pixmaps.h" | 8 | #include "pixmaps.h" |
9 | #include "qtrec.h" | 9 | #include "qtrec.h" |
10 | #include "waveform.h" | 10 | #include "waveform.h" |
11 | extern "C" { | 11 | extern "C" { |
12 | #include "adpcm.h" | 12 | #include "adpcm.h" |
13 | } | 13 | } |
14 | 14 | ||
15 | /* OPIE */ | 15 | /* OPIE */ |
16 | #include <opie2/odebug.h> | 16 | #include <opie2/odebug.h> |
17 | #include <qpe/config.h> | 17 | #include <qpe/config.h> |
18 | #include <qpe/qcopenvelope_qws.h> | 18 | #include <qpe/qcopenvelope_qws.h> |
19 | #include <qpe/qpeapplication.h> | 19 | #include <qpe/qpeapplication.h> |
20 | #include <qpe/resource.h> | 20 | #include <qpe/resource.h> |
21 | #include <qpe/storage.h> | 21 | #include <qpe/storage.h> |
22 | using namespace Opie::Core; | 22 | using namespace Opie::Core; |
23 | 23 | ||
24 | /* QT */ | 24 | /* QT */ |
25 | #include <qcheckbox.h> | 25 | #include <qcheckbox.h> |
26 | #include <qcombobox.h> | 26 | #include <qcombobox.h> |
27 | #include <qdir.h> | 27 | #include <qdir.h> |
28 | #include <qgroupbox.h> | 28 | #include <qgroupbox.h> |
29 | #include <qlabel.h> | 29 | #include <qlabel.h> |
30 | #include <qlayout.h> | 30 | #include <qlayout.h> |
31 | #include <qlistview.h> | 31 | #include <qlistview.h> |
32 | #include <qmessagebox.h> | 32 | #include <qmessagebox.h> |
33 | #include <qpopupmenu.h> | 33 | #include <qpopupmenu.h> |
34 | #include <qpushbutton.h> | 34 | #include <qpushbutton.h> |
35 | #include <qslider.h> | 35 | #include <qslider.h> |
36 | #include <qtabwidget.h> | 36 | #include <qtabwidget.h> |
37 | #include <qtimer.h> | 37 | #include <qtimer.h> |
38 | 38 | ||
39 | /* STD */ | 39 | /* STD */ |
40 | #include <errno.h> | 40 | #include <errno.h> |
41 | #include <fcntl.h> | 41 | #include <fcntl.h> |
42 | #include <math.h> | 42 | #include <math.h> |
43 | #include <mntent.h> | 43 | #include <mntent.h> |
44 | #include <stdio.h> | 44 | #include <stdio.h> |
45 | #include <stdlib.h> | 45 | #include <stdlib.h> |
46 | #include <sys/ioctl.h> | 46 | #include <sys/ioctl.h> |
47 | #include <sys/soundcard.h> | 47 | #include <sys/soundcard.h> |
48 | #include <sys/stat.h> | 48 | #include <sys/stat.h> |
49 | #include <sys/time.h> | 49 | #include <sys/time.h> |
50 | #include <sys/types.h> | 50 | #include <sys/types.h> |
51 | #include <sys/vfs.h> | 51 | #include <sys/vfs.h> |
52 | #include <unistd.h> | 52 | #include <unistd.h> |
53 | #include <sys/wait.h> | 53 | #include <sys/wait.h> |
54 | #include <sys/signal.h> | 54 | #include <sys/signal.h> |
55 | #include <pthread.h> | 55 | #include <pthread.h> |
56 | 56 | ||
57 | #ifdef PDAUDIO //ALSA | 57 | #ifdef PDAUDIO //ALSA |
58 | #include <alsa/asoundlib.h> | 58 | #include <alsa/asoundlib.h> |
59 | static int deviceSampleRates[8] = { 32000, 44100, 48000, 88200, 96000, 176400, 192000, -1 }; | 59 | static int deviceSampleRates[8] = { 32000, 44100, 48000, 88200, 96000, 176400, 192000, -1 }; |
60 | static int deviceBitRates[] = { 8, 16, 24, 32, -1 }; | 60 | static int deviceBitRates[] = { 8, 16, 24, 32, -1 }; |
61 | #else //OSS | 61 | #else //OSS |
62 | static int deviceSampleRates[6] = { 11025, 16000, 22050, 32000, 44100, -1 }; | 62 | static int deviceSampleRates[6] = { 11025, 16000, 22050, 32000, 44100, -1 }; |
63 | static int deviceBitRates[] = { 8, 16, -1 }; | 63 | static int deviceBitRates[] = { 8, 16, -1 }; |
64 | #endif | 64 | #endif |
65 | 65 | ||
66 | 66 | ||
67 | //#define ZAURUS 0 | 67 | //#define ZAURUS 0 |
68 | struct adpcm_state encoder_state; | 68 | struct adpcm_state encoder_state; |
69 | struct adpcm_state decoder_state; | 69 | struct adpcm_state decoder_state; |
70 | 70 | ||
71 | typedef struct { | 71 | typedef struct { |
72 | int sampleRate; | 72 | int sampleRate; |
73 | /* int fragSize; */ | 73 | /* int fragSize; */ |
74 | /* int blockSize; */ | 74 | /* int blockSize; */ |
75 | int resolution; //bitrate | 75 | int resolution; //bitrate |
76 | int channels; //number of channels | 76 | int channels; //number of channels |
77 | int fd; //file descriptor | 77 | int fd; //file descriptor |
78 | int sd; //sound device descriptor | 78 | int sd; //sound device descriptor |
79 | int numberSamples; //total number of samples | 79 | int numberSamples; //total number of samples |
80 | int SecondsToRecord; // number of seconds that should be recorded | 80 | int SecondsToRecord; // number of seconds that should be recorded |
81 | float numberOfRecordedSeconds; //total number of samples recorded | 81 | float numberOfRecordedSeconds; //total number of samples recorded |
82 | int samplesToRecord; //number of samples to be recorded | 82 | int samplesToRecord; //number of samples to be recorded |
83 | int inVol; //input volume | 83 | int inVol; //input volume |
84 | int outVol; //output volume | 84 | int outVol; //output volume |
85 | int format; //wavfile format PCM.. ADPCM | 85 | int format; //wavfile format PCM.. ADPCM |
86 | const char *fileName; //name of fiel to be played/recorded | 86 | const char *fileName; //name of fiel to be played/recorded |
87 | } fileParameters; | 87 | } fileParameters; |
88 | 88 | ||
89 | fileParameters filePara; | 89 | fileParameters filePara; |
90 | 90 | ||
91 | bool monitoring, recording, playing; | 91 | bool monitoring, recording, playing; |
92 | bool stopped; | 92 | bool stopped; |
93 | QLabel *timeLabel; | 93 | QLabel *timeLabel; |
94 | QSlider *timeSlider; | 94 | QSlider *timeSlider; |
95 | int sd; | 95 | int sd; |
96 | 96 | ||
97 | Waveform* waveform; | 97 | Waveform* waveform; |
98 | Device *soundDevice; | 98 | Device *soundDevice; |
99 | 99 | ||
100 | 100 | ||
101 | #ifdef THREADED | 101 | #ifdef THREADED |
102 | void quickRec() | 102 | void quickRec() |
103 | #else | 103 | #else |
104 | void QtRec::quickRec() | 104 | void QtRec::quickRec() |
105 | #endif | 105 | #endif |
106 | { | 106 | { |
107 | 107 | ||
108 | odebug << ( filePara.numberSamples/filePara.sampleRate * filePara.channels ) << oendl; | 108 | odebug << ( filePara.numberSamples/filePara.sampleRate * filePara.channels ) << oendl; |
109 | odebug << "samples " << filePara.numberSamples << ", rate " << filePara.sampleRate | 109 | odebug << "samples " << filePara.numberSamples << ", rate " << filePara.sampleRate |
110 | << ", channels " << filePara.channels << oendl; | 110 | << ", channels " << filePara.channels << oendl; |
111 | 111 | ||
112 | int total = 0; // Total number of bytes read in so far. | 112 | int total = 0; // Total number of bytes read in so far. |
113 | int bytesWritten, number; | 113 | int bytesWritten, number; |
114 | 114 | ||
115 | bytesWritten = 0; | 115 | bytesWritten = 0; |
116 | number = 0; | 116 | number = 0; |
117 | QString num; | 117 | QString num; |
118 | int level = 0; | 118 | int level = 0; |
119 | int threshold = 0; | 119 | int threshold = 0; |
120 | int bits = filePara.resolution; | 120 | int bits = filePara.resolution; |
121 | odebug << "bits " << bits << "" << oendl; | 121 | odebug << "bits " << bits << "" << oendl; |
122 | 122 | ||
123 | if( filePara.resolution == 16 ) { //AFMT_S16_LE) | 123 | if( filePara.resolution == 16 ) { //AFMT_S16_LE) |
124 | odebug << "AFMT_S16_LE size " << filePara.SecondsToRecord << "" << oendl; | 124 | odebug << "AFMT_S16_LE size " << filePara.SecondsToRecord << "" << oendl; |
125 | odebug << "samples to record " << filePara.samplesToRecord << "" << oendl; | 125 | odebug << "samples to record " << filePara.samplesToRecord << "" << oendl; |
126 | odebug << "" << filePara.sd << "" << oendl; | 126 | odebug << "" << filePara.sd << "" << oendl; |
127 | level = 7; | 127 | level = 7; |
128 | threshold = 0; | 128 | threshold = 0; |
129 | 129 | ||
130 | if( filePara.format == WAVE_FORMAT_DVI_ADPCM) { | 130 | if( filePara.format == WAVE_FORMAT_DVI_ADPCM) { |
131 | odebug << "start recording WAVE_FORMAT_DVI_ADPCM" << oendl; | 131 | odebug << "start recording WAVE_FORMAT_DVI_ADPCM" << oendl; |
132 | // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_DVI_ADPCM >>>>>>>>>>>>>>>>>>>>>> | 132 | // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_DVI_ADPCM >>>>>>>>>>>>>>>>>>>>>> |
133 | char abuf[ BUFSIZE/2 ]; | 133 | char abuf[ BUFSIZE/2 ]; |
134 | short sbuf[ BUFSIZE ]; | 134 | short sbuf[ BUFSIZE ]; |
135 | short sbuf2[ BUFSIZE ]; | 135 | short sbuf2[ BUFSIZE ]; |
136 | memset( abuf, 0, BUFSIZE/2); | 136 | memset( abuf, 0, BUFSIZE/2); |
137 | memset( sbuf, 0, BUFSIZE); | 137 | memset( sbuf, 0, BUFSIZE); |
138 | memset( sbuf2, 0, BUFSIZE); | 138 | memset( sbuf2, 0, BUFSIZE); |
139 | 139 | ||
140 | for(;;) { | 140 | for(;;) { |
141 | if ( stopped) { | 141 | if ( stopped) { |
142 | odebug << "quickRec:: stopped" << oendl; | 142 | odebug << "quickRec:: stopped" << oendl; |
143 | break; | 143 | break; |
144 | } | 144 | } |
145 | 145 | ||
146 | // number=::read( filePara.sd, sbuf, BUFSIZE); | 146 | // number=::read( filePara.sd, sbuf, BUFSIZE); |
147 | number = soundDevice->devRead( filePara.sd, sbuf, BUFSIZE); | 147 | number = soundDevice->devRead( filePara.sd, sbuf, BUFSIZE); |
148 | 148 | ||
149 | if(number <= 0) { | 149 | if(number <= 0) { |
150 | perror("recording error "); | 150 | perror("recording error "); |
151 | odebug << "" << filePara.fileName << " " << number << "" << oendl; | 151 | odebug << "" << filePara.fileName << " " << number << "" << oendl; |
152 | stopped = true; | 152 | stopped = true; |
153 | return; | 153 | return; |
154 | } | 154 | } |
155 | //if(stereo == 2) { | 155 | //if(stereo == 2) { |
156 | // adpcm_coder( sbuf2, abuf, number/2, &encoder_state); | 156 | // adpcm_coder( sbuf2, abuf, number/2, &encoder_state); |
157 | adpcm_coder( sbuf, abuf, number/2, &encoder_state); | 157 | adpcm_coder( sbuf, abuf, number/2, &encoder_state); |
158 | 158 | ||
159 | bytesWritten = ::write( filePara.fd , abuf, number/4); | 159 | bytesWritten = ::write( filePara.fd , abuf, number/4); |
160 | 160 | ||
161 | waveform->newSamples( sbuf, number ); | 161 | waveform->newSamples( sbuf, number ); |
162 | 162 | ||
163 | total += bytesWritten; | 163 | total += bytesWritten; |
164 | filePara.numberSamples = total; | 164 | filePara.numberSamples = total; |
165 | timeSlider->setValue( total); | 165 | timeSlider->setValue( total); |
166 | 166 | ||
167 | printf("%d, bytes %d,total %d\r", number, bytesWritten, total); | 167 | printf("%d, bytes %d,total %d\r", number, bytesWritten, total); |
168 | fflush(stdout); | 168 | fflush(stdout); |
169 | 169 | ||
170 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate * (float)2;/// filePara.channels; | 170 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate * (float)2;/// filePara.channels; |
171 | 171 | ||
172 | qApp->processEvents(); | 172 | qApp->processEvents(); |
173 | if( total >= filePara.samplesToRecord) { | 173 | if( total >= filePara.samplesToRecord) { |
174 | stopped = true; | 174 | stopped = true; |
175 | break; | 175 | break; |
176 | } | 176 | } |
177 | } | 177 | } |
178 | } else { | 178 | } else { |
179 | // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_PCM >>>>>>>>>>>>>>>>>>>>>> | 179 | // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_PCM >>>>>>>>>>>>>>>>>>>>>> |
180 | odebug << "start recording WAVE_FORMAT_PCM" << oendl; | 180 | odebug << "start recording WAVE_FORMAT_PCM" << oendl; |
181 | short inbuffer[ BUFSIZE ], outbuffer[ BUFSIZE ]; | 181 | short inbuffer[ BUFSIZE ], outbuffer[ BUFSIZE ]; |
182 | memset( inbuffer, 0, BUFSIZE); | 182 | memset( inbuffer, 0, BUFSIZE); |
183 | memset( outbuffer, 0, BUFSIZE); | 183 | memset( outbuffer, 0, BUFSIZE); |
184 | 184 | ||
185 | for(;;) { | 185 | for(;;) { |
186 | if ( stopped) { | 186 | if ( stopped) { |
187 | odebug << "quickRec:: stopped" << oendl; | 187 | odebug << "quickRec:: stopped" << oendl; |
188 | stopped = true; | 188 | stopped = true; |
189 | break; // stop if playing was set to false | 189 | break; // stop if playing was set to false |
190 | return; | 190 | return; |
191 | } | 191 | } |
192 | 192 | ||
193 | number = soundDevice->devRead( soundDevice->sd /*filePara.sd*/, (short *)inbuffer, BUFSIZE); | 193 | number = soundDevice->devRead( soundDevice->sd /*filePara.sd*/, (short *)inbuffer, BUFSIZE); |
194 | 194 | ||
195 | if( number <= 0) { | 195 | if( number <= 0) { |
196 | perror( "recording error "); | 196 | perror( "recording error "); |
197 | odebug << filePara.fileName << oendl; | 197 | odebug << filePara.fileName << oendl; |
198 | stopped = true; | 198 | stopped = true; |
199 | return; | 199 | return; |
200 | } | 200 | } |
201 | 201 | ||
202 | bytesWritten = ::write( filePara.fd , inbuffer, number); | 202 | bytesWritten = ::write( filePara.fd , inbuffer, number); |
203 | waveform->newSamples( inbuffer, number ); | 203 | waveform->newSamples( inbuffer, number ); |
204 | 204 | ||
205 | if( bytesWritten < 0) { | 205 | if( bytesWritten < 0) { |
206 | perror("File writing error "); | 206 | perror("File writing error "); |
207 | stopped = true; | 207 | stopped = true; |
208 | return; | 208 | return; |
209 | } | 209 | } |
210 | 210 | ||
211 | total += bytesWritten; | 211 | total += bytesWritten; |
212 | 212 | ||
213 | filePara.numberSamples = total; | 213 | filePara.numberSamples = total; |
214 | 214 | ||
215 | if( filePara.SecondsToRecord != 0) | 215 | if( filePara.SecondsToRecord != 0) |
216 | timeSlider->setValue( total); | 216 | timeSlider->setValue( total); |
217 | printf("%d, bytes %d,total %d\r",number, bytesWritten , total); | 217 | printf("%d, bytes %d,total %d\r",number, bytesWritten , total); |
218 | fflush(stdout); | 218 | fflush(stdout); |
219 | 219 | ||
220 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate | 220 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate |
221 | / (float)2/filePara.channels; | 221 | / (float)2/filePara.channels; |
222 | qApp->processEvents(); | 222 | qApp->processEvents(); |
223 | 223 | ||
224 | if( total >= filePara.samplesToRecord) { | 224 | if( total >= filePara.samplesToRecord) { |
225 | stopped = true; | 225 | stopped = true; |
226 | break; | 226 | break; |
227 | } | 227 | } |
228 | } | 228 | } |
229 | } //end main loop | 229 | } //end main loop |
230 | 230 | ||
231 | } else { | 231 | } else { |
232 | // <<<<<<<<<<<<<<<<<<<<<<< format = AFMT_U8; | 232 | // <<<<<<<<<<<<<<<<<<<<<<< format = AFMT_U8; |
233 | unsigned char unsigned_inbuffer[ BUFSIZE ], unsigned_outbuffer[ BUFSIZE ]; | 233 | unsigned char unsigned_inbuffer[ BUFSIZE ], unsigned_outbuffer[ BUFSIZE ]; |
234 | memset( unsigned_inbuffer, 0, BUFSIZE); | 234 | memset( unsigned_inbuffer, 0, BUFSIZE); |
235 | memset( unsigned_outbuffer, 0, BUFSIZE); | 235 | memset( unsigned_outbuffer, 0, BUFSIZE); |
236 | 236 | ||
237 | for(;;) { | 237 | for(;;) { |
238 | if ( stopped) { | 238 | if ( stopped) { |
239 | odebug << "quickRec:: stopped" << oendl; | 239 | odebug << "quickRec:: stopped" << oendl; |
240 | break; // stop if playing was set to false | 240 | break; // stop if playing was set to false |
241 | } | 241 | } |
242 | 242 | ||
243 | number = ::read( soundDevice->sd /*filePara.sd*/ , unsigned_inbuffer, BUFSIZE); | 243 | number = ::read( soundDevice->sd /*filePara.sd*/ , unsigned_inbuffer, BUFSIZE); |
244 | bytesWritten = ::write( filePara.fd , unsigned_inbuffer, number); | 244 | bytesWritten = ::write( filePara.fd , unsigned_inbuffer, number); |
245 | waveform->newSamples( (const short *) unsigned_inbuffer, number ); | 245 | waveform->newSamples( (const short *) unsigned_inbuffer, number ); |
246 | 246 | ||
247 | if(bytesWritten < 0) { | 247 | if(bytesWritten < 0) { |
248 | stopped = true; | 248 | stopped = true; |
249 | QMessageBox::message("Note","<p>There was a problem writing to the file</p>"); | 249 | QMessageBox::message("Note","<p>There was a problem writing to the file</p>"); |
250 | perror("File writing error "); | 250 | perror("File writing error "); |
251 | return; | 251 | return; |
252 | } | 252 | } |
253 | 253 | ||
254 | total += bytesWritten; | 254 | total += bytesWritten; |
255 | filePara.numberSamples = total; | 255 | filePara.numberSamples = total; |
256 | // printf("%d, bytes %d,total %d \r",number, bytesWritten , total); | 256 | // printf("%d, bytes %d,total %d \r",number, bytesWritten , total); |
257 | // fflush(stdout); | 257 | // fflush(stdout); |
258 | if( filePara.SecondsToRecord !=0) | 258 | if( filePara.SecondsToRecord !=0) |
259 | timeSlider->setValue( total); | 259 | timeSlider->setValue( total); |
260 | 260 | ||
261 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate; | 261 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate; |
262 | 262 | ||
263 | qApp->processEvents(); | 263 | qApp->processEvents(); |
264 | if( total >= filePara.samplesToRecord) { | 264 | if( total >= filePara.samplesToRecord) { |
265 | stopped = true; | 265 | stopped = true; |
266 | break; | 266 | break; |
267 | } | 267 | } |
268 | } //end main loop | 268 | } //end main loop |
269 | } | 269 | } |
270 | printf("\n"); | 270 | printf("\n"); |
271 | } /// END quickRec() | 271 | } /// END quickRec() |
272 | 272 | ||
273 | 273 | ||
274 | #ifdef THREADED | 274 | #ifdef THREADED |
275 | void playIt() | 275 | void playIt() |
276 | #else | 276 | #else |
277 | void QtRec::playIt() | 277 | void QtRec::playIt() |
278 | #endif | 278 | #endif |
279 | { | 279 | { |
280 | int bytesWritten = 0; | 280 | int bytesWritten = 0; |
281 | int number = 0; | 281 | int number = 0; |
282 | int total = 0; // Total number of bytes read in so far. | 282 | int total = 0; // Total number of bytes read in so far. |
283 | if( filePara.resolution == 16 ) { //AFMT_S16_LE) { | 283 | if( filePara.resolution == 16 ) { //AFMT_S16_LE) { |
284 | if( filePara.format == WAVE_FORMAT_DVI_ADPCM) { | 284 | if( filePara.format == WAVE_FORMAT_DVI_ADPCM) { |
285 | char abuf[ BUFSIZE / 2 ]; | 285 | char abuf[ BUFSIZE / 2 ]; |
286 | short sbuf[ BUFSIZE ]; | 286 | short sbuf[ BUFSIZE ]; |
287 | short sbuf2[ BUFSIZE * 2 ]; | 287 | short sbuf2[ BUFSIZE * 2 ]; |
288 | memset( abuf, 0, BUFSIZE / 2); | 288 | memset( abuf, 0, BUFSIZE / 2); |
289 | memset( sbuf, 0, BUFSIZE); | 289 | memset( sbuf, 0, BUFSIZE); |
290 | memset( sbuf2, 0, BUFSIZE * 2); | 290 | memset( sbuf2, 0, BUFSIZE * 2); |
291 | // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_DVI_ADPCM >>>>>>>>>>>>>>>>>>>>>> | 291 | // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_DVI_ADPCM >>>>>>>>>>>>>>>>>>>>>> |
292 | for(;;) { // play loop | 292 | for(;;) { // play loop |
293 | if ( stopped) { | 293 | if ( stopped) { |
294 | break; | 294 | break; |
295 | return; | 295 | return; |
296 | }// stop if playing was set to false | 296 | }// stop if playing was set to false |
297 | 297 | ||
298 | number = ::read( filePara.fd, abuf, BUFSIZE / 2); | 298 | number = ::read( filePara.fd, abuf, BUFSIZE / 2); |
299 | adpcm_decoder( abuf, sbuf, number * 2, &decoder_state); | 299 | adpcm_decoder( abuf, sbuf, number * 2, &decoder_state); |
300 | 300 | ||
301 | // for (int i=0;i< number * 2; 2 * i++) { //2*i is left channel | 301 | // for (int i=0;i< number * 2; 2 * i++) { //2*i is left channel |
302 | // sbuf2[i+1]=sbuf2[i]=sbuf[i]; | 302 | // sbuf2[i+1]=sbuf2[i]=sbuf[i]; |
303 | // } | 303 | // } |
304 | bytesWritten = write ( soundDevice->sd , sbuf, number * 4); | 304 | bytesWritten = write ( soundDevice->sd , sbuf, number * 4); |
305 | 305 | ||
306 | waveform->newSamples( sbuf, number ); | 306 | waveform->newSamples( sbuf, number ); |
307 | 307 | ||
308 | // if(filePara.channels==1) | 308 | // if(filePara.channels==1) |
309 | // total += bytesWritten/2; //mono | 309 | // total += bytesWritten/2; //mono |
310 | // else | 310 | // else |
311 | total += bytesWritten; | 311 | total += bytesWritten; |
312 | filePara.numberSamples = total/4; | 312 | filePara.numberSamples = total/4; |
313 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate / 2; | 313 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate / 2; |
314 | 314 | ||
315 | timeSlider->setValue( total/4); | 315 | timeSlider->setValue( total/4); |
316 | // timeString.sprintf("%.2f", filePara.numberOfRecordedSeconds); | 316 | // timeString.sprintf("%.2f", filePara.numberOfRecordedSeconds); |
317 | // if(filePara.numberOfRecordedSeconds>1) | 317 | // if(filePara.numberOfRecordedSeconds>1) |
318 | // timeLabel->setText( timeString+ tr(" seconds")); | 318 | // timeLabel->setText( timeString+ tr(" seconds")); |
319 | // printf("playing number %d, bytes %d, total %d\n",number, bytesWritten, total/4); | 319 | // printf("playing number %d, bytes %d, total %d\n",number, bytesWritten, total/4); |
320 | // fflush(stdout); | 320 | // fflush(stdout); |
321 | 321 | ||
322 | qApp->processEvents(); | 322 | qApp->processEvents(); |
323 | 323 | ||
324 | if( /*total >= filePara.numberSamples || */ bytesWritten == 0) { | 324 | if( /*total >= filePara.numberSamples || */ bytesWritten == 0) { |
325 | // if( total >= filePara.numberSamples ){//|| secCount > filePara.numberOfRecordedSeconds ) { | 325 | // if( total >= filePara.numberSamples ){//|| secCount > filePara.numberOfRecordedSeconds ) { |
326 | stopped = true; | 326 | stopped = true; |
327 | break; | 327 | break; |
328 | } | 328 | } |
329 | } | 329 | } |
330 | } else { | 330 | } else { |
331 | // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_PCM >>>>>>>>>>>>>>>>>>>>>> | 331 | // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_PCM >>>>>>>>>>>>>>>>>>>>>> |
332 | short inbuffer[ BUFSIZE ], outbuffer[ BUFSIZE ]; | 332 | short inbuffer[ BUFSIZE ], outbuffer[ BUFSIZE ]; |
333 | memset( inbuffer, 0, BUFSIZE); | 333 | memset( inbuffer, 0, BUFSIZE); |
334 | memset( outbuffer, 0, BUFSIZE); | 334 | memset( outbuffer, 0, BUFSIZE); |
335 | 335 | ||
336 | for(;;) { // play loop | 336 | for(;;) { // play loop |
337 | if ( stopped) { | 337 | if ( stopped) { |
338 | break; | 338 | break; |
339 | return; | 339 | return; |
340 | } | 340 | } |
341 | // stop if playing was set to false | 341 | // stop if playing was set to false |
342 | number = ::read( filePara.fd, inbuffer, BUFSIZE); | 342 | number = ::read( filePara.fd, inbuffer, BUFSIZE); |
343 | // for (int i=0;i< number * 2; 2 * i++) { //2*i is left channel | 343 | // for (int i=0;i< number * 2; 2 * i++) { //2*i is left channel |
344 | // // for (int i=0;i< number ; i++) { //2*i is left channel | 344 | // // for (int i=0;i< number ; i++) { //2*i is left channel |
345 | // outbuffer[i+1]= outbuffer[i]=inbuffer[i]; | 345 | // outbuffer[i+1]= outbuffer[i]=inbuffer[i]; |
346 | // } | 346 | // } |
347 | bytesWritten = ::write( soundDevice->sd, inbuffer, number); | 347 | bytesWritten = ::write( soundDevice->sd, inbuffer, number); |
348 | waveform->newSamples( inbuffer, number); | 348 | waveform->newSamples( inbuffer, number); |
349 | //-------------->>>> out to device | 349 | //-------------->>>> out to device |
350 | // total+=bytesWritten; | 350 | // total+=bytesWritten; |
351 | // if(filePara.channels==1) | 351 | // if(filePara.channels==1) |
352 | // total += bytesWritten/2; //mono | 352 | // total += bytesWritten/2; //mono |
353 | // else | 353 | // else |
354 | total += bytesWritten; | 354 | total += bytesWritten; |
355 | timeSlider->setValue( total); | 355 | timeSlider->setValue( total); |
356 | 356 | ||
357 | filePara.numberSamples = total; | 357 | filePara.numberSamples = total; |
358 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate / (float)2; | 358 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate / (float)2; |
359 | 359 | ||
360 | // timeString.sprintf("%.2f",filePara.numberOfRecordedSeconds); | 360 | // timeString.sprintf("%.2f",filePara.numberOfRecordedSeconds); |
361 | // timeLabel->setText( timeString + tr(" seconds")); | 361 | // timeLabel->setText( timeString + tr(" seconds")); |
362 | 362 | ||
363 | qApp->processEvents(); | 363 | qApp->processEvents(); |
364 | 364 | ||
365 | if( /*total >= filePara.numberSamples || */ bytesWritten == 0) { | 365 | if( /*total >= filePara.numberSamples || */ bytesWritten == 0) { |
366 | owarn << "Jane! Stop this crazy thing!" << oendl; | 366 | owarn << "Jane! Stop this crazy thing!" << oendl; |
367 | stopped = true; | 367 | stopped = true; |
368 | // playing = false; | 368 | // playing = false; |
369 | break; | 369 | break; |
370 | } | 370 | } |
371 | } | 371 | } |
372 | // printf("\nplaying number %d, bytes %d, total %d\r",number, bytesWritten, total); | 372 | // printf("\nplaying number %d, bytes %d, total %d\r",number, bytesWritten, total); |
373 | // fflush(stdout); | 373 | // fflush(stdout); |
374 | } //end loop | 374 | } //end loop |
375 | } else { | 375 | } else { |
376 | /////////////////////////////// format = AFMT_U8; | 376 | /////////////////////////////// format = AFMT_U8; |
377 | unsigned char unsigned_inbuffer[ BUFSIZE ]; //, unsigned_outbuffer[BUFSIZE]; | 377 | unsigned char unsigned_inbuffer[ BUFSIZE ]; //, unsigned_outbuffer[BUFSIZE]; |
378 | memset( unsigned_inbuffer, 0, BUFSIZE); | 378 | memset( unsigned_inbuffer, 0, BUFSIZE); |
379 | for(;;) { | 379 | for(;;) { |
380 | // main loop | 380 | // main loop |
381 | if (stopped) { | 381 | if (stopped) { |
382 | break; // stop if playing was set to false | 382 | break; // stop if playing was set to false |
383 | return; | 383 | return; |
384 | } | 384 | } |
385 | number = ::read( filePara.fd, unsigned_inbuffer, BUFSIZE); | 385 | number = ::read( filePara.fd, unsigned_inbuffer, BUFSIZE); |
386 | //data = (val >> 8) ^ 0x80; | 386 | //data = (val >> 8) ^ 0x80; |
387 | // unsigned_outbuffer = (unsigned_inbuffer >> 8) ^ 0x80; | 387 | // unsigned_outbuffer = (unsigned_inbuffer >> 8) ^ 0x80; |
388 | bytesWritten = write ( filePara.sd, unsigned_inbuffer, number); | 388 | bytesWritten = write ( filePara.sd, unsigned_inbuffer, number); |
389 | waveform->newSamples( (const short *)unsigned_inbuffer, bytesWritten ); | 389 | waveform->newSamples( (const short *)unsigned_inbuffer, bytesWritten ); |
390 | total += bytesWritten; | 390 | total += bytesWritten; |
391 | 391 | ||
392 | timeSlider->setValue( total); | 392 | timeSlider->setValue( total); |
393 | filePara.numberSamples = total; | 393 | filePara.numberSamples = total; |
394 | 394 | ||
395 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate; | 395 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate; |
396 | // timeString.sprintf("%.2f",filePara.numberOfRecordedSeconds); | 396 | // timeString.sprintf("%.2f",filePara.numberOfRecordedSeconds); |
397 | // timeLabel->setText( timeString + tr(" seconds")); | 397 | // timeLabel->setText( timeString + tr(" seconds")); |
398 | qApp->processEvents(); | 398 | qApp->processEvents(); |
399 | 399 | ||
400 | if( /*total >= filePara.numberSamples || */ bytesWritten == 0) { | 400 | if( /*total >= filePara.numberSamples || */ bytesWritten == 0) { |
401 | // if( total >= filePara.numberSamples ) { | 401 | // if( total >= filePara.numberSamples ) { |
402 | stopped = true; | 402 | stopped = true; |
403 | break; | 403 | break; |
404 | } | 404 | } |
405 | // printf("Writing number %d, bytes %d, total %d, numberSamples %d\r",number, bytesWritten , total, filePara.numberSamples); | 405 | // printf("Writing number %d, bytes %d, total %d, numberSamples %d\r",number, bytesWritten , total, filePara.numberSamples); |
406 | // fflush(stdout); | 406 | // fflush(stdout); |
407 | } | 407 | } |
408 | } | 408 | } |
409 | } | 409 | } |
410 | 410 | ||
411 | 411 | ||
412 | QtRec::QtRec( QWidget* parent, const char* name, WFlags fl ) | 412 | QtRec::QtRec( QWidget* parent, const char* name, WFlags fl ) |
413 | : QWidget( parent, name, fl ) | 413 | : QWidget( parent, name, fl ) |
414 | { | 414 | { |
415 | if ( !name ) | 415 | if ( !name ) |
416 | setName( "OpieRec" ); | 416 | setName( "OpieRec" ); |
417 | init(); | 417 | init(); |
418 | initConfig(); | 418 | initConfig(); |
419 | initConnections(); | 419 | initConnections(); |
420 | renameBox = 0; | 420 | renameBox = 0; |
421 | 421 | ||
422 | // open sound device to get volumes | 422 | // open sound device to get volumes |
423 | Config hwcfg("OpieRec"); | 423 | Config hwcfg("OpieRec"); |
424 | hwcfg.setGroup("Hardware"); | 424 | hwcfg.setGroup("Hardware"); |
425 | 425 | ||
426 | 426 | ||
427 | soundDevice = new Device( this, false); //open play | 427 | soundDevice = new Device( this, false); //open play |
428 | 428 | ||
429 | getInVol(); | 429 | getInVol(); |
430 | getOutVol(); | 430 | getOutVol(); |
431 | 431 | ||
432 | soundDevice->closeDevice( true); | 432 | soundDevice->closeDevice( true); |
433 | soundDevice->sd = -1; | 433 | soundDevice->sd = -1; |
434 | soundDevice = 0; | 434 | soundDevice = 0; |
435 | wavFile = 0; | 435 | wavFile = 0; |
436 | // if( soundDevice) delete soundDevice; | 436 | // if( soundDevice) delete soundDevice; |
437 | QTimer::singleShot(100,this, SLOT(initIconView())); | 437 | QTimer::singleShot(100,this, SLOT(initIconView())); |
438 | 438 | ||
439 | if( autoMute) | 439 | if( autoMute) |
440 | doMute( true); | 440 | doMute( true); |
441 | // ListView1->setFocus(); | 441 | // ListView1->setFocus(); |
442 | playing = false; | 442 | playing = false; |
443 | } | 443 | } |
444 | 444 | ||
445 | QtRec::~QtRec() { | 445 | QtRec::~QtRec() { |
446 | // if( soundDevice) delete soundDevice; | 446 | // if( soundDevice) delete soundDevice; |
447 | 447 | ||
448 | } | 448 | } |
449 | 449 | ||
450 | void QtRec::cleanUp() { | 450 | void QtRec::cleanUp() { |
451 | 451 | ||
452 | if( !stopped) { | 452 | if( !stopped) { |
453 | stopped = true; | 453 | stopped = true; |
454 | endRecording(); | 454 | endRecording(); |
455 | } | 455 | } |
456 | 456 | ||
457 | ListView1->clear(); | 457 | ListView1->clear(); |
458 | 458 | ||
459 | if( autoMute) | 459 | if( autoMute) |
460 | doMute(false); | 460 | doMute(false); |
461 | 461 | ||
462 | // if( wavFile) delete wavFile; | 462 | // if( wavFile) delete wavFile; |
463 | // if(soundDevice) delete soundDevice; | 463 | // if(soundDevice) delete soundDevice; |
464 | } | 464 | } |
465 | 465 | ||
466 | void QtRec::init() { | 466 | void QtRec::init() { |
467 | 467 | ||
468 | needsStereoOut = false; | 468 | needsStereoOut = false; |
469 | QPixmap image3( ( const char** ) image3_data ); | 469 | QPixmap image3( ( const char** ) image3_data ); |
470 | QPixmap image4( ( const char** ) image4_data ); | 470 | QPixmap image4( ( const char** ) image4_data ); |
471 | QPixmap image6( ( const char** ) image6_data ); | 471 | QPixmap image6( ( const char** ) image6_data ); |
472 | 472 | ||
473 | stopped = true; | 473 | stopped = true; |
474 | setCaption( tr( "OpieRecord " )); | 474 | setCaption( tr( "OpieRecord " )); |
475 | QGridLayout *layout = new QGridLayout( this ); | 475 | QGridLayout *layout = new QGridLayout( this ); |
476 | layout->setSpacing( 2); | 476 | layout->setSpacing( 2); |
477 | layout->setMargin( 2); | 477 | layout->setMargin( 2); |
478 | 478 | ||
479 | TabWidget = new QTabWidget( this, "TabWidget" ); | 479 | TabWidget = new QTabWidget( this, "TabWidget" ); |
480 | layout->addMultiCellWidget(TabWidget, 0, 7, 0, 8); | 480 | layout->addMultiCellWidget(TabWidget, 0, 7, 0, 8); |
481 | // TabWidget->setTabShape(QTabWidget::Triangular); | 481 | // TabWidget->setTabShape(QTabWidget::Triangular); |
482 | 482 | ||
483 | ///**********<<<<<<<<<<<<>>>>>>>>>>>>*************** | 483 | ///**********<<<<<<<<<<<<>>>>>>>>>>>>*************** |
484 | tab = new QWidget( TabWidget, "tab" ); | 484 | tab = new QWidget( TabWidget, "tab" ); |
485 | 485 | ||
486 | QGridLayout *layout1 = new QGridLayout( tab); | 486 | QGridLayout *layout1 = new QGridLayout( tab); |
487 | layout1->setSpacing( 2); | 487 | layout1->setSpacing( 2); |
488 | layout1->setMargin( 2); | 488 | layout1->setMargin( 2); |
489 | 489 | ||
490 | timeSlider = new QSlider( 0,100,10,0, QSlider::Horizontal, tab, (const char *) "timeSlider" ); | 490 | timeSlider = new QSlider( 0,100,10,0, QSlider::Horizontal, tab, (const char *) "timeSlider" ); |
491 | layout1->addMultiCellWidget( timeSlider, 1, 1, 0, 3); | 491 | layout1->addMultiCellWidget( timeSlider, 1, 1, 0, 3); |
492 | 492 | ||
493 | // timeLabel = new QLabel( tab, "TimeLabel" ); | 493 | // timeLabel = new QLabel( tab, "TimeLabel" ); |
494 | // layout1->addMultiCellWidget( timeLabel, 0, 0, 0, 3); | 494 | // layout1->addMultiCellWidget( timeLabel, 0, 0, 0, 3); |
495 | 495 | ||
496 | // playLabel2 = new QLabel(tab, "PlayLabel2" ); | 496 | // playLabel2 = new QLabel(tab, "PlayLabel2" ); |
497 | // playLabel2->setText(tr("Play") ); | 497 | // playLabel2->setText(tr("Play") ); |
498 | // playLabel2->setFixedHeight( 18); | 498 | // playLabel2->setFixedHeight( 18); |
499 | // layout1->addMultiCellWidget( playLabel2, 0, 0, 4, 4); | 499 | // layout1->addMultiCellWidget( playLabel2, 0, 0, 4, 4); |
500 | 500 | ||
501 | Stop_PushButton = new QPushButton( tab, "Stop_PushButton" ); | 501 | Stop_PushButton = new QPushButton( tab, "Stop_PushButton" ); |
502 | layout1->addMultiCellWidget( Stop_PushButton, 1, 1, 4, 4); | 502 | layout1->addMultiCellWidget( Stop_PushButton, 1, 1, 4, 4); |
503 | Stop_PushButton->setFixedSize( 22, 22); | 503 | Stop_PushButton->setFixedSize( 22, 22); |
504 | Stop_PushButton->setPixmap( image4 ); | 504 | Stop_PushButton->setPixmap( image4 ); |
505 | 505 | ||
506 | toBeginningButton = new QPushButton( tab, "Beginning_PushButton" ); | 506 | toBeginningButton = new QPushButton( tab, "Beginning_PushButton" ); |
507 | layout1->addMultiCellWidget(toBeginningButton, 1, 1, 5, 5); | 507 | layout1->addMultiCellWidget(toBeginningButton, 1, 1, 5, 5); |
508 | toBeginningButton->setFixedSize( 22, 22); | 508 | toBeginningButton->setFixedSize( 22, 22); |
509 | toBeginningButton->setPixmap( Resource::loadPixmap("fastback") ); | 509 | toBeginningButton->setPixmap( Resource::loadPixmap("fastback") ); |
510 | 510 | ||
511 | toEndButton = new QPushButton( tab, "End_PushButton" ); | 511 | toEndButton = new QPushButton( tab, "End_PushButton" ); |
512 | layout1->addMultiCellWidget( toEndButton, 1, 1, 6, 6); | 512 | layout1->addMultiCellWidget( toEndButton, 1, 1, 6, 6); |
513 | toEndButton->setFixedSize( 22, 22); | 513 | toEndButton->setFixedSize( 22, 22); |
514 | toEndButton->setPixmap( Resource::loadPixmap( "fastforward" ) ); | 514 | toEndButton->setPixmap( Resource::loadPixmap( "fastforward" ) ); |
515 | 515 | ||
516 | // QLabel *recLabel2; | 516 | // QLabel *recLabel2; |
517 | // recLabel2 = new QLabel( tab, "recLabel2" ); | 517 | // recLabel2 = new QLabel( tab, "recLabel2" ); |
518 | // recLabel2->setText(tr("Rec")); | 518 | // recLabel2->setText(tr("Rec")); |
519 | // recLabel2->setFixedHeight( 18); | 519 | // recLabel2->setFixedHeight( 18); |
520 | // layout1->addMultiCellWidget( recLabel2, 0, 0, 7, 7); | 520 | // layout1->addMultiCellWidget( recLabel2, 0, 0, 7, 7); |
521 | 521 | ||
522 | Rec_PushButton = new QPushButton( tab, "Rec_PushButton" ); | 522 | Rec_PushButton = new QPushButton( tab, "Rec_PushButton" ); |
523 | layout1->addMultiCellWidget( Rec_PushButton, 1, 1, 7, 7); | 523 | layout1->addMultiCellWidget( Rec_PushButton, 1, 1, 7, 7); |
524 | Rec_PushButton->setFixedSize( 22, 22); | 524 | Rec_PushButton->setFixedSize( 22, 22); |
525 | Rec_PushButton->setPixmap( image6 ); | 525 | Rec_PushButton->setPixmap( image6 ); |
526 | 526 | ||
527 | t = new QTimer( this ); | 527 | t = new QTimer( this ); |
528 | connect( t, SIGNAL( timeout() ), SLOT( timerBreak() ) ); | 528 | connect( t, SIGNAL( timeout() ), SLOT( timerBreak() ) ); |
529 | 529 | ||
530 | rewindTimer = new QTimer( this ); | 530 | rewindTimer = new QTimer( this ); |
531 | connect( rewindTimer, SIGNAL( timeout() ), | 531 | connect( rewindTimer, SIGNAL( timeout() ), |
532 | this, SLOT( rewindTimerTimeout() ) ); | 532 | this, SLOT( rewindTimerTimeout() ) ); |
533 | 533 | ||
534 | forwardTimer = new QTimer( this ); | 534 | forwardTimer = new QTimer( this ); |
535 | connect( forwardTimer, SIGNAL( timeout() ), | 535 | connect( forwardTimer, SIGNAL( timeout() ), |
536 | this, SLOT( forwardTimerTimeout() ) ); | 536 | this, SLOT( forwardTimerTimeout() ) ); |
537 | 537 | ||
538 | deleteSoundButton = new QPushButton( tab, "deleteSoundButton" ); | 538 | deleteSoundButton = new QPushButton( tab, "deleteSoundButton" ); |
539 | layout1->addMultiCellWidget( deleteSoundButton, 1, 1, 8, 8); | 539 | layout1->addMultiCellWidget( deleteSoundButton, 1, 1, 8, 8); |
540 | deleteSoundButton->setText( tr( "Del" ) ); | 540 | deleteSoundButton->setText( tr( "Del" ) ); |
541 | 541 | ||
542 | ListView1 = new QListView( tab, "IconView1" ); | 542 | ListView1 = new QListView( tab, "IconView1" ); |
543 | layout1->addMultiCellWidget( ListView1, 2, 2, 0, 8); | 543 | layout1->addMultiCellWidget( ListView1, 2, 2, 0, 8); |
544 | 544 | ||
545 | ListView1->addColumn( tr( "Name" ) ); | 545 | ListView1->addColumn( tr( "Name" ) ); |
546 | ListView1->setSorting( 1, false); | 546 | ListView1->setSorting( 1, false); |
547 | ListView1->addColumn( tr( "Time" ) ); //in seconds | 547 | ListView1->addColumn( tr( "Time" ) ); //in seconds |
548 | ListView1->setColumnWidthMode(0, QListView::Maximum); | 548 | ListView1->setColumnWidthMode(0, QListView::Maximum); |
549 | ListView1->setColumnAlignment( 1, QListView::AlignCenter); | 549 | ListView1->setColumnAlignment( 1, QListView::AlignCenter); |
550 | ListView1->setAllColumnsShowFocus( true ); | 550 | ListView1->setAllColumnsShowFocus( true ); |
551 | QPEApplication::setStylusOperation( ListView1->viewport(), QPEApplication::RightOnHold); | 551 | QPEApplication::setStylusOperation( ListView1->viewport(), QPEApplication::RightOnHold); |
552 | 552 | ||
553 | TabWidget->insertTab( tab, tr( "Files" ) ); | 553 | TabWidget->insertTab( tab, tr( "Files" ) ); |
554 | 554 | ||
555 | ///**********<<<<<<<<<<<<>>>>>>>>>>>>*************** | 555 | ///**********<<<<<<<<<<<<>>>>>>>>>>>>*************** |
556 | tab_3 = new QWidget( TabWidget, "tab_3" ); | 556 | tab_3 = new QWidget( TabWidget, "tab_3" ); |
557 | QGridLayout *glayout3 = new QGridLayout( tab_3 ); | 557 | QGridLayout *glayout3 = new QGridLayout( tab_3 ); |
558 | glayout3->setSpacing( 2); | 558 | glayout3->setSpacing( 2); |
559 | glayout3->setMargin( 2); | 559 | glayout3->setMargin( 2); |
560 | //////////////////////////////////// | 560 | //////////////////////////////////// |
561 | sampleGroup = new QGroupBox( tab_3, "samplegroup" ); | 561 | sampleGroup = new QGroupBox( tab_3, "samplegroup" ); |
562 | sampleGroup->setTitle( tr( "Sample Rate" ) ); | 562 | sampleGroup->setTitle( tr( "Sample Rate" ) ); |
563 | sampleGroup->setFixedSize( 95,50); | 563 | sampleGroup->setFixedSize( 95,50); |
564 | 564 | ||
565 | sampleRateComboBox = new QComboBox( false, sampleGroup, "SampleRateComboBox" ); | 565 | sampleRateComboBox = new QComboBox( false, sampleGroup, "SampleRateComboBox" ); |
566 | sampleRateComboBox->setGeometry( QRect( 10, 20, 80, 25 ) ); | 566 | sampleRateComboBox->setGeometry( QRect( 10, 20, 80, 25 ) ); |
567 | QString s; | 567 | QString s; |
568 | int z = 0; | 568 | int z = 0; |
569 | while( deviceSampleRates[z] != -1) { | 569 | while( deviceSampleRates[z] != -1) { |
570 | sampleRateComboBox->insertItem( s.setNum( deviceSampleRates[z], 10)); | 570 | sampleRateComboBox->insertItem( s.setNum( deviceSampleRates[z], 10)); |
571 | z++; | 571 | z++; |
572 | } | 572 | } |
573 | 573 | ||
574 | 574 | ||
575 | glayout3->addMultiCellWidget( sampleGroup, 0, 0, 0, 0); | 575 | glayout3->addMultiCellWidget( sampleGroup, 0, 0, 0, 0); |
576 | 576 | ||
577 | sizeGroup= new QGroupBox( tab_3, "sizeGroup" ); | 577 | sizeGroup= new QGroupBox( tab_3, "sizeGroup" ); |
578 | sizeGroup->setTitle( tr( "Limit Size" ) ); | 578 | sizeGroup->setTitle( tr( "Limit Size" ) ); |
579 | sizeGroup->setFixedSize( 80, 50); | 579 | sizeGroup->setFixedSize( 80, 50); |
580 | 580 | ||
581 | sizeLimitCombo = new QComboBox( false, sizeGroup, "sizeLimitCombo" ); | 581 | sizeLimitCombo = new QComboBox( false, sizeGroup, "sizeLimitCombo" ); |
582 | sizeLimitCombo ->setGeometry( QRect( 5, 20, 70, 25 ) ); | 582 | sizeLimitCombo ->setGeometry( QRect( 5, 20, 70, 25 ) ); |
583 | sizeLimitCombo->insertItem(tr("Unlimited")); | 583 | sizeLimitCombo->insertItem(tr("Unlimited")); |
584 | 584 | ||
585 | for(int i=1;i<13; i++) { | 585 | for(int i=1;i<13; i++) { |
586 | sizeLimitCombo->insertItem( QString::number( i * 5)); | 586 | sizeLimitCombo->insertItem( QString::number( i * 5)); |
587 | } | 587 | } |
588 | 588 | ||
589 | 589 | ||
590 | glayout3->addMultiCellWidget( sizeGroup, 0, 0, 1, 1); | 590 | glayout3->addMultiCellWidget( sizeGroup, 0, 0, 1, 1); |
591 | dirGroup = new QGroupBox( tab_3, "dirGroup" ); | 591 | dirGroup = new QGroupBox( tab_3, "dirGroup" ); |
592 | dirGroup->setTitle( tr( "File Directory" ) ); | 592 | dirGroup->setTitle( tr( "File Directory" ) ); |
593 | dirGroup->setFixedSize( 130, 50); | 593 | dirGroup->setFixedSize( 130, 50); |
594 | 594 | ||
595 | directoryComboBox = new QComboBox( false, dirGroup, "dirGroup" ); | 595 | directoryComboBox = new QComboBox( false, dirGroup, "dirGroup" ); |
596 | directoryComboBox->setGeometry( QRect( 10, 15, 115, 25 ) ); | 596 | directoryComboBox->setGeometry( QRect( 10, 15, 115, 25 ) ); |
597 | 597 | ||
598 | glayout3->addMultiCellWidget( dirGroup, 1, 1, 0, 0); | 598 | glayout3->addMultiCellWidget( dirGroup, 1, 1, 0, 0); |
599 | 599 | ||
600 | bitGroup = new QGroupBox( tab_3, "bitGroup" ); | 600 | bitGroup = new QGroupBox( tab_3, "bitGroup" ); |
601 | bitGroup->setTitle( tr( "Bit Depth" ) ); | 601 | bitGroup->setTitle( tr( "Bit Depth" ) ); |
602 | bitGroup->setFixedSize( 65, 50); | 602 | bitGroup->setFixedSize( 65, 50); |
603 | 603 | ||
604 | bitRateComboBox = new QComboBox( false, bitGroup, "BitRateComboBox" ); | 604 | bitRateComboBox = new QComboBox( false, bitGroup, "BitRateComboBox" ); |
605 | 605 | ||
606 | z = 0; | 606 | z = 0; |
607 | while( deviceBitRates[z] != -1) { | 607 | while( deviceBitRates[z] != -1) { |
608 | bitRateComboBox->insertItem( s.setNum( deviceBitRates[z], 10) ); | 608 | bitRateComboBox->insertItem( s.setNum( deviceBitRates[z], 10) ); |
609 | z++; | 609 | z++; |
610 | } | 610 | } |
611 | 611 | ||
612 | bitRateComboBox->setGeometry( QRect( 5, 20, 50, 25 ) ); | 612 | bitRateComboBox->setGeometry( QRect( 5, 20, 50, 25 ) ); |
613 | 613 | ||
614 | glayout3->addMultiCellWidget( bitGroup, 1, 1, 1, 1); | 614 | glayout3->addMultiCellWidget( bitGroup, 1, 1, 1, 1); |
615 | 615 | ||
616 | compressionCheckBox = new QCheckBox ( tr("Wave Compression (smaller files)"), tab_3 ); | 616 | compressionCheckBox = new QCheckBox ( tr("Wave Compression (smaller files)"), tab_3 ); |
617 | 617 | ||
618 | autoMuteCheckBox = new QCheckBox ( tr("Auto Mute"), tab_3 ); | 618 | autoMuteCheckBox = new QCheckBox ( tr("Auto Mute"), tab_3 ); |
619 | stereoCheckBox = new QCheckBox ( tr("Stereo"), tab_3 ); | 619 | stereoCheckBox = new QCheckBox ( tr("Stereo"), tab_3 ); |
620 | 620 | ||
621 | glayout3->addMultiCellWidget( compressionCheckBox, 2, 2, 0, 3); | 621 | glayout3->addMultiCellWidget( compressionCheckBox, 2, 2, 0, 3); |
622 | glayout3->addMultiCellWidget( autoMuteCheckBox, 3, 3, 0, 0); | 622 | glayout3->addMultiCellWidget( autoMuteCheckBox, 3, 3, 0, 0); |
623 | glayout3->addMultiCellWidget( stereoCheckBox, 3, 3, 1, 1); | 623 | glayout3->addMultiCellWidget( stereoCheckBox, 3, 3, 1, 1); |
624 | 624 | ||
625 | tab_5 = new QWidget( TabWidget, "tab_5" ); | 625 | tab_5 = new QWidget( TabWidget, "tab_5" ); |
626 | 626 | ||
627 | QHBoxLayout *Layout19a; | 627 | QHBoxLayout *Layout19a; |
628 | Layout19a = new QHBoxLayout( tab_5); | 628 | Layout19a = new QHBoxLayout( tab_5); |
629 | Layout19a->setSpacing( 2 ); | 629 | Layout19a->setSpacing( 2 ); |
630 | Layout19a->setMargin( 0 ); | 630 | Layout19a->setMargin( 0 ); |
631 | 631 | ||
632 | Layout15 = new QVBoxLayout( this); | 632 | Layout15 = new QVBoxLayout( this); |
633 | Layout15->setSpacing( 2 ); | 633 | Layout15->setSpacing( 2 ); |
634 | Layout15->setMargin( 0 ); | 634 | Layout15->setMargin( 0 ); |
635 | 635 | ||
636 | Layout15b = new QVBoxLayout( this); | 636 | Layout15b = new QVBoxLayout( this); |
637 | Layout15b->setSpacing( 2 ); | 637 | Layout15b->setSpacing( 2 ); |
638 | Layout15b->setMargin( 0 ); | 638 | Layout15b->setMargin( 0 ); |
639 | 639 | ||
640 | TextLabel2 = new QLabel( tab_5, "InputLabel" ); | 640 | TextLabel2 = new QLabel( tab_5, "InputLabel" ); |
641 | TextLabel2->setText( tr( "In")); | 641 | TextLabel2->setText( tr( "In")); |
642 | TextLabel2->setFixedWidth( 35); | 642 | TextLabel2->setFixedWidth( 35); |
643 | Layout15->addWidget( TextLabel2 ); | 643 | Layout15->addWidget( TextLabel2 ); |
644 | 644 | ||
645 | TextLabel3 = new QLabel( tab_5, "OutputLabel" ); | 645 | TextLabel3 = new QLabel( tab_5, "OutputLabel" ); |
646 | TextLabel3->setText( tr( "Out" ) ); | 646 | TextLabel3->setText( tr( "Out" ) ); |
647 | Layout15b->addWidget( TextLabel3 ); | 647 | Layout15b->addWidget( TextLabel3 ); |
648 | 648 | ||
649 | InputSlider = new QSlider( -100, 0, 10, 0, QSlider::Vertical, tab_5, (const char *) "InputSlider" ); | 649 | InputSlider = new QSlider( -100, 0, 10, 0, QSlider::Vertical, tab_5, (const char *) "InputSlider" ); |
650 | InputSlider->setTickmarks( QSlider::Both); | 650 | InputSlider->setTickmarks( QSlider::Both); |
651 | Layout15->addWidget( InputSlider); | 651 | Layout15->addWidget( InputSlider); |
652 | 652 | ||
653 | OutputSlider = new QSlider( -100,0,10,0, QSlider::Vertical,tab_5,(const char *) "OutputSlider" ); | 653 | OutputSlider = new QSlider( -100,0,10,0, QSlider::Vertical,tab_5,(const char *) "OutputSlider" ); |
654 | OutputSlider->setTickmarks( QSlider::Both); | 654 | OutputSlider->setTickmarks( QSlider::Both); |
655 | 655 | ||
656 | Layout15b->addWidget( OutputSlider ); | 656 | Layout15b->addWidget( OutputSlider ); |
657 | 657 | ||
658 | outMuteCheckBox = new QCheckBox ( tr("mute"), tab_5 ); | 658 | outMuteCheckBox = new QCheckBox ( tr("mute"), tab_5 ); |
659 | Layout15->addWidget( outMuteCheckBox ); | 659 | Layout15->addWidget( outMuteCheckBox ); |
660 | 660 | ||
661 | inMuteCheckBox = new QCheckBox ( tr("mute"), tab_5 ); | 661 | inMuteCheckBox = new QCheckBox ( tr("mute"), tab_5 ); |
662 | inMuteCheckBox-> setFocusPolicy ( QWidget::NoFocus ); | 662 | inMuteCheckBox-> setFocusPolicy ( QWidget::NoFocus ); |
663 | Layout15b->addWidget( inMuteCheckBox ); | 663 | Layout15b->addWidget( inMuteCheckBox ); |
664 | 664 | ||
665 | 665 | ||
666 | Layout19a->addLayout( Layout15 ); | 666 | Layout19a->addLayout( Layout15 ); |
667 | Layout19a->addLayout( Layout15b ); | 667 | Layout19a->addLayout( Layout15b ); |
668 | 668 | ||
669 | fillDirectoryCombo(); | 669 | fillDirectoryCombo(); |
670 | 670 | ||
671 | TabWidget->insertTab( tab_3, tr( "Options" ) ); | 671 | TabWidget->insertTab( tab_3, tr( "Options" ) ); |
672 | 672 | ||
673 | TabWidget->insertTab( tab_5, tr( "Volume" ) ); | 673 | TabWidget->insertTab( tab_5, tr( "Volume" ) ); |
674 | 674 | ||
675 | waveform = new Waveform( this, "waveform" ); | 675 | waveform = new Waveform( this, "waveform" ); |
676 | waveform->setMinimumSize( QSize( 0, 50 ) ); | 676 | waveform->setMinimumSize( QSize( 0, 50 ) ); |
677 | 677 | ||
678 | layout->addMultiCellWidget( waveform, 8, 8, 0, 8); | 678 | layout->addMultiCellWidget( waveform, 8, 8, 0, 8); |
679 | waveform->setBackgroundColor ( black ); | 679 | waveform->setBackgroundColor ( black ); |
680 | } | 680 | } |
681 | 681 | ||
682 | void QtRec::initIconView() { | 682 | void QtRec::initIconView() { |
683 | ListView1->clear(); | 683 | ListView1->clear(); |
684 | Config cfg("OpieRec"); | 684 | Config cfg("OpieRec"); |
685 | cfg.setGroup("Sounds"); | 685 | cfg.setGroup("Sounds"); |
686 | QString temp; | 686 | QString temp; |
687 | QPixmap image0( ( const char** ) image0_data ); | 687 | QPixmap image0( ( const char** ) image0_data ); |
688 | 688 | ||
689 | int nFiles = cfg.readNumEntry("NumberofFiles",0); | 689 | int nFiles = cfg.readNumEntry("NumberofFiles",0); |
690 | // owarn << "init number of files " << nFiles << "" << oendl; | 690 | // owarn << "init number of files " << nFiles << "" << oendl; |
691 | 691 | ||
692 | for(int i = 1; i <= nFiles; i++) { | 692 | for(int i = 1; i <= nFiles; i++) { |
693 | 693 | ||
694 | QListViewItem * item; | 694 | QListViewItem * item; |
695 | QString fileS, mediaLocation, fileDate, filePath; | 695 | QString fileS, mediaLocation, fileDate, filePath; |
696 | 696 | ||
697 | temp.sprintf( "%d",i); | 697 | temp.sprintf( "%d",i); |
698 | temp = cfg.readEntry( temp,""); //reads currentFile | 698 | temp = cfg.readEntry( temp,""); //reads currentFile |
699 | filePath = cfg.readEntry( temp,""); //currentFileName | 699 | filePath = cfg.readEntry( temp,""); //currentFileName |
700 | 700 | ||
701 | QFileInfo info(filePath); | 701 | QFileInfo info(filePath); |
702 | fileDate = info.lastModified().toString(); | 702 | fileDate = info.lastModified().toString(); |
703 | 703 | ||
704 | fileS = cfg.readEntry( filePath, "0" );// file length in seconds | 704 | fileS = cfg.readEntry( filePath, "0" );// file length in seconds |
705 | mediaLocation = getStorage( filePath); | 705 | mediaLocation = getStorage( filePath); |
706 | if( info.exists()) { | 706 | if( info.exists()) { |
707 | // owarn << "new item " << temp << oendl; | 707 | // owarn << "new item " << temp << oendl; |
708 | item = new QListViewItem( ListView1, temp, fileS /*, mediaLocation, fileDate*/); | 708 | item = new QListViewItem( ListView1, temp, fileS /*, mediaLocation, fileDate*/); |
709 | item->setPixmap( 0, image0); | 709 | item->setPixmap( 0, image0); |
710 | if( currentFileName == filePath) | 710 | if( currentFileName == filePath) |
711 | ListView1->setSelected( item, true); | 711 | ListView1->setSelected( item, true); |
712 | } | 712 | } |
713 | } | 713 | } |
714 | } | 714 | } |
715 | 715 | ||
716 | void QtRec::initConnections() { | 716 | void QtRec::initConnections() { |
717 | connect(qApp,SIGNAL(aboutToQuit()),SLOT(cleanUp())); | 717 | connect(qApp,SIGNAL(aboutToQuit()),SLOT(cleanUp())); |
718 | 718 | ||
719 | connect(toBeginningButton,SIGNAL(pressed()),this,SLOT(rewindPressed())); | 719 | connect(toBeginningButton,SIGNAL(pressed()),this,SLOT(rewindPressed())); |
720 | connect(toBeginningButton,SIGNAL(released()),this,SLOT(rewindReleased())); | 720 | connect(toBeginningButton,SIGNAL(released()),this,SLOT(rewindReleased())); |
721 | connect(toEndButton,SIGNAL(pressed()),this,SLOT(FastforwardPressed())); | 721 | connect(toEndButton,SIGNAL(pressed()),this,SLOT(FastforwardPressed())); |
722 | connect(toEndButton,SIGNAL(released()),this,SLOT(FastforwardReleased())); | 722 | connect(toEndButton,SIGNAL(released()),this,SLOT(FastforwardReleased())); |
723 | |||
723 | connect(deleteSoundButton,SIGNAL(released()),this,SLOT(deleteSound())); | 724 | connect(deleteSoundButton,SIGNAL(released()),this,SLOT(deleteSound())); |
725 | |||
724 | connect(Stop_PushButton,SIGNAL(released()),this,SLOT(doPlayBtn())); | 726 | connect(Stop_PushButton,SIGNAL(released()),this,SLOT(doPlayBtn())); |
727 | // connect(Stop_PushButton,SIGNAL(released()),this,SLOT(doPlayBtn())); | ||
728 | |||
729 | // connect(Rec_PushButton,SIGNAL(released()),this,SIGNAL(startRecording())); | ||
725 | connect(Rec_PushButton,SIGNAL(released()),this,SLOT(newSound())); | 730 | connect(Rec_PushButton,SIGNAL(released()),this,SLOT(newSound())); |
726 | 731 | ||
727 | connect(TabWidget,SIGNAL(currentChanged(QWidget*)),this,SLOT(thisTab(QWidget*))); | 732 | connect(TabWidget,SIGNAL(currentChanged(QWidget*)),this,SLOT(thisTab(QWidget*))); |
728 | 733 | ||
729 | connect(OutputSlider,SIGNAL(sliderReleased()),this,SLOT(changedOutVolume())); | 734 | connect(OutputSlider,SIGNAL(sliderReleased()),this,SLOT(changedOutVolume())); |
730 | connect(InputSlider,SIGNAL(sliderReleased()),this,SLOT(changedInVolume())); | 735 | connect(InputSlider,SIGNAL(sliderReleased()),this,SLOT(changedInVolume())); |
731 | 736 | ||
732 | connect(sampleRateComboBox,SIGNAL(activated(int)),this,SLOT(changesamplerateCombo(int))); | 737 | connect(sampleRateComboBox,SIGNAL(activated(int)),this,SLOT(changesamplerateCombo(int))); |
733 | connect(bitRateComboBox,SIGNAL(activated(int)),this,SLOT(changebitrateCombo(int))); | 738 | connect(bitRateComboBox,SIGNAL(activated(int)),this,SLOT(changebitrateCombo(int))); |
734 | connect(directoryComboBox,SIGNAL(activated(int)),this,SLOT(changeDirCombo(int))); | 739 | connect(directoryComboBox,SIGNAL(activated(int)),this,SLOT(changeDirCombo(int))); |
735 | connect(sizeLimitCombo,SIGNAL(activated(int)),this,SLOT(changeSizeLimitCombo(int))); | 740 | connect(sizeLimitCombo,SIGNAL(activated(int)),this,SLOT(changeSizeLimitCombo(int))); |
736 | 741 | ||
737 | connect(stereoCheckBox,SIGNAL(toggled(bool)),this,SLOT(changeStereoCheck(bool))); | 742 | connect(stereoCheckBox,SIGNAL(toggled(bool)),this,SLOT(changeStereoCheck(bool))); |
738 | connect(outMuteCheckBox,SIGNAL(toggled(bool)),this,SLOT(doVolMuting(bool))); | 743 | connect(outMuteCheckBox,SIGNAL(toggled(bool)),this,SLOT(doVolMuting(bool))); |
739 | connect(inMuteCheckBox,SIGNAL(toggled(bool)),this,SLOT(doMicMuting(bool))); | 744 | connect(inMuteCheckBox,SIGNAL(toggled(bool)),this,SLOT(doMicMuting(bool))); |
740 | 745 | ||
741 | connect(ListView1,SIGNAL(doubleClicked(QListViewItem*)),this,SLOT(itClick(QListViewItem*))); | 746 | connect(ListView1,SIGNAL(doubleClicked(QListViewItem*)),this,SLOT(itClick(QListViewItem*))); |
742 | connect(ListView1,SIGNAL(mouseButtonPressed(int,QListViewItem*,const QPoint&,int)),this,SLOT(listPressed(int,QListViewItem*,const QPoint&,int))); | 747 | connect(ListView1,SIGNAL(mouseButtonPressed(int,QListViewItem*,const QPoint&,int)),this,SLOT(listPressed(int,QListViewItem*,const QPoint&,int))); |
743 | 748 | ||
744 | connect(timeSlider,SIGNAL(sliderMoved(int)),this,SLOT(changeTimeSlider(int))); | 749 | connect(timeSlider,SIGNAL(sliderMoved(int)),this,SLOT(changeTimeSlider(int))); |
745 | connect(timeSlider,SIGNAL(sliderPressed()),this,SLOT(timeSliderPressed())); | 750 | connect(timeSlider,SIGNAL(sliderPressed()),this,SLOT(timeSliderPressed())); |
746 | connect(timeSlider,SIGNAL(sliderReleased()),this,SLOT(timeSliderReleased())); | 751 | connect(timeSlider,SIGNAL(sliderReleased()),this,SLOT(timeSliderReleased())); |
747 | 752 | ||
748 | connect(compressionCheckBox,SIGNAL(toggled(bool)),this,SLOT(compressionSelected(bool))); | 753 | connect(compressionCheckBox,SIGNAL(toggled(bool)),this,SLOT(compressionSelected(bool))); |
749 | connect(autoMuteCheckBox,SIGNAL(toggled(bool)),this,SLOT(slotAutoMute(bool))); | 754 | connect(autoMuteCheckBox,SIGNAL(toggled(bool)),this,SLOT(slotAutoMute(bool))); |
750 | } | 755 | } |
751 | 756 | ||
752 | void QtRec::initConfig() { | 757 | void QtRec::initConfig() { |
753 | int index, fred, i; | 758 | int index, fred, i; |
754 | Config cfg("OpieRec"); | 759 | Config cfg("OpieRec"); |
755 | cfg.setGroup("Settings"); | 760 | cfg.setGroup("Settings"); |
756 | 761 | ||
757 | index = cfg.readNumEntry("samplerate",22050); | 762 | index = cfg.readNumEntry("samplerate",22050); |
758 | bool ok; | 763 | bool ok; |
759 | 764 | ||
760 | for(int ws=0;ws<sampleRateComboBox->count();ws++) { | 765 | for(int ws=0;ws<sampleRateComboBox->count();ws++) { |
761 | fred = sampleRateComboBox->text(ws).toInt(&ok, 10); | 766 | fred = sampleRateComboBox->text(ws).toInt(&ok, 10); |
762 | if( index == fred) { | 767 | if( index == fred) { |
763 | filePara.sampleRate = fred; | 768 | filePara.sampleRate = fred; |
764 | sampleRateComboBox->setCurrentItem(ws); | 769 | sampleRateComboBox->setCurrentItem(ws); |
765 | } | 770 | } |
766 | } | 771 | } |
767 | 772 | ||
768 | i = cfg.readNumEntry("bitrate",16); | 773 | i = cfg.readNumEntry("bitrate",16); |
769 | if(i == 16) | 774 | if(i == 16) |
770 | bitRateComboBox->setCurrentItem( 1); | 775 | bitRateComboBox->setCurrentItem( 1); |
771 | else if(i == 24) | 776 | else if(i == 24) |
772 | bitRateComboBox->setCurrentItem( 2); | 777 | bitRateComboBox->setCurrentItem( 2); |
773 | else if(i == 32) | 778 | else if(i == 32) |
774 | bitRateComboBox->setCurrentItem( 3); | 779 | bitRateComboBox->setCurrentItem( 3); |
775 | else | 780 | else |
776 | bitRateComboBox->setCurrentItem( 0); | 781 | bitRateComboBox->setCurrentItem( 0); |
777 | 782 | ||
778 | filePara.resolution = i; | 783 | filePara.resolution = i; |
779 | 784 | ||
780 | i = cfg.readNumEntry("sizeLimit", 5 ); | 785 | i = cfg.readNumEntry("sizeLimit", 5 ); |
781 | QString temp; | 786 | QString temp; |
782 | sizeLimitCombo->setCurrentItem((i/5)); | 787 | sizeLimitCombo->setCurrentItem((i/5)); |
783 | 788 | ||
784 | stereoCheckBox->setChecked( cfg.readBoolEntry("stereo", 1)); | 789 | stereoCheckBox->setChecked( cfg.readBoolEntry("stereo", 1)); |
785 | if( stereoCheckBox->isChecked()) { | 790 | if( stereoCheckBox->isChecked()) { |
786 | filePara.channels = 2; | 791 | filePara.channels = 2; |
787 | } else { | 792 | } else { |
788 | filePara.channels = 1; | 793 | filePara.channels = 1; |
789 | } | 794 | } |
790 | 795 | ||
791 | compressionCheckBox->setChecked( cfg.readBoolEntry("wavCompression",1)); | 796 | compressionCheckBox->setChecked( cfg.readBoolEntry("wavCompression",1)); |
792 | if( compressionCheckBox->isChecked()) { | 797 | if( compressionCheckBox->isChecked()) { |
793 | bitRateComboBox->setCurrentItem(1); | 798 | bitRateComboBox->setCurrentItem(1); |
794 | bitRateComboBox->setEnabled(false); | 799 | bitRateComboBox->setEnabled(false); |
795 | filePara.resolution=16; | 800 | filePara.resolution=16; |
796 | } | 801 | } |
797 | 802 | ||
798 | autoMuteCheckBox->setChecked( cfg.readBoolEntry("useAutoMute",0)); | 803 | autoMuteCheckBox->setChecked( cfg.readBoolEntry("useAutoMute",0)); |
799 | if( autoMuteCheckBox->isChecked()) | 804 | if( autoMuteCheckBox->isChecked()) |
800 | slotAutoMute(true); | 805 | slotAutoMute(true); |
801 | else | 806 | else |
802 | slotAutoMute(false); | 807 | slotAutoMute(false); |
803 | 808 | ||
804 | Config cofg( "qpe"); | 809 | Config cofg( "qpe"); |
805 | cofg.setGroup( "Volume"); | 810 | cofg.setGroup( "Volume"); |
806 | outMuteCheckBox->setChecked( cofg.readBoolEntry( "Mute",0)); | 811 | outMuteCheckBox->setChecked( cofg.readBoolEntry( "Mute",0)); |
807 | inMuteCheckBox->setChecked( cofg.readBoolEntry( "MicMute",0)); | 812 | inMuteCheckBox->setChecked( cofg.readBoolEntry( "MicMute",0)); |
808 | } | 813 | } |
809 | 814 | ||
810 | void QtRec::stop() { | 815 | void QtRec::stop() { |
811 | // owarn << "STOP" << oendl; | 816 | // owarn << "STOP" << oendl; |
812 | setRecordButton(false); | 817 | setRecordButton(false); |
813 | 818 | ||
814 | if( !recording) | 819 | if( !recording) { |
820 | emit stopPlaying(); | ||
815 | endPlaying(); | 821 | endPlaying(); |
816 | else | 822 | } else { |
823 | emit stopRecording(); | ||
817 | endRecording(); | 824 | endRecording(); |
825 | } | ||
818 | timeSlider->setValue(0); | 826 | timeSlider->setValue(0); |
819 | } | 827 | } |
820 | 828 | ||
821 | void QtRec::doPlayBtn() { | 829 | void QtRec::doPlayBtn() { |
822 | 830 | ||
823 | if(!stopped) { | 831 | if(!stopped) { |
824 | // playLabel2->setText(tr("Play")); | 832 | // playLabel2->setText(tr("Play")); |
825 | stop(); | 833 | stop(); |
826 | } else { | 834 | } else { |
827 | if(ListView1->currentItem() == 0) return; | 835 | if(ListView1->currentItem() == 0) return; |
828 | // playLabel2->setText(tr("Stop")); | 836 | // playLabel2->setText(tr("Stop")); |
829 | currentFile = ListView1->currentItem()->text(0); | 837 | currentFile = ListView1->currentItem()->text(0); |
830 | start(); | 838 | start(); |
831 | } | 839 | } |
832 | } | 840 | } |
833 | 841 | ||
834 | void QtRec::start() { //play | 842 | void QtRec::start() { //play |
835 | if( stopped) { | 843 | if( stopped) { |
836 | QPixmap image3( ( const char** ) image3_data ); | 844 | QPixmap image3( ( const char** ) image3_data ); |
837 | Stop_PushButton->setPixmap( image3 ); | 845 | Stop_PushButton->setPixmap( image3 ); |
838 | Stop_PushButton->setDown( true); | 846 | Stop_PushButton->setDown( true); |
839 | stopped = false; | 847 | stopped = false; |
840 | paused = false; | 848 | paused = false; |
841 | secCount = 1; | 849 | secCount = 1; |
842 | 850 | ||
843 | if( openPlayFile()) | 851 | if( openPlayFile()) |
844 | if( setupAudio( false)) //recording is false | 852 | if( setupAudio( false)) //recording is false |
845 | doPlay(); | 853 | doPlay(); |
846 | } | 854 | } |
847 | } | 855 | } |
848 | 856 | ||
849 | bool QtRec::rec() { //record | 857 | bool QtRec::rec() { //record |
850 | QString timeString; | 858 | QString timeString; |
851 | timeString.sprintf("%.0f", 0.0); | 859 | timeString.sprintf("%.0f", 0.0); |
852 | // timeLabel->setText( timeString+ " seconds"); | 860 | // timeLabel->setText( timeString+ " seconds"); |
853 | if(!stopped) { | 861 | if(!stopped) { |
854 | monitoring = true; | 862 | monitoring = true; |
855 | return false; | 863 | return false; |
856 | } else { | 864 | } else { |
857 | secCount = 1; | 865 | secCount = 1; |
858 | // playLabel2->setText(tr("Stop")); | 866 | // playLabel2->setText(tr("Stop")); |
859 | monitoring = false; | 867 | monitoring = false; |
860 | setRecordButton( true); | 868 | setRecordButton( true); |
861 | 869 | ||
862 | if( setupAudio( true)) | 870 | if( setupAudio( true)) |
863 | if(setUpFile()) { | 871 | if(setUpFile()) { |
864 | int fileSize = 0; | 872 | int fileSize = 0; |
865 | Config cfg("OpieRec"); | 873 | Config cfg("OpieRec"); |
866 | cfg.setGroup("Settings"); | 874 | cfg.setGroup("Settings"); |
867 | // odebug << "<<<<<<<Device bits " << soundDevice->getDeviceBits() | ||
868 | // << ", device rate " << soundDevice->getDeviceRate() | ||
869 | // << ", device channels " << soundDevice->getDeviceChannels() << oendl; | ||
870 | |||
871 | //filePara.sampleRate = cfg.readNumEntry("samplerate", 22050); | ||
872 | // odebug << "sample rate is " << filePara.sampleRate << "" << oendl; | ||
873 | filePara.SecondsToRecord = getCurrentSizeLimit(); | 875 | filePara.SecondsToRecord = getCurrentSizeLimit(); |
874 | |||
875 | // odebug << "size limit " << filePara.SecondsToRecord << " sec" << oendl; | ||
876 | int diskSize = checkDiskSpace( (const QString &) wavFile->trackName()); | 876 | int diskSize = checkDiskSpace( (const QString &) wavFile->trackName()); |
877 | 877 | ||
878 | if( filePara.SecondsToRecord == 0) { | 878 | if( filePara.SecondsToRecord == 0) { |
879 | fileSize = diskSize; | 879 | fileSize = diskSize; |
880 | } else if( filePara.format == WAVE_FORMAT_PCM) { | 880 | } else if( filePara.format == WAVE_FORMAT_PCM) { |
881 | // odebug << "WAVE_FORMAT_PCM" << oendl; | 881 | // odebug << "WAVE_FORMAT_PCM" << oendl; |
882 | fileSize = (filePara.SecondsToRecord ) * filePara.channels | 882 | fileSize = (filePara.SecondsToRecord ) * filePara.channels |
883 | * filePara.sampleRate * ( filePara.resolution / 8) + 1000; | 883 | * filePara.sampleRate * ( filePara.resolution / 8) + 1000; |
884 | } else { | 884 | } else { |
885 | // odebug << "WAVE_FORMAT_DVI_ADPCM" << oendl; | 885 | // odebug << "WAVE_FORMAT_DVI_ADPCM" << oendl; |
886 | fileSize = ((filePara.SecondsToRecord) * filePara.channels | 886 | fileSize = ((filePara.SecondsToRecord) * filePara.channels |
887 | * filePara.sampleRate * ( filePara.resolution / 8) ) / 4 + 250; | 887 | * filePara.sampleRate * ( filePara.resolution / 8) ) / 4 + 250; |
888 | } | 888 | } |
889 | 889 | ||
890 | filePara.samplesToRecord = fileSize; | 890 | filePara.samplesToRecord = fileSize; |
891 | odebug << "filesize should be " << filePara.samplesToRecord | 891 | odebug << "filesize should be " << filePara.samplesToRecord |
892 | << ", bits " << filePara.resolution << ", rate " << filePara.sampleRate; | 892 | << ", bits " << filePara.resolution << ", rate " << filePara.sampleRate; |
893 | if( paused) { | 893 | if( paused) { |
894 | paused = false; | 894 | paused = false; |
895 | } | 895 | } |
896 | // else { | 896 | // else { |
897 | odebug << "Setting timeslider " << filePara.samplesToRecord << "" << oendl; | 897 | odebug << "Setting timeslider " << filePara.samplesToRecord << "" << oendl; |
898 | // if(fileSize != 0) | 898 | // if(fileSize != 0) |
899 | timeSlider->setRange(0, filePara.samplesToRecord); | 899 | timeSlider->setRange(0, filePara.samplesToRecord); |
900 | // } | 900 | // } |
901 | 901 | ||
902 | if( diskSize < fileSize/1024) { | 902 | if( diskSize < fileSize/1024) { |
903 | QMessageBox::warning(this, | 903 | QMessageBox::warning(this, |
904 | tr("Low Disk Space"), | 904 | tr("Low Disk Space"), |
905 | tr("You are running low of\nrecording space\n" | 905 | tr("You are running low of\nrecording space\n" |
906 | "or a card isn't being recognized")); | 906 | "or a card isn't being recognized")); |
907 | stopped = true; //we need to be stopped | 907 | stopped = true; //we need to be stopped |
908 | stop(); | 908 | stop(); |
909 | } else { | 909 | } else { |
910 | QString msg; | 910 | QString msg; |
911 | msg.sprintf("%d, %d, %d", filePara.sampleRate, filePara.channels, filePara.resolution); | 911 | msg.sprintf("%d, %d, %d", filePara.sampleRate, filePara.channels, filePara.resolution); |
912 | #ifdef DEV_VERSION | 912 | #ifdef DEV_VERSION |
913 | setCaption( msg); | 913 | setCaption( msg); |
914 | #endif | 914 | #endif |
915 | filePara.fileName=currentFile.latin1(); | 915 | filePara.fileName=currentFile.latin1(); |
916 | odebug << "Start recording" << oendl; | 916 | odebug << "Start recording" << oendl; |
917 | stopped = false; | 917 | stopped = false; |
918 | 918 | ||
919 | #ifdef THREADED | 919 | #ifdef THREADED |
920 | odebug << "Start recording thread" << oendl; | 920 | odebug << "Start recording thread" << oendl; |
921 | pthread_t thread1; | 921 | pthread_t thread1; |
922 | pthread_create( &thread1, NULL, (void * (*)(void *))quickRec, NULL/* &*/); | 922 | pthread_create( &thread1, NULL, (void * (*)(void *))quickRec, NULL/* &*/); |
923 | #endif | 923 | #endif |
924 | toBeginningButton->setEnabled( false); | 924 | toBeginningButton->setEnabled( false); |
925 | toEndButton->setEnabled( false); | 925 | toEndButton->setEnabled( false); |
926 | 926 | ||
927 | startTimer(1000); | 927 | startTimer(1000); |
928 | #ifndef THREADED | 928 | #ifndef THREADED |
929 | quickRec(); | 929 | quickRec(); |
930 | #endif | 930 | #endif |
931 | } | 931 | } |
932 | } //end setUpFile | 932 | } //end setUpFile |
933 | } //end setupAudio | 933 | } //end setupAudio |
934 | return true; | 934 | return true; |
935 | } | 935 | } |
936 | /* | 936 | /* |
937 | This happens when a tab is selected*/ | 937 | This happens when a tab is selected*/ |
938 | void QtRec::thisTab(QWidget* widg) { | 938 | void QtRec::thisTab(QWidget* widg) { |
939 | if(widg != NULL) { | 939 | if(widg != NULL) { |
940 | int index = TabWidget->currentPageIndex(); | 940 | int index = TabWidget->currentPageIndex(); |
941 | 941 | ||
942 | if(index == 0) { //file page | 942 | if(index == 0) { //file page |
943 | } | 943 | } |
944 | 944 | ||
945 | if(index == 1) { //control page | 945 | if(index == 1) { //control page |
946 | fillDirectoryCombo(); | 946 | fillDirectoryCombo(); |
947 | // soundDevice->getOutVol(); | 947 | // soundDevice->getOutVol(); |
948 | // soundDevice->getInVol(); | 948 | // soundDevice->getInVol(); |
949 | } | 949 | } |
950 | 950 | ||
951 | if( index==2) { //help page | 951 | if( index==2) { //help page |
952 | } | 952 | } |
953 | 953 | ||
954 | qApp->processEvents(); | 954 | qApp->processEvents(); |
955 | update(); | 955 | update(); |
956 | } | 956 | } |
957 | } | 957 | } |
958 | 958 | ||
959 | void QtRec::getOutVol( ) { | 959 | void QtRec::getOutVol( ) { |
960 | filePara.outVol = soundDevice->getOutVolume(); | 960 | filePara.outVol = soundDevice->getOutVolume(); |
961 | // odebug << "out vol " << filePara.outVol << "" << oendl; | 961 | // odebug << "out vol " << filePara.outVol << "" << oendl; |
962 | OutputSlider->setValue( -filePara.outVol); | 962 | OutputSlider->setValue( -filePara.outVol); |
963 | } | 963 | } |
964 | 964 | ||
965 | void QtRec::getInVol() { | 965 | void QtRec::getInVol() { |
966 | filePara.inVol = soundDevice->getInVolume(); | 966 | filePara.inVol = soundDevice->getInVolume(); |
967 | // odebug << "in vol " << filePara.inVol << "" << oendl; | 967 | // odebug << "in vol " << filePara.inVol << "" << oendl; |
968 | InputSlider->setValue( -filePara.inVol); | 968 | InputSlider->setValue( -filePara.inVol); |
969 | } | 969 | } |
970 | 970 | ||
971 | void QtRec::changedOutVolume() { | 971 | void QtRec::changedOutVolume() { |
972 | soundDevice->changedOutVolume( -OutputSlider->value()); | 972 | soundDevice->changedOutVolume( -OutputSlider->value()); |
973 | } | 973 | } |
974 | 974 | ||
975 | void QtRec::changedInVolume( ) { | 975 | void QtRec::changedInVolume( ) { |
976 | soundDevice->changedInVolume( -InputSlider->value()); | 976 | soundDevice->changedInVolume( -InputSlider->value()); |
977 | } | 977 | } |
978 | 978 | ||
979 | 979 | ||
980 | bool QtRec::setupAudio( bool b) { | 980 | bool QtRec::setupAudio( bool b) { |
981 | bool ok; | 981 | bool ok; |
982 | int sampleformat, stereo, flags; | 982 | int sampleformat, stereo, flags; |
983 | QString dspString, mixerString; | 983 | QString dspString, mixerString; |
984 | 984 | ||
985 | filePara.resolution = bitRateComboBox->currentText().toInt( &ok,10); //16 | 985 | filePara.resolution = bitRateComboBox->currentText().toInt( &ok,10); //16 |
986 | 986 | ||
987 | if( !b) { | 987 | if( !b) { |
988 | // we want to play | 988 | // we want to play |
989 | #ifdef PDAUDIO //ALSA | 989 | #ifdef PDAUDIO //ALSA |
990 | if( filePara.resolution == 16 || compressionCheckBox->isChecked() ) { | 990 | if( filePara.resolution == 16 || compressionCheckBox->isChecked() ) { |
991 | sampleformat = SND_PCM_FORMAT_S16; | 991 | sampleformat = SND_PCM_FORMAT_S16; |
992 | filePara.resolution = 16; | 992 | filePara.resolution = 16; |
993 | } else if( filePara.resolution == 24 || compressionCheckBox->isChecked() ) { | 993 | } else if( filePara.resolution == 24 || compressionCheckBox->isChecked() ) { |
994 | sampleformat = SND_PCM_FORMAT_S24; | 994 | sampleformat = SND_PCM_FORMAT_S24; |
995 | filePara.resolution = 24; | 995 | filePara.resolution = 24; |
996 | } else if( filePara.resolution == 32 || compressionCheckBox->isChecked() ) { | 996 | } else if( filePara.resolution == 32 || compressionCheckBox->isChecked() ) { |
997 | sampleformat = SND_PCM_FORMAT_S32; | 997 | sampleformat = SND_PCM_FORMAT_S32; |
998 | filePara.resolution = 32; | 998 | filePara.resolution = 32; |
999 | } else { | 999 | } else { |
1000 | sampleformat = SND_PCM_FORMAT_U8; | 1000 | sampleformat = SND_PCM_FORMAT_U8; |
1001 | filePara.resolution = 8; | 1001 | filePara.resolution = 8; |
1002 | } | 1002 | } |
1003 | #else | 1003 | #else |
1004 | // we want to play | 1004 | // we want to play |
1005 | if( filePara.resolution == 16 || compressionCheckBox->isChecked() ) { | 1005 | if( filePara.resolution == 16 || compressionCheckBox->isChecked() ) { |
1006 | sampleformat = AFMT_S16_LE; | 1006 | sampleformat = AFMT_S16_LE; |
1007 | filePara.resolution = 16; | 1007 | filePara.resolution = 16; |
1008 | } else { | 1008 | } else { |
1009 | sampleformat = AFMT_U8; | 1009 | sampleformat = AFMT_U8; |
1010 | filePara.resolution = 8; | 1010 | filePara.resolution = 8; |
1011 | } | 1011 | } |
1012 | #endif | 1012 | #endif |
1013 | 1013 | ||
1014 | stereo = filePara.channels; | 1014 | stereo = filePara.channels; |
1015 | flags = O_WRONLY; | 1015 | flags = O_WRONLY; |
1016 | recording = false; | 1016 | recording = false; |
1017 | } else { // we want to record | 1017 | } else { // we want to record |
1018 | 1018 | ||
1019 | #ifdef PDAUDIO //ALSA | 1019 | #ifdef PDAUDIO //ALSA |
1020 | if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "16") | 1020 | if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "16") |
1021 | sampleformat = SND_PCM_FORMAT_S16; | 1021 | sampleformat = SND_PCM_FORMAT_S16; |
1022 | else if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "24") | 1022 | else if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "24") |
1023 | sampleformat = SND_PCM_FORMAT_S24; | 1023 | sampleformat = SND_PCM_FORMAT_S24; |
1024 | else if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "32") | 1024 | else if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "32") |
1025 | sampleformat = SND_PCM_FORMAT_S32; | 1025 | sampleformat = SND_PCM_FORMAT_S32; |
1026 | else | 1026 | else |
1027 | sampleformat = SND_PCM_FORMAT_U8; | 1027 | sampleformat = SND_PCM_FORMAT_U8; |
1028 | 1028 | ||
1029 | #else | 1029 | #else |
1030 | if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "16") | 1030 | if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "16") |
1031 | sampleformat = AFMT_S16_LE; | 1031 | sampleformat = AFMT_S16_LE; |
1032 | else | 1032 | else |
1033 | sampleformat = AFMT_U8; | 1033 | sampleformat = AFMT_U8; |
1034 | 1034 | ||
1035 | if( !compressionCheckBox->isChecked()) { | 1035 | if( !compressionCheckBox->isChecked()) { |
1036 | filePara.format = WAVE_FORMAT_PCM; | 1036 | filePara.format = WAVE_FORMAT_PCM; |
1037 | // odebug << "WAVE_FORMAT_PCM" << oendl; | 1037 | // odebug << "WAVE_FORMAT_PCM" << oendl; |
1038 | } else { | 1038 | } else { |
1039 | filePara.format = WAVE_FORMAT_DVI_ADPCM; | 1039 | filePara.format = WAVE_FORMAT_DVI_ADPCM; |
1040 | sampleformat = AFMT_S16_LE; | 1040 | sampleformat = AFMT_S16_LE; |
1041 | // odebug << "WAVE_FORMAT_DVI_ADPCM" << oendl; | 1041 | // odebug << "WAVE_FORMAT_DVI_ADPCM" << oendl; |
1042 | } | 1042 | } |
1043 | #endif | 1043 | #endif |
1044 | 1044 | ||
1045 | stereo = filePara.channels; | 1045 | stereo = filePara.channels; |
1046 | // filePara.sampleRate = sampleRateComboBox->currentText().toInt( &ok,10);//44100; | 1046 | // filePara.sampleRate = sampleRateComboBox->currentText().toInt( &ok,10);//44100; |
1047 | flags= O_RDWR; | 1047 | flags= O_RDWR; |
1048 | // flags= O_RDONLY; | 1048 | // flags= O_RDONLY; |
1049 | recording = true; | 1049 | recording = true; |
1050 | } | 1050 | } |
1051 | 1051 | ||
1052 | // if(soundDevice) delete soundDevice; | ||
1053 | owarn << "<<<<<<<<<<<<<<<<<<<open dsp " << filePara.sampleRate << " " << filePara.channels << " " << sampleformat << "" << oendl; | 1052 | owarn << "<<<<<<<<<<<<<<<<<<<open dsp " << filePara.sampleRate << " " << filePara.channels << " " << sampleformat << "" << oendl; |
1054 | // owarn << "change waveform settings" << oendl; | 1053 | // owarn << "change waveform settings" << oendl; |
1055 | waveform->changeSettings( filePara.sampleRate, filePara.channels ); | 1054 | waveform->changeSettings( filePara.sampleRate, filePara.channels ); |
1056 | 1055 | ||
1057 | soundDevice = new Device( this, b); //open rec | 1056 | soundDevice = new Device( this, b); //open rec |
1058 | // soundDevice->openDsp(); | 1057 | // soundDevice->openDsp(); |
1059 | soundDevice->reset(); | 1058 | soundDevice->reset(); |
1060 | 1059 | ||
1061 | odebug << "device has been made " << soundDevice->sd << "" << oendl; | 1060 | odebug << "device has been made " << soundDevice->sd << "" << oendl; |
1062 | 1061 | ||
1063 | ////////////////// <<<<<<<<<<<<>>>>>>>>>>>> | 1062 | ////////////////// <<<<<<<<<<<<>>>>>>>>>>>> |
1064 | soundDevice->setDeviceFormat( sampleformat); | 1063 | soundDevice->setDeviceFormat( sampleformat); |
1065 | soundDevice->setDeviceChannels( filePara.channels); | 1064 | soundDevice->setDeviceChannels( filePara.channels); |
1066 | soundDevice->setDeviceRate( filePara.sampleRate); | 1065 | soundDevice->setDeviceRate( filePara.sampleRate); |
1067 | soundDevice->getDeviceFragSize(); | 1066 | soundDevice->getDeviceFragSize(); |
1068 | #ifdef QT_QWS_EBX | 1067 | #ifdef QT_QWS_EBX |
1069 | int frag = FRAGSIZE; | 1068 | int frag = FRAGSIZE; |
1070 | soundDevice->setFragSize( frag); | 1069 | soundDevice->setFragSize( frag); |
1071 | soundDevice->getDeviceFragSize(); | 1070 | soundDevice->getDeviceFragSize(); |
1072 | #endif | 1071 | #endif |
1073 | ///////////////// | 1072 | ///////////////// |
1074 | filePara.sd = soundDevice->sd; | 1073 | filePara.sd = soundDevice->sd; |
1075 | 1074 | ||
1076 | if ( filePara.sd == -1) { | 1075 | if ( filePara.sd == -1) { |
1077 | 1076 | ||
1078 | monitoring = false; | 1077 | monitoring = false; |
1079 | stopped = true; | 1078 | stopped = true; |
1080 | update(); | 1079 | update(); |
1081 | setCaption( tr( "OpieRecord " )+ QString::number(VERSION) ); | 1080 | setCaption( tr( "OpieRecord " )+ QString::number(VERSION) ); |
1082 | return false; | 1081 | return false; |
1083 | } | 1082 | } |
1084 | if(autoMute) | 1083 | if(autoMute) |
1085 | doMute(false); | 1084 | doMute(false); |
1086 | 1085 | ||
1087 | return true; | 1086 | return true; |
1088 | } | 1087 | } |
1089 | 1088 | ||
1090 | 1089 | ||
1091 | bool QtRec::setUpFile() { //setup file for recording | 1090 | bool QtRec::setUpFile() { //setup file for recording |
1092 | // odebug << "Setting up wavfile" << oendl; | ||
1093 | // if(wavFile) delete wavFile; | ||
1094 | wavFile = new WavFile( this, (const QString &)"", | 1091 | wavFile = new WavFile( this, (const QString &)"", |
1095 | true, | 1092 | true, |
1096 | filePara.sampleRate, | 1093 | filePara.sampleRate, |
1097 | filePara.channels, | 1094 | filePara.channels, |
1098 | filePara.resolution, | 1095 | filePara.resolution, |
1099 | filePara.format); | 1096 | filePara.format); |
1100 | 1097 | ||
1101 | filePara.fd = wavFile->wavHandle(); | 1098 | filePara.fd = wavFile->wavHandle(); |
1102 | if(filePara.fd == -1) { | 1099 | if(filePara.fd == -1) { |
1103 | return false; | 1100 | return false; |
1104 | } else { | 1101 | } else { |
1105 | // filePara.channels=1; | ||
1106 | } | 1102 | } |
1107 | return true; | 1103 | return true; |
1108 | } | 1104 | } |
1109 | 1105 | ||
1110 | /// <<<<<<<<<<<<<<<< PLAY >>>>>>>>>>>>>>>>>>> | 1106 | /// <<<<<<<<<<<<<<<< PLAY >>>>>>>>>>>>>>>>>>> |
1111 | bool QtRec::doPlay() { | 1107 | bool QtRec::doPlay() { |
1112 | 1108 | ||
1113 | if( !paused) { | 1109 | if( !paused) { |
1114 | total = 0; | 1110 | total = 0; |
1115 | filePara.numberOfRecordedSeconds = 0; | 1111 | filePara.numberOfRecordedSeconds = 0; |
1116 | } else { | 1112 | } else { |
1117 | paused = false; | 1113 | paused = false; |
1118 | secCount = (int)filePara.numberOfRecordedSeconds; | 1114 | secCount = (int)filePara.numberOfRecordedSeconds; |
1119 | } | 1115 | } |
1120 | playing = true; | 1116 | playing = true; |
1121 | stopped = false; | 1117 | stopped = false; |
1122 | recording = false; | 1118 | recording = false; |
1123 | 1119 | ||
1124 | QString num; | 1120 | QString num; |
1125 | odebug << "Play number of samples " << filePara.numberSamples << "" << oendl; | 1121 | odebug << "Play number of samples " << filePara.numberSamples << "" << oendl; |
1126 | 1122 | ||
1127 | // timeSlider->setRange( 0, filePara.numberSamples); | 1123 | // timeSlider->setRange( 0, filePara.numberSamples); |
1128 | 1124 | ||
1129 | timeString.sprintf("%f", filePara.numberOfRecordedSeconds); | 1125 | timeString.sprintf("%f", filePara.numberOfRecordedSeconds); |
1130 | // timeLabel->setText( timeString+ tr(" seconds")); | 1126 | // timeLabel->setText( timeString+ tr(" seconds")); |
1131 | 1127 | ||
1132 | QString msg; | 1128 | QString msg; |
1133 | msg.sprintf("%d, %d, %d", | 1129 | msg.sprintf("%d, %d, %d", |
1134 | filePara.sampleRate, | 1130 | filePara.sampleRate, |
1135 | filePara.channels, | 1131 | filePara.channels, |
1136 | filePara.resolution); | 1132 | filePara.resolution); |
1137 | #ifdef DEV_VERSION | 1133 | #ifdef DEV_VERSION |
1138 | setCaption( msg); | 1134 | setCaption( msg); |
1139 | #endif | 1135 | #endif |
1140 | 1136 | ||
1141 | startTimer( 1000); | 1137 | startTimer( 1000); |
1142 | #ifdef THREADED | 1138 | #ifdef THREADED |
1143 | pthread_t thread2; | 1139 | pthread_t thread2; |
1144 | pthread_create( &thread2, NULL, (void * (*)(void *))playIt, NULL/* &*/); | 1140 | pthread_create( &thread2, NULL, (void * (*)(void *))playIt, NULL/* &*/); |
1145 | #endif | 1141 | #endif |
1146 | 1142 | ||
1147 | toBeginningButton->setEnabled( false); | 1143 | toBeginningButton->setEnabled( false); |
1148 | toEndButton->setEnabled( false); | 1144 | toEndButton->setEnabled( false); |
1149 | #ifndef THREADED | 1145 | #ifndef THREADED |
1150 | playIt(); | 1146 | playIt(); |
1151 | #endif | 1147 | #endif |
1152 | return true; | 1148 | return true; |
1153 | } | 1149 | } |
1154 | 1150 | ||
1155 | 1151 | ||
1156 | void QtRec::changebitrateCombo(int i) { | 1152 | void QtRec::changebitrateCombo(int i) { |
1157 | Config cfg("OpieRec"); | 1153 | Config cfg("OpieRec"); |
1158 | cfg.setGroup("Settings"); | 1154 | cfg.setGroup("Settings"); |
1159 | int bits = 0; | 1155 | int bits = 0; |
1160 | if( i == 1) { bits = 16; } | 1156 | if( i == 1) { bits = 16; } |
1161 | else if( i == 2) { bits = 24; } | 1157 | else if( i == 2) { bits = 24; } |
1162 | else if( i == 3) { bits = 32; } | 1158 | else if( i == 3) { bits = 32; } |
1163 | else { bits=8; } | 1159 | else { bits=8; } |
1164 | cfg.writeEntry("bitrate", bits); | 1160 | cfg.writeEntry("bitrate", bits); |
1165 | filePara.resolution = bits; | 1161 | filePara.resolution = bits; |
1166 | cfg.write(); | 1162 | cfg.write(); |
1167 | } | 1163 | } |
1168 | 1164 | ||
1169 | void QtRec::changesamplerateCombo(int i) { | 1165 | void QtRec::changesamplerateCombo(int i) { |
1170 | Config cfg("OpieRec"); | 1166 | Config cfg("OpieRec"); |
1171 | cfg.setGroup("Settings"); | 1167 | cfg.setGroup("Settings"); |
1172 | int rate=0; | 1168 | int rate=0; |
1173 | bool ok; | 1169 | bool ok; |
1174 | rate = sampleRateComboBox->text(i).toInt(&ok, 10); | 1170 | rate = sampleRateComboBox->text(i).toInt(&ok, 10); |
1175 | cfg.writeEntry( "samplerate",rate); | 1171 | cfg.writeEntry( "samplerate",rate); |
1176 | filePara.sampleRate=rate; | 1172 | filePara.sampleRate=rate; |
1177 | odebug << "Change sample rate " << rate << "" << oendl; | 1173 | odebug << "Change sample rate " << rate << "" << oendl; |
1178 | cfg.write(); | 1174 | cfg.write(); |
1179 | } | 1175 | } |
1180 | 1176 | ||
1181 | 1177 | ||
1182 | void QtRec::changeDirCombo(int index) { | 1178 | void QtRec::changeDirCombo(int index) { |
1183 | Config cfg("OpieRec"); | 1179 | Config cfg("OpieRec"); |
1184 | cfg.setGroup("Settings"); | 1180 | cfg.setGroup("Settings"); |
1185 | QString sName = directoryComboBox->text(index); | 1181 | QString sName = directoryComboBox->text(index); |
1186 | 1182 | ||
1187 | StorageInfo storageInfo; | 1183 | StorageInfo storageInfo; |
1188 | const QList<FileSystem> &fs = storageInfo.fileSystems(); | 1184 | const QList<FileSystem> &fs = storageInfo.fileSystems(); |
1189 | QListIterator<FileSystem> it ( fs ); | 1185 | QListIterator<FileSystem> it ( fs ); |
1190 | QString storage; | 1186 | QString storage; |
1191 | for( ; it.current(); ++it ){ | 1187 | for( ; it.current(); ++it ){ |
1192 | if( sName == (*it)->name()+" "+ (*it)->path() || | 1188 | if( sName == (*it)->name()+" "+ (*it)->path() || |
1193 | (*it)->name() == sName ) { | 1189 | (*it)->name() == sName ) { |
1194 | const QString path = (*it)->path(); | 1190 | const QString path = (*it)->path(); |
1195 | recDir = path; | 1191 | recDir = path; |
1196 | cfg.writeEntry("directory", recDir); | 1192 | cfg.writeEntry("directory", recDir); |
1197 | odebug << "new rec dir "+recDir << oendl; | 1193 | odebug << "new rec dir "+recDir << oendl; |
1198 | } | 1194 | } |
1199 | } | 1195 | } |
1200 | cfg.write(); | 1196 | cfg.write(); |
1201 | } | 1197 | } |
1202 | 1198 | ||
1203 | 1199 | ||
1204 | void QtRec::changeSizeLimitCombo(int) { | 1200 | void QtRec::changeSizeLimitCombo(int) { |
1205 | Config cfg("OpieRec"); | 1201 | Config cfg("OpieRec"); |
1206 | cfg.setGroup("Settings"); | 1202 | cfg.setGroup("Settings"); |
1207 | cfg.writeEntry("sizeLimit", getCurrentSizeLimit() ); | 1203 | cfg.writeEntry("sizeLimit", getCurrentSizeLimit() ); |
1208 | cfg.write(); | 1204 | cfg.write(); |
1209 | } | 1205 | } |
1210 | 1206 | ||
1211 | void QtRec::newSound() { | 1207 | void QtRec::newSound() { |
1212 | if( !rec()) { | 1208 | if( !rec()) { |
1213 | endRecording(); | 1209 | endRecording(); |
1214 | deleteSound(); | 1210 | deleteSound(); |
1215 | } | 1211 | } |
1216 | } | 1212 | } |
1217 | 1213 | ||
1218 | void QtRec::itClick(QListViewItem *item) { | 1214 | void QtRec::itClick(QListViewItem *item) { |
1219 | currentFile = item->text(0); | 1215 | currentFile = item->text(0); |
1220 | setCaption("OpieRecord "+currentFile); | 1216 | setCaption("OpieRecord "+currentFile); |
1221 | } | 1217 | } |
1222 | 1218 | ||
1223 | void QtRec::deleteSound() { | 1219 | void QtRec::deleteSound() { |
1224 | Config cfg("OpieRec"); | 1220 | Config cfg("OpieRec"); |
1225 | cfg.setGroup("Sounds"); | 1221 | cfg.setGroup("Sounds"); |
1226 | if( ListView1->currentItem() == NULL) | 1222 | if( ListView1->currentItem() == NULL) |
1227 | return; | 1223 | return; |
1228 | // #ifndef DEV_VERSION | ||
1229 | // switch ( QMessageBox::warning(this,tr("Delete"), | ||
1230 | // tr("Do you really want to <font size=+2><B>DELETE</B></font>\nthe selected file?"), | ||
1231 | // tr("Yes"),tr("No"),0,1,1) ) { | ||
1232 | // case 0: | ||
1233 | // #endif | ||
1234 | // { | ||
1235 | QString file = ListView1->currentItem()->text(0); | 1224 | QString file = ListView1->currentItem()->text(0); |
1236 | QString fileName; | 1225 | QString fileName; |
1237 | fileName = cfg.readEntry( file, ""); | 1226 | fileName = cfg.readEntry( file, ""); |
1238 | QFile f( fileName); | 1227 | QFile f( fileName); |
1239 | if( f.exists()) | 1228 | if( f.exists()) |
1240 | if( !f.remove()) | 1229 | if( !f.remove()) |
1241 | QMessageBox::message( tr("Error"), tr("Could not remove file.")); | 1230 | QMessageBox::message( tr("Error"), tr("Could not remove file.")); |
1242 | 1231 | ||
1243 | int nFiles = cfg.readNumEntry( "NumberofFiles",0); | 1232 | int nFiles = cfg.readNumEntry( "NumberofFiles",0); |
1244 | bool found = false; | 1233 | bool found = false; |
1245 | for(int i=0;i<nFiles+1;i++) { | 1234 | for(int i=0;i<nFiles+1;i++) { |
1246 | 1235 | ||
1247 | if( cfg.readEntry( QString::number(i),"").find( file,0,true) != -1) { | 1236 | if( cfg.readEntry( QString::number(i),"").find( file,0,true) != -1) { |
1248 | found = true; | 1237 | found = true; |
1249 | cfg.writeEntry( QString::number(i), cfg.readEntry( QString::number(i+1),"")); | 1238 | cfg.writeEntry( QString::number(i), cfg.readEntry( QString::number(i+1),"")); |
1250 | } | 1239 | } |
1251 | if(found) | 1240 | if(found) |
1252 | cfg.writeEntry( QString::number(i), cfg.readEntry( QString::number(i+1),"")); | 1241 | cfg.writeEntry( QString::number(i), cfg.readEntry( QString::number(i+1),"")); |
1253 | } | 1242 | } |
1254 | 1243 | ||
1255 | cfg.removeEntry( cfg.readEntry( file)); | 1244 | cfg.removeEntry( cfg.readEntry( file)); |
1256 | cfg.removeEntry( file); | 1245 | cfg.removeEntry( file); |
1257 | cfg.writeEntry( "NumberofFiles", nFiles-1); | 1246 | cfg.writeEntry( "NumberofFiles", nFiles-1); |
1258 | cfg.write(); | 1247 | cfg.write(); |
1259 | 1248 | ||
1260 | ListView1->takeItem( ListView1->currentItem() ); | 1249 | ListView1->takeItem( ListView1->currentItem() ); |
1261 | delete ListView1->currentItem(); | 1250 | delete ListView1->currentItem(); |
1262 | 1251 | ||
1263 | ListView1->clear(); | 1252 | ListView1->clear(); |
1264 | ListView1->setSelected( ListView1->firstChild(), true); | 1253 | ListView1->setSelected( ListView1->firstChild(), true); |
1265 | initIconView(); | 1254 | initIconView(); |
1266 | update(); | 1255 | update(); |
1267 | setCaption( tr( "OpieRecord " )); | 1256 | setCaption( tr( "OpieRecord " )); |
1268 | } | 1257 | } |
1269 | 1258 | ||
1270 | void QtRec::keyPressEvent( QKeyEvent *e) { | 1259 | void QtRec::keyPressEvent( QKeyEvent *e) { |
1271 | 1260 | ||
1272 | switch ( e->key() ) { | 1261 | switch ( e->key() ) { |
1273 | // case Key_F1: | 1262 | // case Key_F1: |
1274 | // if(stopped && !recording) | 1263 | // if(stopped && !recording) |
1275 | // newSound(); | 1264 | // newSound(); |
1276 | // else | 1265 | // else |
1277 | // stop(); | 1266 | // stop(); |
1278 | // break; | 1267 | // break; |
1279 | // case Key_F2: { | 1268 | // case Key_F2: { |
1280 | // if( !e->isAutoRepeat()) | 1269 | // if( !e->isAutoRepeat()) |
1281 | // rewindPressed(); | 1270 | // rewindPressed(); |
1282 | // } | 1271 | // } |
1283 | // break; | 1272 | // break; |
1284 | // case Key_F3: { | 1273 | // case Key_F3: { |
1285 | // if( !e->isAutoRepeat()) | 1274 | // if( !e->isAutoRepeat()) |
1286 | // FastforwardPressed(); | 1275 | // FastforwardPressed(); |
1287 | // } | 1276 | // } |
1288 | // break; | 1277 | // break; |
1289 | 1278 | ||
1290 | ////////////////////////////// Zaurus keys | 1279 | ////////////////////////////// Zaurus keys |
1291 | case Key_F9: //activity | 1280 | case Key_F9: //activity |
1292 | break; | 1281 | break; |
1293 | case Key_F10: //contacts | 1282 | case Key_F10: //contacts |
1294 | break; | 1283 | break; |
1295 | case Key_F11: //menu | 1284 | case Key_F11: //menu |
1296 | break; | 1285 | break; |
1297 | case Key_F12: //home | 1286 | case Key_F12: //home |
1298 | break; | 1287 | break; |
1299 | case Key_F13: //mail | 1288 | case Key_F13: //mail |
1300 | break; | 1289 | break; |
1301 | case Key_Space: | 1290 | case Key_Space: |
1302 | break; | 1291 | break; |
1303 | case Key_Delete: | 1292 | case Key_Delete: |
1304 | break; | 1293 | break; |
1305 | case Key_Up: | 1294 | case Key_Up: |
1306 | // stop(); | 1295 | // stop(); |
1307 | break; | 1296 | break; |
1308 | case Key_Down: | 1297 | case Key_Down: |
1309 | // newSound(); | 1298 | // newSound(); |
1310 | break; | 1299 | break; |
1311 | case Key_Left: { | 1300 | case Key_Left: { |
1312 | odebug << "rewinding" << oendl; | 1301 | odebug << "rewinding" << oendl; |
1313 | if( !e->isAutoRepeat()) | 1302 | if( !e->isAutoRepeat()) |
1314 | rewindPressed(); | 1303 | rewindPressed(); |
1315 | } | 1304 | } |
1316 | break; | 1305 | break; |
1317 | case Key_Right: { | 1306 | case Key_Right: { |
1318 | if( !e->isAutoRepeat()) | 1307 | if( !e->isAutoRepeat()) |
1319 | FastforwardPressed(); | 1308 | FastforwardPressed(); |
1320 | } | 1309 | } |
1321 | break; | 1310 | break; |
1322 | } | 1311 | } |
1323 | } | 1312 | } |
1324 | 1313 | ||
1325 | void QtRec::keyReleaseEvent( QKeyEvent *e) { | 1314 | void QtRec::keyReleaseEvent( QKeyEvent *e) { |
1326 | switch ( e->key() ) { | 1315 | switch ( e->key() ) { |
1327 | // case Key_F1: | 1316 | // case Key_F1: |
1328 | // if(stopped && !recording) | 1317 | // if(stopped && !recording) |
1329 | // newSound(); | 1318 | // newSound(); |
1330 | // else | 1319 | // else |
1331 | // stop(); | 1320 | // stop(); |
1332 | // break; | 1321 | // break; |
1333 | // case Key_F2: | 1322 | // case Key_F2: |
1334 | // rewindReleased(); | 1323 | // rewindReleased(); |
1335 | // break; | 1324 | // break; |
1336 | // case Key_F3: | 1325 | // case Key_F3: |
1337 | // FastforwardReleased(); | 1326 | // FastforwardReleased(); |
1338 | // break; | 1327 | // break; |
1339 | 1328 | ||
1340 | ////////////////////////////// Zaurus keys | 1329 | ////////////////////////////// Zaurus keys |
1341 | case Key_F9: //activity | 1330 | case Key_F9: //activity |
1342 | break; | 1331 | break; |
1343 | case Key_F10: //contacts | 1332 | case Key_F10: //contacts |
1344 | break; | 1333 | break; |
1345 | case Key_F11: //menu | 1334 | case Key_F11: //menu |
1346 | break; | 1335 | break; |
1347 | case Key_F12: //home | 1336 | case Key_F12: //home |
1348 | if(stopped) | 1337 | if(stopped) |
1349 | doPlayBtn(); | 1338 | doPlayBtn(); |
1350 | else | 1339 | else |
1351 | stop(); | 1340 | stop(); |
1352 | break; | 1341 | break; |
1353 | case Key_F13: //mail | 1342 | case Key_F13: //mail |
1354 | break; | 1343 | break; |
1355 | case Key_Space: | 1344 | case Key_Space: |
1356 | if(stopped && !recording) | 1345 | if(stopped && !recording) |
1357 | newSound(); | 1346 | newSound(); |
1358 | else | 1347 | else |
1359 | stop(); | 1348 | stop(); |
1360 | break; | 1349 | break; |
1361 | case Key_Delete: | 1350 | case Key_Delete: |
1362 | deleteSound(); | 1351 | deleteSound(); |
1363 | break; | 1352 | break; |
1364 | case Key_Up: | 1353 | case Key_Up: |
1365 | // stop(); | 1354 | // stop(); |
1366 | odebug << "Up" << oendl; | 1355 | odebug << "Up" << oendl; |
1367 | break; | 1356 | break; |
1368 | case Key_Down: | 1357 | case Key_Down: |
1369 | // start(); | 1358 | // start(); |
1370 | // odebug << "Down" << oendl; | 1359 | // odebug << "Down" << oendl; |
1371 | // newSound(); | 1360 | // newSound(); |
1372 | break; | 1361 | break; |
1373 | case Key_Left: | 1362 | case Key_Left: |
1374 | odebug << "Left" << oendl; | 1363 | odebug << "Left" << oendl; |
1375 | rewindReleased(); | 1364 | rewindReleased(); |
1376 | break; | 1365 | break; |
1377 | case Key_Right: | 1366 | case Key_Right: |
1378 | odebug << "Right" << oendl; | 1367 | odebug << "Right" << oendl; |
1379 | FastforwardReleased(); | 1368 | FastforwardReleased(); |
1380 | break; | 1369 | break; |
1381 | } | 1370 | } |
1382 | } | 1371 | } |
1383 | 1372 | ||
1384 | void QtRec::endRecording() { | 1373 | void QtRec::endRecording() { |
1385 | 1374 | ||
1386 | monitoring = false; | 1375 | monitoring = false; |
1387 | recording = false; | 1376 | recording = false; |
1388 | stopped = true; | 1377 | stopped = true; |
1389 | waveform->reset(); | 1378 | waveform->reset(); |
1390 | setRecordButton( false); | 1379 | setRecordButton( false); |
1391 | 1380 | ||
1392 | toBeginningButton->setEnabled( true); | 1381 | toBeginningButton->setEnabled( true); |
1393 | toEndButton->setEnabled( true); | 1382 | toEndButton->setEnabled( true); |
1394 | 1383 | ||
1395 | killTimers(); | 1384 | killTimers(); |
1396 | 1385 | ||
1397 | if(autoMute) | 1386 | if(autoMute) |
1398 | doMute( true); | 1387 | doMute( true); |
1399 | 1388 | ||
1400 | soundDevice->closeDevice( true); | 1389 | soundDevice->closeDevice( true); |
1401 | 1390 | ||
1402 | if( wavFile->track.isOpen()) { | 1391 | if( wavFile->track.isOpen()) { |
1403 | wavFile->adjustHeaders( filePara.fd, filePara.numberSamples); | 1392 | wavFile->adjustHeaders( filePara.fd, filePara.numberSamples); |
1404 | // soundDevice->sd=-1; | ||
1405 | filePara.numberSamples = 0; | 1393 | filePara.numberSamples = 0; |
1406 | // filePara.sd=-1; | ||
1407 | wavFile->closeFile(); | 1394 | wavFile->closeFile(); |
1408 | filePara.fd=0; | 1395 | filePara.fd=0; |
1409 | 1396 | ||
1410 | if( wavFile->isTempFile()) { | 1397 | if( wavFile->isTempFile()) { |
1411 | // move tmp file to regular file | 1398 | // move tmp file to regular file |
1412 | QString cmd; | 1399 | QString cmd; |
1413 | cmd.sprintf("mv "+ wavFile->trackName() + " " + wavFile->currentFileName); | 1400 | cmd.sprintf("mv "+ wavFile->trackName() + " " + wavFile->currentFileName); |
1414 | odebug << "moving tmp file to "+currentFileName << oendl; | 1401 | odebug << "moving tmp file to "+currentFileName << oendl; |
1415 | system( cmd.latin1()); | 1402 | system( cmd.latin1()); |
1416 | } | 1403 | } |
1417 | 1404 | ||
1418 | odebug << "Just moved " + wavFile->currentFileName << oendl; | 1405 | odebug << "Just moved " + wavFile->currentFileName << oendl; |
1419 | Config cfg("OpieRec"); | 1406 | Config cfg("OpieRec"); |
1420 | cfg.setGroup("Sounds"); | 1407 | cfg.setGroup("Sounds"); |
1421 | 1408 | ||
1422 | int nFiles = cfg.readNumEntry( "NumberofFiles",0); | 1409 | int nFiles = cfg.readNumEntry( "NumberofFiles",0); |
1423 | 1410 | ||
1424 | currentFile = QFileInfo( wavFile->currentFileName).fileName(); | 1411 | currentFile = QFileInfo( wavFile->currentFileName).fileName(); |
1425 | currentFile = currentFile.left( currentFile.length() - 4); | 1412 | currentFile = currentFile.left( currentFile.length() - 4); |
1426 | 1413 | ||
1427 | cfg.writeEntry( "NumberofFiles", nFiles + 1); | 1414 | cfg.writeEntry( "NumberofFiles", nFiles + 1); |
1428 | cfg.writeEntry( QString::number( nFiles + 1), currentFile); | 1415 | cfg.writeEntry( QString::number( nFiles + 1), currentFile); |
1429 | cfg.writeEntry( currentFile, wavFile->currentFileName); | 1416 | cfg.writeEntry( currentFile, wavFile->currentFileName); |
1430 | 1417 | ||
1431 | QString time; | 1418 | QString time; |
1432 | time.sprintf("%.2f", filePara.numberOfRecordedSeconds); | 1419 | time.sprintf("%.2f", filePara.numberOfRecordedSeconds); |
1433 | cfg.writeEntry( wavFile->currentFileName, time ); | 1420 | cfg.writeEntry( wavFile->currentFileName, time ); |
1434 | odebug << "writing config numberOfRecordedSeconds "+time << oendl; | 1421 | odebug << "writing config numberOfRecordedSeconds "+time << oendl; |
1435 | 1422 | ||
1436 | cfg.write(); | 1423 | cfg.write(); |
1437 | odebug << "finished recording" << oendl; | 1424 | odebug << "finished recording" << oendl; |
1438 | // timeLabel->setText(""); | 1425 | // timeLabel->setText(""); |
1439 | } | 1426 | } |
1440 | 1427 | ||
1441 | // if(soundDevice) delete soundDevice; | 1428 | // if(soundDevice) delete soundDevice; |
1442 | 1429 | ||
1443 | timeSlider->setValue(0); | 1430 | timeSlider->setValue(0); |
1444 | initIconView(); | 1431 | initIconView(); |
1445 | selectItemByName( currentFile); | 1432 | selectItemByName( currentFile); |
1446 | setCaption( tr( "OpieRecord " )); | 1433 | setCaption( tr( "OpieRecord " )); |
1447 | 1434 | ||
1448 | } | 1435 | } |
1449 | 1436 | ||
1450 | void QtRec::endPlaying() { | 1437 | void QtRec::endPlaying() { |
1451 | monitoring = false; | 1438 | monitoring = false; |
1452 | recording = false; | 1439 | recording = false; |
1453 | playing = false; | 1440 | playing = false; |
1454 | stopped = true; | 1441 | stopped = true; |
1455 | waveform->reset(); | 1442 | waveform->reset(); |
1456 | // errorStop(); | 1443 | // errorStop(); |
1457 | odebug << "end playing" << oendl; | 1444 | odebug << "end playing" << oendl; |
1458 | setRecordButton( false); | 1445 | setRecordButton( false); |
1459 | 1446 | ||
1460 | toBeginningButton->setEnabled( true); | 1447 | toBeginningButton->setEnabled( true); |
1461 | toEndButton->setEnabled( true); | 1448 | toEndButton->setEnabled( true); |
1462 | 1449 | ||
1463 | if(autoMute) | 1450 | if(autoMute) |
1464 | doMute( true); | 1451 | doMute( true); |
1465 | 1452 | ||
1466 | soundDevice->closeDevice( false); | 1453 | soundDevice->closeDevice( false); |
1467 | soundDevice->sd = -1; | 1454 | soundDevice->sd = -1; |
1468 | // if(soundDevice) delete soundDevice; | 1455 | // if(soundDevice) delete soundDevice; |
1469 | odebug << "file and sound device closed" << oendl; | 1456 | odebug << "file and sound device closed" << oendl; |
1470 | // timeLabel->setText(""); | 1457 | // timeLabel->setText(""); |
1471 | total = 0; | 1458 | total = 0; |
1472 | filePara.numberSamples = 0; | 1459 | filePara.numberSamples = 0; |
1473 | filePara.sd = -1; | 1460 | filePara.sd = -1; |
1474 | // wavFile->closeFile(); | 1461 | // wavFile->closeFile(); |
1475 | filePara.fd = 0; | 1462 | filePara.fd = 0; |
1476 | // if(wavFile) delete wavFile; //this crashes | 1463 | // if(wavFile) delete wavFile; //this crashes |
1477 | 1464 | ||
1478 | odebug << "track closed" << oendl; | 1465 | odebug << "track closed" << oendl; |
1479 | killTimers(); | 1466 | killTimers(); |
1480 | // owarn << "reset slider" << oendl; | 1467 | // owarn << "reset slider" << oendl; |
1481 | timeSlider->setValue(0); | 1468 | timeSlider->setValue(0); |
1482 | 1469 | ||
1483 | // if(soundDevice) delete soundDevice; | 1470 | // if(soundDevice) delete soundDevice; |
1484 | 1471 | ||
1485 | } | 1472 | } |
1486 | 1473 | ||
1487 | bool QtRec::openPlayFile() { | 1474 | bool QtRec::openPlayFile() { |
1488 | qWarning("opening file"); | 1475 | qWarning("opening file"); |
1489 | qApp->processEvents(); | 1476 | qApp->processEvents(); |
1490 | if( currentFile.isEmpty()) { | 1477 | if( currentFile.isEmpty()) { |
1491 | QMessageBox::message(tr("Opierec"),tr("Please select file to play")); | 1478 | QMessageBox::message(tr("Opierec"),tr("Please select file to play")); |
1492 | endPlaying(); | 1479 | endPlaying(); |
1493 | return false; | 1480 | return false; |
1494 | } | 1481 | } |
1495 | QString currentFileName; | 1482 | QString currentFileName; |
1496 | Config cfg("OpieRec"); | 1483 | Config cfg("OpieRec"); |
1497 | cfg.setGroup("Sounds"); | 1484 | cfg.setGroup("Sounds"); |
1498 | int nFiles = cfg.readNumEntry( "NumberofFiles", 0); | 1485 | int nFiles = cfg.readNumEntry( "NumberofFiles", 0); |
1499 | for(int i=0;i<nFiles+1;i++) { //look for file | 1486 | for(int i=0;i<nFiles+1;i++) { //look for file |
1500 | if( cfg.readEntry( QString::number(i),"").find( currentFile,0,true) != -1) { | 1487 | if( cfg.readEntry( QString::number(i),"").find( currentFile,0,true) != -1) { |
1501 | currentFileName = cfg.readEntry( currentFile, "" ); | 1488 | currentFileName = cfg.readEntry( currentFile, "" ); |
1502 | odebug << "opening for play: " + currentFileName << oendl; | 1489 | odebug << "opening for play: " + currentFileName << oendl; |
1503 | } | 1490 | } |
1504 | } | 1491 | } |
1505 | wavFile = new WavFile(this, | 1492 | wavFile = new WavFile(this, |
1506 | currentFileName, | 1493 | currentFileName, |
1507 | false); | 1494 | false); |
1508 | filePara.fd = wavFile->wavHandle(); | 1495 | filePara.fd = wavFile->wavHandle(); |
1509 | if(filePara.fd == -1) { | 1496 | if(filePara.fd == -1) { |
1510 | // if(!track.open(IO_ReadOnly)) { | 1497 | // if(!track.open(IO_ReadOnly)) { |
1511 | QString errorMsg = (QString)strerror(errno); | 1498 | QString errorMsg = (QString)strerror(errno); |
1512 | monitoring = false; | 1499 | monitoring = false; |
1513 | setCaption( tr( "OpieRecord " )); | 1500 | setCaption( tr( "OpieRecord " )); |
1514 | QMessageBox::message(tr("Note"), tr("Could not open audio file.\n") | 1501 | QMessageBox::message(tr("Note"), tr("Could not open audio file.\n") |
1515 | + errorMsg + "\n" + currentFile); | 1502 | + errorMsg + "\n" + currentFile); |
1516 | return false; | 1503 | return false; |
1517 | } else { | 1504 | } else { |
1518 | 1505 | ||
1519 | filePara.numberSamples = wavFile->getNumberSamples(); | 1506 | filePara.numberSamples = wavFile->getNumberSamples(); |
1520 | filePara.format = wavFile->getFormat(); | 1507 | filePara.format = wavFile->getFormat(); |
1521 | filePara.sampleRate = wavFile->getSampleRate(); | 1508 | filePara.sampleRate = wavFile->getSampleRate(); |
1522 | filePara.resolution = wavFile->getResolution(); | 1509 | filePara.resolution = wavFile->getResolution(); |
1523 | filePara.channels = wavFile->getChannels(); | 1510 | filePara.channels = wavFile->getChannels(); |
1524 | timeSlider->setPageStep(1); | 1511 | timeSlider->setPageStep(1); |
1525 | monitoring = true; | 1512 | monitoring = true; |
1526 | 1513 | ||
1527 | odebug << "file " << filePara.fd << ", samples " << filePara.numberSamples << " " << filePara.sampleRate << "" << oendl; | 1514 | odebug << "file " << filePara.fd << ", samples " << filePara.numberSamples << " " << filePara.sampleRate << "" << oendl; |
1528 | int sec = (int) (( filePara.numberSamples / filePara.sampleRate) / filePara.channels) / ( filePara.channels*( filePara.resolution/8)); | 1515 | int sec = (int) (( filePara.numberSamples / filePara.sampleRate) / filePara.channels) / ( filePara.channels*( filePara.resolution/8)); |
1529 | 1516 | ||
1530 | // owarn << "seconds " << sec << "" << oendl; | 1517 | // owarn << "seconds " << sec << "" << oendl; |
1531 | 1518 | ||
1532 | timeSlider->setRange(0, filePara.numberSamples ); | 1519 | timeSlider->setRange(0, filePara.numberSamples ); |
1533 | } | 1520 | } |
1534 | 1521 | ||
1535 | return true; | 1522 | return true; |
1536 | } | 1523 | } |
1537 | 1524 | ||
1538 | void QtRec::listPressed( int mouse, QListViewItem *item, const QPoint &, int ) { | 1525 | void QtRec::listPressed( int mouse, QListViewItem *item, const QPoint &, int ) { |
1539 | if(item == NULL ) | 1526 | if(item == NULL ) |
1540 | return; | 1527 | return; |
1541 | switch (mouse) { | 1528 | switch (mouse) { |
1542 | case 1: { | 1529 | case 1: { |
1543 | if( renameBox != 0 ) //tricky | 1530 | if( renameBox != 0 ) //tricky |
1544 | cancelRename(); | 1531 | cancelRename(); |
1545 | 1532 | ||
1546 | currentFile = item->text(0); | 1533 | currentFile = item->text(0); |
1547 | // setCaption( "OpieRecord " + currentFile); | 1534 | // setCaption( "OpieRecord " + currentFile); |
1548 | } | 1535 | } |
1549 | break; | 1536 | break; |
1550 | case 2: | 1537 | case 2: |
1551 | showListMenu(item); | 1538 | showListMenu(item); |
1552 | ListView1->clearSelection(); | 1539 | ListView1->clearSelection(); |
1553 | break; | 1540 | break; |
1554 | }; | 1541 | }; |
1555 | } | 1542 | } |
1556 | 1543 | ||
1557 | void QtRec::showListMenu(QListViewItem * item) { | 1544 | void QtRec::showListMenu(QListViewItem * item) { |
1558 | if(item == NULL) | 1545 | if(item == NULL) |
1559 | return; | 1546 | return; |
1560 | QPopupMenu *m = new QPopupMenu(this); | 1547 | QPopupMenu *m = new QPopupMenu(this); |
1561 | m->insertItem( tr("Play"), this, SLOT( doMenuPlay() )); | 1548 | m->insertItem( tr("Play"), this, SLOT( doMenuPlay() )); |
1562 | if(Ir::supported()) m->insertItem( tr( "Send with Ir" ), this, SLOT( doBeam() )); | 1549 | if(Ir::supported()) m->insertItem( tr( "Send with Ir" ), this, SLOT( doBeam() )); |
1563 | m->insertItem( tr( "Rename" ), this, SLOT( doRename() )); | 1550 | m->insertItem( tr( "Rename" ), this, SLOT( doRename() )); |
1564 | // #if defined (QTOPIA_INTERNAL_FSLP) | 1551 | // #if defined (QTOPIA_INTERNAL_FSLP) |
1565 | // m->insertItem( tr( "Properties" ), this, SLOT( doProperties() )); | 1552 | // m->insertItem( tr( "Properties" ), this, SLOT( doProperties() )); |
1566 | // #endif | 1553 | // #endif |
1567 | m->insertSeparator(); | 1554 | m->insertSeparator(); |
1568 | m->insertItem( tr("Delete"), this, SLOT( deleteSound() ) ); | 1555 | m->insertItem( tr("Delete"), this, SLOT( deleteSound() ) ); |
1569 | m->exec( QCursor::pos() ); | 1556 | m->exec( QCursor::pos() ); |
1570 | qApp->processEvents(); | 1557 | qApp->processEvents(); |
1571 | } | 1558 | } |
1572 | 1559 | ||
1573 | void QtRec::fileBeamFinished( Ir *ir) { | 1560 | void QtRec::fileBeamFinished( Ir *ir) { |
1574 | if(ir) | 1561 | if(ir) |
1575 | QMessageBox::message( tr("Ir Beam out"), tr("Ir sent.") ,tr("Ok") ); | 1562 | QMessageBox::message( tr("Ir Beam out"), tr("Ir sent.") ,tr("Ok") ); |
1576 | 1563 | ||
1577 | } | 1564 | } |
1578 | 1565 | ||
1579 | void QtRec::doBeam() { | 1566 | void QtRec::doBeam() { |
1580 | qApp->processEvents(); | 1567 | qApp->processEvents(); |
1581 | if( ListView1->currentItem() == NULL) | 1568 | if( ListView1->currentItem() == NULL) |
1582 | return; | 1569 | return; |
1583 | Ir ir; | 1570 | Ir ir; |
1584 | if( ir.supported()) { | 1571 | if( ir.supported()) { |
1585 | QString file = ListView1->currentItem()->text(0); | 1572 | QString file = ListView1->currentItem()->text(0); |
1586 | Config cfg("OpieRec"); | 1573 | Config cfg("OpieRec"); |
1587 | cfg.setGroup("Sounds"); | 1574 | cfg.setGroup("Sounds"); |
1588 | 1575 | ||
1589 | int nFiles = cfg.readNumEntry("NumberofFiles",0); | 1576 | int nFiles = cfg.readNumEntry("NumberofFiles",0); |
1590 | 1577 | ||
1591 | for(int i=0;i<nFiles+1;i++) { | 1578 | for(int i=0;i<nFiles+1;i++) { |
1592 | if( cfg.readEntry( QString::number( i),"").find( file, 0, true) != -1) { | 1579 | if( cfg.readEntry( QString::number( i),"").find( file, 0, true) != -1) { |
1593 | QString filePath = cfg.readEntry(file,""); | 1580 | QString filePath = cfg.readEntry(file,""); |
1594 | Ir *file = new Ir(this, "IR"); | 1581 | Ir *file = new Ir(this, "IR"); |
1595 | connect( file, SIGNAL( done(Ir*)), | 1582 | connect( file, SIGNAL( done(Ir*)), |
1596 | this, SLOT( fileBeamFinished(Ir*))); | 1583 | this, SLOT( fileBeamFinished(Ir*))); |
1597 | file->send( filePath, "OPieRec audio file\n" + filePath ); | 1584 | file->send( filePath, "OPieRec audio file\n" + filePath ); |
1598 | } | 1585 | } |
1599 | } | 1586 | } |
1600 | } | 1587 | } |
1601 | } | 1588 | } |
1602 | 1589 | ||
1603 | void QtRec::doMenuPlay() { | 1590 | void QtRec::doMenuPlay() { |
1604 | qApp->processEvents(); | 1591 | qApp->processEvents(); |
1605 | currentFile = ListView1->currentItem()->text(0); | 1592 | currentFile = ListView1->currentItem()->text(0); |
1606 | } | 1593 | } |
1607 | 1594 | ||
1608 | void QtRec::doRename() { | 1595 | void QtRec::doRename() { |
1609 | QRect r = ListView1->itemRect( ListView1->currentItem( )); | 1596 | QRect r = ListView1->itemRect( ListView1->currentItem( )); |
1610 | r = QRect( ListView1->viewportToContents( r.topLeft() ), r.size() ); | 1597 | r = QRect( ListView1->viewportToContents( r.topLeft() ), r.size() ); |
1611 | r.setX( ListView1->contentsX() ); | 1598 | r.setX( ListView1->contentsX() ); |
1612 | if ( r.width() > ListView1->visibleWidth() ) | 1599 | if ( r.width() > ListView1->visibleWidth() ) |
1613 | r.setWidth( ListView1->visibleWidth() ); | 1600 | r.setWidth( ListView1->visibleWidth() ); |
1614 | 1601 | ||
1615 | renameBox = new QLineEdit( ListView1->viewport(), "qt_renamebox" ); | 1602 | renameBox = new QLineEdit( ListView1->viewport(), "qt_renamebox" ); |
1616 | renameBox->setFrame(true); | 1603 | renameBox->setFrame(true); |
1617 | 1604 | ||
1618 | renameBox->setText( ListView1->currentItem()->text(0) ); | 1605 | renameBox->setText( ListView1->currentItem()->text(0) ); |
1619 | 1606 | ||
1620 | renameBox->selectAll(); | 1607 | renameBox->selectAll(); |
1621 | renameBox->installEventFilter( this ); | 1608 | renameBox->installEventFilter( this ); |
1622 | ListView1->addChild( renameBox, r.x(), r.y() ); | 1609 | ListView1->addChild( renameBox, r.x(), r.y() ); |
1623 | renameBox->resize( r.size() ); | 1610 | renameBox->resize( r.size() ); |
1624 | ListView1->viewport()->setFocusProxy( renameBox ); | 1611 | ListView1->viewport()->setFocusProxy( renameBox ); |
1625 | renameBox->setFocus(); | 1612 | renameBox->setFocus(); |
1626 | renameBox->show(); | 1613 | renameBox->show(); |
1627 | 1614 | ||
1628 | } | 1615 | } |
1629 | 1616 | ||
1630 | void QtRec::okRename() { | 1617 | void QtRec::okRename() { |
1631 | odebug << renameBox->text() << oendl; | 1618 | odebug << renameBox->text() << oendl; |
1632 | QString filename = renameBox->text(); | 1619 | QString filename = renameBox->text(); |
1633 | cancelRename(); | 1620 | cancelRename(); |
1634 | 1621 | ||
1635 | if( ListView1->currentItem() == NULL) | 1622 | if( ListView1->currentItem() == NULL) |
1636 | return; | 1623 | return; |
1637 | 1624 | ||
1638 | Config cfg("OpieRec"); | 1625 | Config cfg("OpieRec"); |
1639 | cfg.setGroup("Sounds"); | 1626 | cfg.setGroup("Sounds"); |
1640 | 1627 | ||
1641 | QString file = ListView1->currentItem()->text(0); | 1628 | QString file = ListView1->currentItem()->text(0); |
1642 | 1629 | ||
1643 | odebug << "filename is " + filename << oendl; | 1630 | odebug << "filename is " + filename << oendl; |
1644 | 1631 | ||
1645 | int nFiles = cfg.readNumEntry("NumberofFiles",0); | 1632 | int nFiles = cfg.readNumEntry("NumberofFiles",0); |
1646 | 1633 | ||
1647 | for(int i=0;i<nFiles+1;i++) { //look for file | 1634 | for(int i=0;i<nFiles+1;i++) { //look for file |
1648 | if( cfg.readEntry( QString::number(i),"").find(file,0,true) != -1) { | 1635 | if( cfg.readEntry( QString::number(i),"").find(file,0,true) != -1) { |
1649 | 1636 | ||
1650 | QString filePath = cfg.readEntry(file,""); | 1637 | QString filePath = cfg.readEntry(file,""); |
1651 | 1638 | ||
1652 | cfg.writeEntry( QString::number(i), filename ); | 1639 | cfg.writeEntry( QString::number(i), filename ); |
1653 | cfg.writeEntry( filename, filePath ); | 1640 | cfg.writeEntry( filename, filePath ); |
1654 | cfg.removeEntry( file); | 1641 | cfg.removeEntry( file); |
1655 | cfg.write(); | 1642 | cfg.write(); |
1656 | } | 1643 | } |
1657 | } | 1644 | } |
1658 | 1645 | ||
1659 | ListView1->takeItem( ListView1->currentItem() ); | 1646 | ListView1->takeItem( ListView1->currentItem() ); |
1660 | delete ListView1->currentItem(); | 1647 | delete ListView1->currentItem(); |
1661 | ListView1->clear(); | 1648 | ListView1->clear(); |
1662 | initIconView(); | 1649 | initIconView(); |
1663 | update(); | 1650 | update(); |
1664 | } | 1651 | } |
1665 | 1652 | ||
1666 | void QtRec::cancelRename() { | 1653 | void QtRec::cancelRename() { |
1667 | bool resetFocus = ListView1->viewport()->focusProxy() == renameBox; | 1654 | bool resetFocus = ListView1->viewport()->focusProxy() == renameBox; |
1668 | delete renameBox; | 1655 | delete renameBox; |
1669 | renameBox = 0; | 1656 | renameBox = 0; |
1670 | if ( resetFocus ) { | 1657 | if ( resetFocus ) { |
1671 | ListView1->viewport()->setFocusProxy( ListView1 ); | 1658 | ListView1->viewport()->setFocusProxy( ListView1 ); |
1672 | ListView1->setFocus(); | 1659 | ListView1->setFocus(); |
1673 | } | 1660 | } |
1674 | } | 1661 | } |
1675 | 1662 | ||
1676 | bool QtRec::eventFilter( QObject * o, QEvent * e ) { | 1663 | bool QtRec::eventFilter( QObject * o, QEvent * e ) { |
1677 | if ( o->inherits( "QLineEdit" ) ) { | 1664 | if ( o->inherits( "QLineEdit" ) ) { |
1678 | if ( e->type() == QEvent::KeyPress ) { | 1665 | if ( e->type() == QEvent::KeyPress ) { |
1679 | QKeyEvent *ke = (QKeyEvent*)e; | 1666 | QKeyEvent *ke = (QKeyEvent*)e; |
1680 | if ( ke->key() == Key_Return || | 1667 | if ( ke->key() == Key_Return || |
1681 | ke->key() == Key_Enter ) { | 1668 | ke->key() == Key_Enter ) { |
1682 | okRename(); | 1669 | okRename(); |
1683 | return true; | 1670 | return true; |
1684 | } else if ( ke->key() == Key_Escape ) { | 1671 | } else if ( ke->key() == Key_Escape ) { |
1685 | cancelRename(); | 1672 | cancelRename(); |
1686 | return true; | 1673 | return true; |
1687 | } | 1674 | } |
1688 | } else if ( e->type() == QEvent::FocusOut ) { | 1675 | } else if ( e->type() == QEvent::FocusOut ) { |
1689 | cancelRename(); | 1676 | cancelRename(); |
1690 | return true; | 1677 | return true; |
1691 | } | 1678 | } |
1692 | } | 1679 | } |
1693 | return QWidget::eventFilter( o, e ); | 1680 | return QWidget::eventFilter( o, e ); |
1694 | } | 1681 | } |
1695 | 1682 | ||
1696 | 1683 | ||
1697 | int QtRec::getCurrentSizeLimit() { | 1684 | int QtRec::getCurrentSizeLimit() { |
1698 | return sizeLimitCombo->currentItem() * 5; | 1685 | return sizeLimitCombo->currentItem() * 5; |
1699 | } | 1686 | } |
1700 | 1687 | ||
1701 | void QtRec::timerBreak() { | 1688 | void QtRec::timerBreak() { |
1702 | endPlaying(); | 1689 | endPlaying(); |
1703 | } | 1690 | } |
1704 | 1691 | ||
1705 | void QtRec::doVolMuting(bool b) { | 1692 | void QtRec::doVolMuting(bool b) { |
1706 | Config cfg( "qpe" ); | 1693 | Config cfg( "qpe" ); |
1707 | cfg. setGroup( "Volume" ); | 1694 | cfg. setGroup( "Volume" ); |
1708 | cfg.writeEntry( "Mute",b); | 1695 | cfg.writeEntry( "Mute",b); |
1709 | cfg.write(); | 1696 | cfg.write(); |
1710 | QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << b; | 1697 | QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << b; |
1711 | } | 1698 | } |
1712 | 1699 | ||
1713 | void QtRec::doMicMuting(bool b) { | 1700 | void QtRec::doMicMuting(bool b) { |
1714 | // odebug << "mic mute" << oendl; | 1701 | // odebug << "mic mute" << oendl; |
1715 | Config cfg( "qpe" ); | 1702 | Config cfg( "qpe" ); |
1716 | cfg. setGroup( "Volume" ); | 1703 | cfg. setGroup( "Volume" ); |
1717 | cfg.writeEntry( "MicMute",b); | 1704 | cfg.writeEntry( "MicMute",b); |
1718 | cfg.write(); | 1705 | cfg.write(); |
1719 | QCopEnvelope( "QPE/System", "micChange(bool)" ) << b; | 1706 | QCopEnvelope( "QPE/System", "micChange(bool)" ) << b; |
1720 | } | 1707 | } |
1721 | 1708 | ||
1722 | void QtRec::compressionSelected(bool b) { | 1709 | void QtRec::compressionSelected(bool b) { |
1723 | Config cfg("OpieRec"); | 1710 | Config cfg("OpieRec"); |
1724 | cfg.setGroup("Settings"); | 1711 | cfg.setGroup("Settings"); |
1725 | cfg.writeEntry("wavCompression", b); | 1712 | cfg.writeEntry("wavCompression", b); |
1726 | cfg.writeEntry("bitrate", 16); | 1713 | cfg.writeEntry("bitrate", 16); |
1727 | filePara.resolution = 16; | 1714 | filePara.resolution = 16; |
1728 | cfg.write(); | 1715 | cfg.write(); |
1729 | 1716 | ||
1730 | if(b) { | 1717 | if(b) { |
1731 | qWarning("set adpcm"); | 1718 | qWarning("set adpcm"); |
1732 | bitRateComboBox->setCurrentItem( 1); | 1719 | bitRateComboBox->setCurrentItem( 1); |
1733 | bitRateComboBox->setEnabled( false); | 1720 | bitRateComboBox->setEnabled( false); |
1734 | filePara.resolution = 16; | 1721 | filePara.resolution = 16; |
1735 | } else{ | 1722 | } else{ |
1736 | bitRateComboBox->setEnabled( true); | 1723 | bitRateComboBox->setEnabled( true); |
1737 | } | 1724 | } |
1738 | } | 1725 | } |
1739 | 1726 | ||
1740 | long QtRec::checkDiskSpace(const QString &path) { | 1727 | long QtRec::checkDiskSpace(const QString &path) { |
1741 | 1728 | ||
1742 | struct statfs fs; | 1729 | struct statfs fs; |
1743 | 1730 | ||
1744 | if ( !statfs( path.latin1(), &fs ) ) { | 1731 | if ( !statfs( path.latin1(), &fs ) ) { |
1745 | 1732 | ||
1746 | int blkSize = fs.f_bsize; | 1733 | int blkSize = fs.f_bsize; |
1747 | int availBlks = fs.f_bavail; | 1734 | int availBlks = fs.f_bavail; |
1748 | 1735 | ||
1749 | long mult = blkSize / 1024; | 1736 | long mult = blkSize / 1024; |
1750 | long div = 1024 / blkSize; | 1737 | long div = 1024 / blkSize; |
1751 | 1738 | ||
1752 | if ( !mult ) mult = 1; | 1739 | if ( !mult ) mult = 1; |
1753 | if ( !div ) div = 1; | 1740 | if ( !div ) div = 1; |
1754 | 1741 | ||
1755 | return availBlks * mult / div; | 1742 | return availBlks * mult / div; |
1756 | } | 1743 | } |
1757 | return -1; | 1744 | return -1; |
1758 | } | 1745 | } |
1759 | 1746 | ||
1760 | // short f_fstyp; /* File system type */ | 1747 | // short f_fstyp; /* File system type */ |
1761 | // long f_bsize; /* Block size */ | 1748 | // long f_bsize; /* Block size */ |
1762 | // long f_frsize; /* Fragment size */ | 1749 | // long f_frsize; /* Fragment size */ |
1763 | // long f_blocks; /* Total number of blocks*/ | 1750 | // long f_blocks; /* Total number of blocks*/ |
1764 | // long f_bfree; /* Count of free blocks */ | 1751 | // long f_bfree; /* Count of free blocks */ |
1765 | // long f_files; /* Total number of file nodes */ | 1752 | // long f_files; /* Total number of file nodes */ |
1766 | // long f_ffree; /* Count of free file nodes */ | 1753 | // long f_ffree; /* Count of free file nodes */ |
1767 | // char f_fname[6]; /* Volumename */ | 1754 | // char f_fname[6]; /* Volumename */ |
1768 | // char f_fpack[6]; /* Pack name */ | 1755 | // char f_fpack[6]; /* Pack name */ |
1769 | 1756 | ||
1770 | void QtRec::receive( const QCString &msg, const QByteArray & ) { | 1757 | void QtRec::receive( const QCString &msg, const QByteArray & ) { |
1771 | odebug << "Voicerecord received message "+msg << oendl; | 1758 | odebug << "Voicerecord received message "+msg << oendl; |
1772 | 1759 | ||
1773 | } | 1760 | } |
1774 | 1761 | ||
1775 | 1762 | ||
1776 | ///////////////////////////// timerEvent | 1763 | ///////////////////////////// timerEvent |
1777 | void QtRec::timerEvent( QTimerEvent * ) { | 1764 | void QtRec::timerEvent( QTimerEvent * ) { |
1778 | 1765 | ||
1779 | // if(!recording) | 1766 | // if(!recording) |
1780 | // timeSlider->setValue( secCount); | 1767 | // timeSlider->setValue( secCount); |
1781 | // else | 1768 | // else |
1782 | // timeSlider->setValue( filePara.numberOfRecordedSeconds); | 1769 | // timeSlider->setValue( filePara.numberOfRecordedSeconds); |
1783 | 1770 | ||
1784 | if( stopped && playing) { | 1771 | if( stopped && playing) { |
1785 | stop(); | 1772 | stop(); |
1786 | } | 1773 | } |
1787 | 1774 | ||
1788 | if( stopped && recording ){ | 1775 | if( stopped && recording ){ |
1789 | stop(); | 1776 | stop(); |
1790 | } | 1777 | } |
1791 | 1778 | ||
1792 | if( recording && filePara.SecondsToRecord < secCount && filePara.SecondsToRecord != 0) { | 1779 | if( recording && filePara.SecondsToRecord < secCount && filePara.SecondsToRecord != 0) { |
1793 | stop(); | 1780 | stop(); |
1794 | } | 1781 | } |
1795 | 1782 | ||
1796 | odebug << "" << secCount << "" << oendl; | 1783 | odebug << "" << secCount << "" << oendl; |
1797 | QString timeString; | 1784 | QString timeString; |
1798 | 1785 | ||
1799 | timeString.sprintf("%d", secCount); | 1786 | timeString.sprintf("%d", secCount); |
1800 | // timeLabel->setText( timeString + " seconds"); | 1787 | // timeLabel->setText( timeString + " seconds"); |
1801 | 1788 | ||
1802 | secCount++; | 1789 | secCount++; |
1803 | } | 1790 | } |
1804 | 1791 | ||
1805 | void QtRec::changeTimeSlider(int index) { | 1792 | void QtRec::changeTimeSlider(int index) { |
1806 | if( ListView1->currentItem() == 0 || !wavFile->track.isOpen()) return; | 1793 | if( ListView1->currentItem() == 0 || !wavFile->track.isOpen()) return; |
1807 | odebug << "Slider moved to " << index << "" << oendl; | 1794 | odebug << "Slider moved to " << index << "" << oendl; |
1808 | paused = true; | 1795 | paused = true; |
1809 | stopped = true; | 1796 | stopped = true; |
1810 | 1797 | ||
1811 | sliderPos=index; | 1798 | sliderPos=index; |
1812 | 1799 | ||
1813 | QString timeString; | 1800 | QString timeString; |
1814 | filePara.numberOfRecordedSeconds = (float)sliderPos / (float)filePara.sampleRate * (float)2; | 1801 | filePara.numberOfRecordedSeconds = (float)sliderPos / (float)filePara.sampleRate * (float)2; |
1815 | timeString.sprintf( "%.2f", filePara.numberOfRecordedSeconds); | 1802 | timeString.sprintf( "%.2f", filePara.numberOfRecordedSeconds); |
1816 | secCount = (int)filePara.numberOfRecordedSeconds; | 1803 | secCount = (int)filePara.numberOfRecordedSeconds; |
1817 | // timeLabel->setText( timeString + tr(" seconds")); | 1804 | // timeLabel->setText( timeString + tr(" seconds")); |
1818 | } | 1805 | } |
1819 | 1806 | ||
1820 | void QtRec::timeSliderPressed() { | 1807 | void QtRec::timeSliderPressed() { |
1821 | if( ListView1->currentItem() == 0) return; | 1808 | if( ListView1->currentItem() == 0) return; |
1822 | odebug << "slider pressed" << oendl; | 1809 | odebug << "slider pressed" << oendl; |
1823 | paused = true; | 1810 | paused = true; |
1824 | stopped = true; | 1811 | stopped = true; |
1825 | } | 1812 | } |
1826 | 1813 | ||
1827 | void QtRec::timeSliderReleased() { | 1814 | void QtRec::timeSliderReleased() { |
1828 | if( ListView1->currentItem() == 0) return; | 1815 | if( ListView1->currentItem() == 0) return; |
1829 | sliderPos = timeSlider->value(); | 1816 | sliderPos = timeSlider->value(); |
1830 | 1817 | ||
1831 | odebug << "slider released " << sliderPos << "" << oendl; | 1818 | odebug << "slider released " << sliderPos << "" << oendl; |
1832 | stopped = false; | 1819 | stopped = false; |
1833 | int newPos = lseek( filePara.fd, sliderPos, SEEK_SET); | 1820 | int newPos = lseek( filePara.fd, sliderPos, SEEK_SET); |
1834 | total = newPos*4; | 1821 | total = newPos*4; |
1835 | filePara.numberOfRecordedSeconds = (float)sliderPos / (float)filePara.sampleRate * (float)2; | 1822 | filePara.numberOfRecordedSeconds = (float)sliderPos / (float)filePara.sampleRate * (float)2; |
1836 | 1823 | ||
1837 | doPlay(); | 1824 | doPlay(); |
1838 | } | 1825 | } |
1839 | 1826 | ||
1840 | void QtRec::rewindPressed() { | 1827 | void QtRec::rewindPressed() { |
1841 | if( ListView1->currentItem() == 0) return; | 1828 | if( ListView1->currentItem() == 0) return; |
1842 | if( !wavFile->track.isOpen()) { | 1829 | if( !wavFile->track.isOpen()) { |
1843 | if( !openPlayFile() ) | 1830 | if( !openPlayFile() ) |
1844 | return; | 1831 | return; |
1845 | else | 1832 | else |
1846 | if( !setupAudio( false)) | 1833 | if( !setupAudio( false)) |
1847 | return; | 1834 | return; |
1848 | } else { | 1835 | } else { |
1849 | killTimers(); | 1836 | killTimers(); |
1850 | paused = true; | 1837 | paused = true; |
1851 | stopped = true; | 1838 | stopped = true; |
1852 | rewindTimer->start( 50, false); | 1839 | rewindTimer->start( 50, false); |
1853 | } | 1840 | } |
1854 | } | 1841 | } |
1855 | 1842 | ||
1856 | void QtRec::rewindTimerTimeout() { | 1843 | void QtRec::rewindTimerTimeout() { |
1857 | int sliderValue = timeSlider->value(); | 1844 | int sliderValue = timeSlider->value(); |
1858 | sliderValue = sliderValue - ( filePara.numberSamples / 100); | 1845 | sliderValue = sliderValue - ( filePara.numberSamples / 100); |
1859 | // if(toBeginningButton->isDown()) | 1846 | // if(toBeginningButton->isDown()) |
1860 | timeSlider->setValue( sliderValue ) ; | 1847 | timeSlider->setValue( sliderValue ) ; |
1861 | odebug << "" << sliderValue << "" << oendl; | 1848 | odebug << "" << sliderValue << "" << oendl; |
1862 | QString timeString; | 1849 | QString timeString; |
1863 | filePara.numberOfRecordedSeconds = (float)sliderValue / (float)filePara.sampleRate * (float)2; | 1850 | filePara.numberOfRecordedSeconds = (float)sliderValue / (float)filePara.sampleRate * (float)2; |
1864 | timeString.sprintf( "%.2f", filePara.numberOfRecordedSeconds); | 1851 | timeString.sprintf( "%.2f", filePara.numberOfRecordedSeconds); |
1865 | // timeLabel->setText( timeString+ tr(" seconds")); | 1852 | // timeLabel->setText( timeString+ tr(" seconds")); |
1866 | } | 1853 | } |
1867 | 1854 | ||
1868 | void QtRec::rewindReleased() { | 1855 | void QtRec::rewindReleased() { |
1869 | rewindTimer->stop(); | 1856 | rewindTimer->stop(); |
1870 | if( wavFile->track.isOpen()) { | 1857 | if( wavFile->track.isOpen()) { |
1871 | sliderPos=timeSlider->value(); | 1858 | sliderPos=timeSlider->value(); |
1872 | stopped = false; | 1859 | stopped = false; |
1873 | int newPos = lseek( filePara.fd, sliderPos, SEEK_SET); | 1860 | int newPos = lseek( filePara.fd, sliderPos, SEEK_SET); |
1874 | total = newPos * 4; | 1861 | total = newPos * 4; |
1875 | odebug << "rewind released " << total << "" << oendl; | 1862 | odebug << "rewind released " << total << "" << oendl; |
1876 | startTimer( 1000); | 1863 | startTimer( 1000); |
1877 | doPlay(); | 1864 | doPlay(); |
1878 | } | 1865 | } |
1879 | } | 1866 | } |
1880 | 1867 | ||
1881 | void QtRec::FastforwardPressed() { | 1868 | void QtRec::FastforwardPressed() { |
1882 | if( ListView1->currentItem() == 0) return; | 1869 | if( ListView1->currentItem() == 0) return; |
1883 | if( !wavFile->track.isOpen()) | 1870 | if( !wavFile->track.isOpen()) |
1884 | if( !openPlayFile() ) | 1871 | if( !openPlayFile() ) |
1885 | return; | 1872 | return; |
1886 | else | 1873 | else |
1887 | if( !setupAudio( false)) | 1874 | if( !setupAudio( false)) |
1888 | return; | 1875 | return; |
1889 | killTimers(); | 1876 | killTimers(); |
1890 | 1877 | ||
1891 | paused = true; | 1878 | paused = true; |
1892 | stopped = true; | 1879 | stopped = true; |
1893 | forwardTimer->start(50, false); | 1880 | forwardTimer->start(50, false); |
1894 | } | 1881 | } |
1895 | 1882 | ||
1896 | 1883 | ||
1897 | void QtRec::forwardTimerTimeout() { | 1884 | void QtRec::forwardTimerTimeout() { |
1898 | int sliderValue = timeSlider->value(); | 1885 | int sliderValue = timeSlider->value(); |
1899 | sliderValue = sliderValue + ( filePara.numberSamples / 100); | 1886 | sliderValue = sliderValue + ( filePara.numberSamples / 100); |
1900 | 1887 | ||
1901 | // if(toEndButton->isDown()) | 1888 | // if(toEndButton->isDown()) |
1902 | timeSlider->setValue( sliderValue); | 1889 | timeSlider->setValue( sliderValue); |
1903 | 1890 | ||
1904 | QString timeString; | 1891 | QString timeString; |
1905 | filePara.numberOfRecordedSeconds = (float)sliderValue / (float)filePara.sampleRate * (float)2; | 1892 | filePara.numberOfRecordedSeconds = (float)sliderValue / (float)filePara.sampleRate * (float)2; |
1906 | timeString.sprintf( "%.2f", filePara.numberOfRecordedSeconds); | 1893 | timeString.sprintf( "%.2f", filePara.numberOfRecordedSeconds); |
1907 | // timeLabel->setText( timeString+ tr(" seconds")); | 1894 | // timeLabel->setText( timeString+ tr(" seconds")); |
1908 | } | 1895 | } |
1909 | 1896 | ||
1910 | void QtRec::FastforwardReleased() { | 1897 | void QtRec::FastforwardReleased() { |
1911 | forwardTimer->stop(); | 1898 | forwardTimer->stop(); |
1912 | if( wavFile->track.isOpen()) { | 1899 | if( wavFile->track.isOpen()) { |
1913 | sliderPos=timeSlider->value(); | 1900 | sliderPos=timeSlider->value(); |
1914 | stopped = false; | 1901 | stopped = false; |
1915 | int newPos = lseek( filePara.fd, sliderPos, SEEK_SET); | 1902 | int newPos = lseek( filePara.fd, sliderPos, SEEK_SET); |
1916 | total = newPos * 4; | 1903 | total = newPos * 4; |
1917 | filePara.numberOfRecordedSeconds = (float)sliderPos / (float)filePara.sampleRate * (float)2; | 1904 | filePara.numberOfRecordedSeconds = (float)sliderPos / (float)filePara.sampleRate * (float)2; |
1918 | startTimer( 1000); | 1905 | startTimer( 1000); |
1919 | doPlay(); | 1906 | doPlay(); |
1920 | } | 1907 | } |
1921 | } | 1908 | } |
1922 | 1909 | ||
1923 | 1910 | ||
1924 | QString QtRec::getStorage(const QString &fileName) { | 1911 | QString QtRec::getStorage(const QString &fileName) { |
1925 | 1912 | ||
1926 | StorageInfo storageInfo; | 1913 | StorageInfo storageInfo; |
1927 | const QList<FileSystem> &fs = storageInfo.fileSystems(); | 1914 | const QList<FileSystem> &fs = storageInfo.fileSystems(); |
1928 | QListIterator<FileSystem> it ( fs ); | 1915 | QListIterator<FileSystem> it ( fs ); |
1929 | QString storage; | 1916 | QString storage; |
1930 | for( ; it.current(); ++it ){ | 1917 | for( ; it.current(); ++it ){ |
1931 | const QString name = ( *it)->name(); | 1918 | const QString name = ( *it)->name(); |
1932 | const QString path = ( *it)->path(); | 1919 | const QString path = ( *it)->path(); |
1933 | const QString disk = ( *it)->disk(); | 1920 | const QString disk = ( *it)->disk(); |
1934 | if( fileName.find( path,0,true) != -1) | 1921 | if( fileName.find( path,0,true) != -1) |
1935 | storage = name; | 1922 | storage = name; |
1936 | // const QString options = (*it)->options(); | 1923 | // const QString options = (*it)->options(); |
1937 | // if( name.find( tr("Internal"),0,true) == -1) { | 1924 | // if( name.find( tr("Internal"),0,true) == -1) { |
1938 | // storageComboBox->insertItem( name +" -> "+disk); | 1925 | // storageComboBox->insertItem( name +" -> "+disk); |
1939 | // odebug << name << oendl; | 1926 | // odebug << name << oendl; |
1940 | } | 1927 | } |
1941 | return storage; | 1928 | return storage; |
1942 | // struct mntent *me; | 1929 | // struct mntent *me; |
1943 | // // if(fileName == "/etc/mtab") { | 1930 | // // if(fileName == "/etc/mtab") { |
1944 | // FILE *mntfp = setmntent( fileName.latin1(), "r" ); | 1931 | // FILE *mntfp = setmntent( fileName.latin1(), "r" ); |
1945 | // if ( mntfp ) { | 1932 | // if ( mntfp ) { |
1946 | // while ( (me = getmntent( mntfp )) != 0 ) { | 1933 | // while ( (me = getmntent( mntfp )) != 0 ) { |
1947 | // QString filesystemType = me->mnt_type; | 1934 | // QString filesystemType = me->mnt_type; |
1948 | 1935 | ||
1949 | // } | 1936 | // } |
1950 | // } | 1937 | // } |
1951 | // endmntent( mntfp ); | 1938 | // endmntent( mntfp ); |
1952 | } | 1939 | } |
1953 | 1940 | ||
1954 | void QtRec::setRecordButton(bool b) { | 1941 | void QtRec::setRecordButton(bool b) { |
1955 | 1942 | ||
1956 | if(b) { //about to record or play | 1943 | if(b) { //about to record or play |
1957 | 1944 | ||
1958 | Rec_PushButton->setDown( true); | 1945 | Rec_PushButton->setDown( true); |
1959 | QPixmap image3( ( const char** ) image3_data ); | 1946 | QPixmap image3( ( const char** ) image3_data ); |
1960 | Stop_PushButton->setPixmap( image3 ); | 1947 | Stop_PushButton->setPixmap( image3 ); |
1961 | if(Stop_PushButton->isDown()) | 1948 | if(Stop_PushButton->isDown()) |
1962 | Stop_PushButton->setDown( true); | 1949 | Stop_PushButton->setDown( true); |
1963 | // playLabel2->setText( tr("Stop") ); | 1950 | // playLabel2->setText( tr("Stop") ); |
1964 | 1951 | ||
1965 | } else { //about to stop | 1952 | } else { //about to stop |
1966 | 1953 | ||
1967 | QPixmap image4( ( const char** ) image4_data ); | 1954 | QPixmap image4( ( const char** ) image4_data ); |
1968 | Stop_PushButton->setPixmap( image4); | 1955 | Stop_PushButton->setPixmap( image4); |
1969 | if(Stop_PushButton->isDown()) | 1956 | if(Stop_PushButton->isDown()) |
1970 | Stop_PushButton->setDown( false); | 1957 | Stop_PushButton->setDown( false); |
1971 | // playLabel2->setText( tr("Play") ); | 1958 | // playLabel2->setText( tr("Play") ); |
1972 | if(Rec_PushButton->isDown()) | 1959 | if(Rec_PushButton->isDown()) |
1973 | Rec_PushButton->setDown( false); | 1960 | Rec_PushButton->setDown( false); |
1974 | } | 1961 | } |
1975 | } | 1962 | } |
1976 | 1963 | ||
1977 | void QtRec::fillDirectoryCombo() { | 1964 | void QtRec::fillDirectoryCombo() { |
1978 | if( directoryComboBox->count() > 0) | 1965 | if( directoryComboBox->count() > 0) |
1979 | directoryComboBox->clear(); | 1966 | directoryComboBox->clear(); |
1980 | int index = 0; | 1967 | int index = 0; |
1981 | Config cfg("OpieRec"); | 1968 | Config cfg("OpieRec"); |
1982 | cfg.setGroup("Settings"); | 1969 | cfg.setGroup("Settings"); |
1983 | QString dir = cfg.readEntry("directory", "/"); | 1970 | QString dir = cfg.readEntry("directory", "/"); |
1984 | StorageInfo storageInfo; | 1971 | StorageInfo storageInfo; |
1985 | const QList<FileSystem> &fs = storageInfo.fileSystems(); | 1972 | const QList<FileSystem> &fs = storageInfo.fileSystems(); |
1986 | QListIterator<FileSystem> it ( fs ); | 1973 | QListIterator<FileSystem> it ( fs ); |
1987 | QString storage; | 1974 | QString storage; |
1988 | for( ; it.current(); ++it ){ | 1975 | for( ; it.current(); ++it ){ |
1989 | const QString name = ( *it)->name(); | 1976 | const QString name = ( *it)->name(); |
1990 | const QString path = ( *it)->path(); | 1977 | const QString path = ( *it)->path(); |
1991 | // directoryComboBox->insertItem(name+" "+path); | 1978 | // directoryComboBox->insertItem(name+" "+path); |
1992 | directoryComboBox->insertItem(name); | 1979 | directoryComboBox->insertItem(name); |
1993 | if( path == dir) | 1980 | if( path == dir) |
1994 | directoryComboBox->setCurrentItem( index); | 1981 | directoryComboBox->setCurrentItem( index); |
1995 | index++; | 1982 | index++; |
1996 | } | 1983 | } |
1997 | } | 1984 | } |
1998 | 1985 | ||
1999 | void QtRec::errorStop() { | 1986 | void QtRec::errorStop() { |
2000 | stopped = true; | 1987 | stopped = true; |
2001 | wavFile->closeFile(); | 1988 | wavFile->closeFile(); |
2002 | killTimers(); | 1989 | killTimers(); |
2003 | } | 1990 | } |
2004 | 1991 | ||
2005 | void QtRec::doMute(bool b) { | 1992 | void QtRec::doMute(bool b) { |
2006 | doVolMuting( b); | 1993 | doVolMuting( b); |
2007 | doMicMuting( b); | 1994 | doMicMuting( b); |
2008 | } | 1995 | } |
2009 | 1996 | ||
2010 | void QtRec::slotAutoMute(bool b) { | 1997 | void QtRec::slotAutoMute(bool b) { |
2011 | autoMute = b; | 1998 | autoMute = b; |
2012 | Config cfg("OpieRec"); | 1999 | Config cfg("OpieRec"); |
2013 | cfg.setGroup("Settings"); | 2000 | cfg.setGroup("Settings"); |
2014 | cfg.writeEntry("useAutoMute",b); | 2001 | cfg.writeEntry("useAutoMute",b); |
2015 | doMute( b); | 2002 | doMute( b); |
2016 | outMuteCheckBox->setChecked( b); | 2003 | outMuteCheckBox->setChecked( b); |
2017 | inMuteCheckBox->setChecked( b); | 2004 | inMuteCheckBox->setChecked( b); |
2018 | } | 2005 | } |
2019 | 2006 | ||
2020 | void QtRec::selectItemByName(const QString & name) { | 2007 | void QtRec::selectItemByName(const QString & name) { |
2021 | QListViewItemIterator it( ListView1 ); | 2008 | QListViewItemIterator it( ListView1 ); |
2022 | for ( ; it.current(); ++it ) | 2009 | for ( ; it.current(); ++it ) |
2023 | if( name == it.current()->text(0)) | 2010 | if( name == it.current()->text(0)) |
2024 | ListView1->setCurrentItem(it.current()); | 2011 | ListView1->setCurrentItem(it.current()); |
2025 | } | 2012 | } |
2026 | 2013 | ||
2027 | 2014 | ||
2028 | // long findPeak(long input ) { | 2015 | // long findPeak(long input ) { |
2029 | 2016 | ||
2030 | // // halfLife = time in seconds for output to decay to half value after an impulse | 2017 | // // halfLife = time in seconds for output to decay to half value after an impulse |
2031 | // static float output = 0.0; | 2018 | // static float output = 0.0; |
2032 | // float halfLife = .0025; | 2019 | // float halfLife = .0025; |
2033 | // float vsf = .0025; | 2020 | // float vsf = .0025; |
2034 | // float scalar = pow( 0.5, 1.0/(halfLife * filePara.sampleRate )); | 2021 | // float scalar = pow( 0.5, 1.0/(halfLife * filePara.sampleRate )); |
2035 | // if( input < 0.0 ) | 2022 | // if( input < 0.0 ) |
2036 | // input = -input; // Absolute value. | 2023 | // input = -input; // Absolute value. |
2037 | // if ( input >= output ) { | 2024 | // if ( input >= output ) { |
2038 | // // When we hit a peak, ride the peak to the top. | 2025 | // // When we hit a peak, ride the peak to the top. |
2039 | // output = input; | 2026 | // output = input; |
2040 | // } else { | 2027 | // } else { |
2041 | // // Exponential decay of output when signal is low. | 2028 | // // Exponential decay of output when signal is low. |
2042 | // output = output * scalar; | 2029 | // output = output * scalar; |
2043 | // // | 2030 | // // |
2044 | // // When current gets close to 0.0, set current to 0.0 to prevent FP underflow | 2031 | // // When current gets close to 0.0, set current to 0.0 to prevent FP underflow |
2045 | // // which can cause a severe performance degradation due to a flood | 2032 | // // which can cause a severe performance degradation due to a flood |
2046 | // // of interrupts. | 2033 | // // of interrupts. |
2047 | // // | 2034 | // // |
2048 | // if( output < vsf ) output = 0.0; | 2035 | // if( output < vsf ) output = 0.0; |
2049 | // } | 2036 | // } |
2050 | 2037 | ||
2051 | // return (long) output; | 2038 | // return (long) output; |
2052 | // } | 2039 | // } |
2053 | 2040 | ||
2054 | void QtRec::changeStereoCheck(bool b) { | 2041 | void QtRec::changeStereoCheck(bool b) { |
2055 | Config cfg("OpieRec"); | 2042 | Config cfg("OpieRec"); |
2056 | cfg.setGroup("Settings"); | 2043 | cfg.setGroup("Settings"); |
2057 | int ch = 0; | 2044 | int ch = 0; |
2058 | if ( !b) { ch = 1;} | 2045 | if ( !b) { ch = 1;} |
2059 | else { ch = 2;} | 2046 | else { ch = 2;} |
2060 | cfg.writeEntry("stereo", b); | 2047 | cfg.writeEntry("stereo", b); |
2061 | filePara.channels = ch; | 2048 | filePara.channels = ch; |
2062 | 2049 | ||
2063 | cfg.write(); | 2050 | cfg.write(); |
2064 | } | 2051 | } |
2065 | 2052 | ||
2066 | 2053 | ||
diff --git a/noncore/multimedia/opierec/qtrec.h b/noncore/multimedia/opierec/qtrec.h index 642048a..6e81af6 100644 --- a/noncore/multimedia/opierec/qtrec.h +++ b/noncore/multimedia/opierec/qtrec.h | |||
@@ -1,187 +1,196 @@ | |||
1 | /**************************************************************************** | 1 | /**************************************************************************** |
2 | ** Created: Thu Jan 17 11:19:45 2002 | 2 | ** Created: Thu Jan 17 11:19:45 2002 |
3 | copyright 2002 by L.J. Potter ljp@llornkcor.com | 3 | copyright 2002 by L.J. Potter ljp@llornkcor.com |
4 | ****************************************************************************/ | 4 | ****************************************************************************/ |
5 | #ifndef QTREC_H | 5 | #ifndef QTREC_H |
6 | #define QTREC_H | 6 | #define QTREC_H |
7 | #define VERSION 20040628 | 7 | #define VERSION 20040628 |
8 | 8 | ||
9 | #include <qpe/ir.h> | 9 | #include <qpe/ir.h> |
10 | 10 | ||
11 | #include <qfile.h> | 11 | #include <qfile.h> |
12 | #include <qimage.h> | 12 | #include <qimage.h> |
13 | #include <qlineedit.h> | 13 | #include <qlineedit.h> |
14 | #include <qpixmap.h> | 14 | #include <qpixmap.h> |
15 | #include <qvariant.h> | 15 | #include <qvariant.h> |
16 | #include <qwidget.h> | 16 | #include <qwidget.h> |
17 | #include <stdio.h> | 17 | #include <stdio.h> |
18 | #include <stdlib.h> | 18 | #include <stdlib.h> |
19 | 19 | ||
20 | #include "device.h" | 20 | #include "device.h" |
21 | #include "wavFile.h" | 21 | #include "wavFile.h" |
22 | 22 | ||
23 | class QButtonGroup; | 23 | class QButtonGroup; |
24 | class QCheckBox; | 24 | class QCheckBox; |
25 | class QComboBox; | 25 | class QComboBox; |
26 | class QGridLayout; | 26 | class QGridLayout; |
27 | class QGroupBox; | 27 | class QGroupBox; |
28 | class QHBoxLayout; | 28 | class QHBoxLayout; |
29 | class QIconView; | 29 | class QIconView; |
30 | class QIconViewItem; | 30 | class QIconViewItem; |
31 | class QLabel; | 31 | class QLabel; |
32 | class QLabel; | 32 | class QLabel; |
33 | class QListView; | 33 | class QListView; |
34 | class QListViewItem; | 34 | class QListViewItem; |
35 | class QPushButton; | 35 | class QPushButton; |
36 | class QSlider; | 36 | class QSlider; |
37 | class QTabWidget; | 37 | class QTabWidget; |
38 | class QTimer; | 38 | class QTimer; |
39 | class QVBoxLayout; | 39 | class QVBoxLayout; |
40 | class QLineEdit; | 40 | class QLineEdit; |
41 | 41 | ||
42 | #define MAX_TRACKS 2 | 42 | #define MAX_TRACKS 2 |
43 | //#define BUFSIZE 4096 | 43 | //#define BUFSIZE 4096 |
44 | // #define BUFSIZE 8182 //Z default buffer size | 44 | // #define BUFSIZE 8182 //Z default buffer size |
45 | #define BUFSIZE 1024 | 45 | #define BUFSIZE 1024 |
46 | //#define BUFSIZE 2048 | 46 | //#define BUFSIZE 2048 |
47 | #define FRAGSIZE 0x7fff000A; | 47 | #define FRAGSIZE 0x7fff000A; |
48 | 48 | ||
49 | #define WAVE_FORMAT_DVI_ADPCM (0x0011) | 49 | #define WAVE_FORMAT_DVI_ADPCM (0x0011) |
50 | #define WAVE_FORMAT_PCM (0x0001) | 50 | #define WAVE_FORMAT_PCM (0x0001) |
51 | //AFMT_IMA_ADPCM | 51 | //AFMT_IMA_ADPCM |
52 | 52 | ||
53 | class QtRec : public QWidget | 53 | class QtRec : public QWidget |
54 | { | 54 | { |
55 | Q_OBJECT | 55 | Q_OBJECT |
56 | 56 | ||
57 | public: | 57 | public: |
58 | static QString appName() { return QString::fromLatin1("opierec"); } | 58 | static QString appName() { return QString::fromLatin1("opierec"); } |
59 | QtRec( QWidget* parent=0, const char* name=0, WFlags fl=0 ); | 59 | QtRec( QWidget* parent=0, const char* name=0, WFlags fl=0 ); |
60 | ~QtRec(); | 60 | ~QtRec(); |
61 | QSlider *OutputSlider,*InputSlider; | 61 | QSlider *OutputSlider,*InputSlider; |
62 | 62 | ||
63 | signals: | ||
64 | void stopRecording(); | ||
65 | void startRecording(); | ||
66 | void stopPlaying(); | ||
67 | void startPlaying(); | ||
68 | |||
63 | public slots: | 69 | public slots: |
70 | |||
64 | private: | 71 | private: |
65 | // int fragment; | 72 | // int fragment; |
66 | int fd1; | 73 | int fd1; |
67 | int secCount; | 74 | int secCount; |
68 | QString timeString; | 75 | QString timeString; |
69 | 76 | ||
70 | QLineEdit *renameBox; | 77 | QLineEdit *renameBox; |
71 | QGroupBox* GroupBox1; | 78 | QGroupBox* GroupBox1; |
72 | QString currentFile; | 79 | QString currentFile; |
73 | QString date, currentFileName, tmpFileName; | 80 | QString date, currentFileName, tmpFileName; |
74 | QTimer *t_timer; | 81 | QTimer *t_timer; |
75 | bool needsStereoOut, paused; | 82 | bool needsStereoOut, paused; |
76 | bool useTmpFile, autoMute; | 83 | bool useTmpFile, autoMute; |
77 | 84 | ||
78 | bool eventFilter( QObject * , QEvent * ); | 85 | bool eventFilter( QObject * , QEvent * ); |
79 | void okRename(); | 86 | void okRename(); |
80 | void cancelRename(); | 87 | void cancelRename(); |
81 | QString getStorage(const QString &); | 88 | QString getStorage(const QString &); |
82 | bool rec(); | 89 | bool rec(); |
83 | int getCurrentSizeLimit(); | 90 | int getCurrentSizeLimit(); |
84 | long checkDiskSpace(const QString &); | 91 | long checkDiskSpace(const QString &); |
85 | void doMute(bool); | 92 | void doMute(bool); |
86 | void errorStop(); | 93 | void errorStop(); |
87 | void fillDirectoryCombo(); | 94 | void fillDirectoryCombo(); |
88 | void getInVol(); | 95 | void getInVol(); |
89 | void getOutVol(); | 96 | void getOutVol(); |
90 | void init(); | 97 | void init(); |
91 | void initConfig(); | 98 | void initConfig(); |
92 | void initConnections(); | 99 | void initConnections(); |
93 | void selectItemByName(const QString &); | 100 | void selectItemByName(const QString &); |
94 | void setRecordButton(bool); | 101 | void setRecordButton(bool); |
95 | void start(); | 102 | void start(); |
96 | void stop(); | 103 | void stop(); |
97 | void timerEvent( QTimerEvent *e ); | 104 | void timerEvent( QTimerEvent *e ); |
98 | 105 | ||
99 | private slots: | 106 | private slots: |
107 | void endPlaying(); | ||
108 | void endRecording(); | ||
100 | 109 | ||
101 | void FastforwardPressed(); | 110 | void FastforwardPressed(); |
102 | void FastforwardReleased(); | 111 | void FastforwardReleased(); |
112 | |||
103 | void changeDirCombo(int); | 113 | void changeDirCombo(int); |
104 | void changeSizeLimitCombo(int); | 114 | void changeSizeLimitCombo(int); |
105 | void changeTimeSlider(int); | 115 | void changeTimeSlider(int); |
106 | void changebitrateCombo(int); | 116 | void changebitrateCombo(int); |
107 | void changeStereoCheck( bool); | 117 | void changeStereoCheck( bool); |
108 | 118 | ||
109 | void changedInVolume(); | 119 | void changedInVolume(); |
110 | void changedOutVolume(); | 120 | void changedOutVolume(); |
111 | void changesamplerateCombo(int); | 121 | void changesamplerateCombo(int); |
122 | |||
112 | void cleanUp(); | 123 | void cleanUp(); |
113 | void compressionSelected(bool); | 124 | void compressionSelected(bool); |
114 | void deleteSound(); | 125 | void deleteSound(); |
115 | void doBeam(); | 126 | void doBeam(); |
116 | void doMenuPlay(); | 127 | void doMenuPlay(); |
117 | void doMicMuting(bool); | 128 | void doMicMuting(bool); |
118 | void doPlayBtn(); | 129 | void doPlayBtn(); |
119 | void doRename(); | 130 | void doRename(); |
120 | void doVolMuting(bool); | 131 | void doVolMuting(bool); |
121 | void forwardTimerTimeout(); | 132 | void forwardTimerTimeout(); |
122 | void itClick(QListViewItem *item); | 133 | void itClick(QListViewItem *item); |
123 | void listPressed(int, QListViewItem *, const QPoint&, int); | 134 | void listPressed(int, QListViewItem *, const QPoint&, int); |
124 | void newSound(); | 135 | void newSound(); |
125 | void rewindPressed(); | 136 | void rewindPressed(); |
126 | void rewindReleased(); | 137 | void rewindReleased(); |
127 | void rewindTimerTimeout(); | 138 | void rewindTimerTimeout(); |
128 | void slotAutoMute(bool); | 139 | void slotAutoMute(bool); |
129 | void thisTab(QWidget*); | 140 | void thisTab(QWidget*); |
130 | void timeSliderPressed(); | 141 | void timeSliderPressed(); |
131 | void timeSliderReleased(); | 142 | void timeSliderReleased(); |
132 | void timerBreak(); | 143 | void timerBreak(); |
133 | void initIconView(); | 144 | void initIconView(); |
134 | /* void changedOutVolume(int); */ | 145 | /* void changedOutVolume(int); */ |
135 | /* void changedInVolume(int); */ | 146 | /* void changedInVolume(int); */ |
136 | 147 | ||
137 | protected: | 148 | protected: |
138 | 149 | ||
139 | WavFile *wavFile; | 150 | WavFile *wavFile; |
140 | QButtonGroup *ButtonGroup1; | 151 | QButtonGroup *ButtonGroup1; |
141 | QCheckBox *outMuteCheckBox, *inMuteCheckBox, *compressionCheckBox, *autoMuteCheckBox, *stereoCheckBox; | 152 | QCheckBox *outMuteCheckBox, *inMuteCheckBox, *compressionCheckBox, *autoMuteCheckBox, *stereoCheckBox; |
142 | QComboBox* sampleRateComboBox, * bitRateComboBox, *directoryComboBox, *sizeLimitCombo; | 153 | QComboBox* sampleRateComboBox, * bitRateComboBox, *directoryComboBox, *sizeLimitCombo; |
143 | QHBoxLayout* Layout12; | 154 | QHBoxLayout* Layout12; |
144 | QHBoxLayout* Layout13; | 155 | QHBoxLayout* Layout13; |
145 | QHBoxLayout* Layout14; | 156 | QHBoxLayout* Layout14; |
146 | QHBoxLayout* Layout16; | 157 | QHBoxLayout* Layout16; |
147 | QHBoxLayout* Layout17; | 158 | QHBoxLayout* Layout17; |
148 | QHBoxLayout* Layout19; | 159 | QHBoxLayout* Layout19; |
149 | QIconView *IconView1; | 160 | QIconView *IconView1; |
150 | QLabel *NewSoundLabel,*playLabel2; | 161 | QLabel *NewSoundLabel,*playLabel2; |
151 | QLabel *TextLabel3, *TextLabel1, *TextLabel2; | 162 | QLabel *TextLabel3, *TextLabel1, *TextLabel2; |
152 | QListView *ListView1; | 163 | QListView *ListView1; |
153 | QPushButton *Stop_PushButton, *Play_PushButton, *Rec_PushButton, *NewSoundButton, *deleteSoundButton, *toBeginningButton, *toEndButton; | 164 | QPushButton *Stop_PushButton, *Play_PushButton, *Rec_PushButton, *NewSoundButton, *deleteSoundButton, *toBeginningButton, *toEndButton; |
154 | QString recDir; | 165 | QString recDir; |
155 | QTabWidget *TabWidget; | 166 | QTabWidget *TabWidget; |
156 | QTimer *t, *rewindTimer, *forwardTimer; | 167 | QTimer *t, *rewindTimer, *forwardTimer; |
157 | QVBoxLayout* Layout15; | 168 | QVBoxLayout* Layout15; |
158 | QVBoxLayout* Layout15b; | 169 | QVBoxLayout* Layout15b; |
159 | QVBoxLayout* Layout18; | 170 | QVBoxLayout* Layout18; |
160 | QWidget *tab, *tab_2, *tab_3, *tab_4, *tab_5; | 171 | QWidget *tab, *tab_2, *tab_3, *tab_4, *tab_5; |
161 | int sliderPos, total; | 172 | int sliderPos, total; |
162 | // short inbuffer[BUFSIZE], outbuffer[BUFSIZE]; | 173 | // short inbuffer[BUFSIZE], outbuffer[BUFSIZE]; |
163 | // unsigned short unsigned_inbuffer[BUFSIZE], unsigned_outbuffer[BUFSIZE]; | 174 | // unsigned short unsigned_inbuffer[BUFSIZE], unsigned_outbuffer[BUFSIZE]; |
164 | QGroupBox *sampleGroup, *bitGroup, *dirGroup, *sizeGroup; | 175 | QGroupBox *sampleGroup, *bitGroup, *dirGroup, *sizeGroup; |
165 | /* short inbuffer[65536], outbuffer[65536]; */ | 176 | /* short inbuffer[65536], outbuffer[65536]; */ |
166 | /* unsigned short unsigned_inbuffer[65536], unsigned_outbuffer[65536]; */ | 177 | /* unsigned short unsigned_inbuffer[65536], unsigned_outbuffer[65536]; */ |
167 | 178 | ||
168 | 179 | ||
169 | bool doPlay(); | 180 | bool doPlay(); |
170 | bool openPlayFile(); | 181 | bool openPlayFile(); |
171 | bool setUpFile(); | 182 | bool setUpFile(); |
172 | bool setupAudio( bool b); | 183 | bool setupAudio( bool b); |
173 | void endPlaying(); | ||
174 | void endRecording(); | ||
175 | void fileBeamFinished( Ir *ir); | 184 | void fileBeamFinished( Ir *ir); |
176 | void keyPressEvent( QKeyEvent *e); | 185 | void keyPressEvent( QKeyEvent *e); |
177 | void keyReleaseEvent( QKeyEvent *e); | 186 | void keyReleaseEvent( QKeyEvent *e); |
178 | void receive( const QCString &, const QByteArray & ); | 187 | void receive( const QCString &, const QByteArray & ); |
179 | void showListMenu(QListViewItem * ); | 188 | void showListMenu(QListViewItem * ); |
180 | #ifndef THREADED | 189 | #ifndef THREADED |
181 | void quickRec(); | 190 | void quickRec(); |
182 | void playIt(); | 191 | void playIt(); |
183 | #endif | 192 | #endif |
184 | 193 | ||
185 | }; | 194 | }; |
186 | 195 | ||
187 | #endif // QTREC_H | 196 | #endif // QTREC_H |
diff --git a/noncore/multimedia/opierec/wavFile.cpp b/noncore/multimedia/opierec/wavFile.cpp index b53c416..a0423f0 100644 --- a/noncore/multimedia/opierec/wavFile.cpp +++ b/noncore/multimedia/opierec/wavFile.cpp | |||
@@ -1,314 +1,314 @@ | |||
1 | //wavFile.cpp | 1 | //wavFile.cpp |
2 | #include "wavFile.h" | 2 | #include "wavFile.h" |
3 | #include "qtrec.h" | 3 | #include "qtrec.h" |
4 | 4 | ||
5 | /* OPIE */ | 5 | /* OPIE */ |
6 | #include <opie2/odebug.h> | 6 | #include <opie2/odebug.h> |
7 | #include <qpe/config.h> | 7 | #include <qpe/config.h> |
8 | using namespace Opie::Core; | 8 | using namespace Opie::Core; |
9 | 9 | ||
10 | /* QT */ | 10 | /* QT */ |
11 | #include <qmessagebox.h> | 11 | #include <qmessagebox.h> |
12 | #include <qdir.h> | 12 | #include <qdir.h> |
13 | 13 | ||
14 | /* STD */ | 14 | /* STD */ |
15 | #include <errno.h> | 15 | #include <errno.h> |
16 | #include <sys/time.h> | 16 | #include <sys/time.h> |
17 | #include <sys/types.h> | 17 | #include <sys/types.h> |
18 | #include <sys/vfs.h> | 18 | #include <sys/vfs.h> |
19 | #include <fcntl.h> | 19 | #include <fcntl.h> |
20 | #include <math.h> | 20 | #include <math.h> |
21 | #include <mntent.h> | 21 | #include <mntent.h> |
22 | #include <stdio.h> | 22 | #include <stdio.h> |
23 | #include <stdlib.h> | 23 | #include <stdlib.h> |
24 | #include <unistd.h> | 24 | #include <unistd.h> |
25 | 25 | ||
26 | WavFile::WavFile( QObject * parent,const QString &fileName, bool makeNwFile, int sampleRate, | 26 | WavFile::WavFile( QObject * parent,const QString &fileName, bool makeNwFile, int sampleRate, |
27 | int channels, int resolution, int format ) | 27 | int channels, int resolution, int format ) |
28 | : QObject( parent) | 28 | : QObject( parent) |
29 | { | 29 | { |
30 | owarn << "new wave file: " << fileName << oendl; | 30 | owarn << "new wave file: " << fileName << oendl; |
31 | bool b = makeNwFile; | 31 | bool b = makeNwFile; |
32 | wavSampleRate=sampleRate; | 32 | wavSampleRate=sampleRate; |
33 | wavFormat=format; | 33 | wavFormat=format; |
34 | wavChannels=channels; | 34 | wavChannels=channels; |
35 | wavResolution=resolution; | 35 | wavResolution=resolution; |
36 | useTmpFile=false; | 36 | useTmpFile=false; |
37 | if( b) { | 37 | if( b) { |
38 | newFile(); | 38 | newFile(); |
39 | } else { | 39 | } else { |
40 | openFile(fileName); | 40 | openFile(fileName); |
41 | } | 41 | } |
42 | } | 42 | } |
43 | 43 | ||
44 | bool WavFile::newFile() { | 44 | bool WavFile::newFile() { |
45 | 45 | ||
46 | // odebug << "Set up new file" << oendl; | 46 | // odebug << "Set up new file" << oendl; |
47 | Config cfg("OpieRec"); | 47 | Config cfg("OpieRec"); |
48 | cfg.setGroup("Settings"); | 48 | cfg.setGroup("Settings"); |
49 | 49 | ||
50 | currentFileName=cfg.readEntry("directory",QDir::homeDirPath()); | 50 | currentFileName=cfg.readEntry("directory",QDir::homeDirPath()); |
51 | QString date; | 51 | QString date; |
52 | QDateTime dt = QDateTime::currentDateTime(); | 52 | QDateTime dt = QDateTime::currentDateTime(); |
53 | date = dt.toString();//TimeString::dateString( QDateTime::currentDateTime(),false,true); | 53 | date = dt.toString();//TimeString::dateString( QDateTime::currentDateTime(),false,true); |
54 | date.replace(QRegExp("'"),""); | 54 | date.replace(QRegExp("'"),""); |
55 | date.replace(QRegExp(" "),"_"); | 55 | date.replace(QRegExp(" "),"_"); |
56 | date.replace(QRegExp(":"),"-"); | 56 | date.replace(QRegExp(":"),"-"); |
57 | date.replace(QRegExp(","),""); | 57 | date.replace(QRegExp(","),""); |
58 | 58 | ||
59 | QString currentFile=date; | 59 | QString currentFile=date; |
60 | if(currentFileName.right(1).find("/",0,true) == -1) | 60 | if(currentFileName.right(1).find("/",0,true) == -1) |
61 | currentFileName += "/" + date; | 61 | currentFileName += "/" + date; |
62 | else | 62 | else |
63 | currentFileName += date; | 63 | currentFileName += date; |
64 | currentFileName+=".wav"; | 64 | currentFileName+=".wav"; |
65 | 65 | ||
66 | // odebug << "set up file for recording: "+currentFileName << oendl; | 66 | // odebug << "set up file for recording: "+currentFileName << oendl; |
67 | char pointer[] = "/tmp/opierec-XXXXXX"; | 67 | char pointer[] = "/tmp/opierec-XXXXXX"; |
68 | int fd = 0; | 68 | int fd = 0; |
69 | 69 | ||
70 | if( currentFileName.find("/mnt",0,true) == -1 | 70 | if( currentFileName.find("/mnt",0,true) == -1 |
71 | && currentFileName.find("/tmp",0,true) == -1 ) { | 71 | && currentFileName.find("/tmp",0,true) == -1 ) { |
72 | // if destination file is most likely in flash (assuming jffs2) | 72 | // if destination file is most likely in flash (assuming jffs2) |
73 | // we have to write to a different filesystem first | 73 | // we have to write to a different filesystem first |
74 | 74 | ||
75 | useTmpFile = true; | 75 | useTmpFile = true; |
76 | if(( fd = mkstemp( pointer)) < 0 ) { | 76 | if(( fd = mkstemp( pointer)) < 0 ) { |
77 | perror("mkstemp failed"); | 77 | perror("mkstemp failed"); |
78 | return false; | 78 | return false; |
79 | } | 79 | } |
80 | 80 | ||
81 | // odebug << "Opening tmp file " << pointer << "" << oendl; | 81 | // odebug << "Opening tmp file " << pointer << "" << oendl; |
82 | track.setName( pointer); | 82 | track.setName( pointer); |
83 | 83 | ||
84 | } else { //just use regular file.. no moving | 84 | } else { //just use regular file.. no moving |
85 | 85 | ||
86 | useTmpFile = false; | 86 | useTmpFile = false; |
87 | track.setName( currentFileName); | 87 | track.setName( currentFileName); |
88 | } | 88 | } |
89 | if(!track.open( IO_ReadWrite | IO_Truncate)) { | 89 | if(!track.open( IO_ReadWrite | IO_Truncate)) { |
90 | QString errorMsg=(QString)strerror(errno); | 90 | QString errorMsg=(QString)strerror(errno); |
91 | odebug << errorMsg << oendl; | 91 | odebug << errorMsg << oendl; |
92 | QMessageBox::message("Note", "Error opening file.\n" +errorMsg); | 92 | QMessageBox::message("Note", "Error opening file.\n" +errorMsg); |
93 | 93 | ||
94 | return false; | 94 | return false; |
95 | } else { | 95 | } else { |
96 | setWavHeader( track.handle() , &hdr); | 96 | setWavHeader( track.handle() , &hdr); |
97 | } | 97 | } |
98 | return true; | 98 | return true; |
99 | } | 99 | } |
100 | 100 | ||
101 | WavFile::~WavFile() { | 101 | WavFile::~WavFile() { |
102 | 102 | ||
103 | closeFile(); | 103 | closeFile(); |
104 | } | 104 | } |
105 | 105 | ||
106 | void WavFile::closeFile() { | 106 | void WavFile::closeFile() { |
107 | if(track.isOpen()) | 107 | if(track.isOpen()) |
108 | track.close(); | 108 | track.close(); |
109 | } | 109 | } |
110 | 110 | ||
111 | int WavFile::openFile(const QString ¤tFileName) { | 111 | int WavFile::openFile(const QString ¤tFileName) { |
112 | qWarning("open play file "+currentFileName);; | 112 | qWarning("open play file "+currentFileName);; |
113 | closeFile(); | 113 | closeFile(); |
114 | 114 | ||
115 | track.setName(currentFileName); | 115 | track.setName(currentFileName); |
116 | 116 | ||
117 | if(!track.open(IO_ReadOnly)) { | 117 | if(!track.open(IO_ReadOnly)) { |
118 | QString errorMsg=(QString)strerror(errno); | 118 | QString errorMsg=(QString)strerror(errno); |
119 | odebug << "<<<<<<<<<<< "+errorMsg+currentFileName << oendl; | 119 | odebug << "<<<<<<<<<<< "+errorMsg+currentFileName << oendl; |
120 | QMessageBox::message("Note", "Error opening file.\n" +errorMsg); | 120 | QMessageBox::message("Note", "Error opening file.\n" +errorMsg); |
121 | return -1; | 121 | return -1; |
122 | } else { | 122 | } else { |
123 | parseWavHeader( track.handle()); | 123 | parseWavHeader( track.handle()); |
124 | } | 124 | } |
125 | return track.handle(); | 125 | return track.handle(); |
126 | } | 126 | } |
127 | 127 | ||
128 | bool WavFile::setWavHeader(int fd, wavhdr *hdr) { | 128 | bool WavFile::setWavHeader(int fd, wavhdr *hdr) { |
129 | 129 | ||
130 | strncpy((*hdr).riffID, "RIFF", 4); // RIFF | 130 | strncpy((*hdr).riffID, "RIFF", 4); // RIFF |
131 | strncpy((*hdr).wavID, "WAVE", 4); //WAVE | 131 | strncpy((*hdr).wavID, "WAVE", 4); //WAVE |
132 | strncpy((*hdr).fmtID, "fmt ", 4); // fmt | 132 | strncpy((*hdr).fmtID, "fmt ", 4); // fmt |
133 | (*hdr).fmtLen = 16; // format length = 16 | 133 | (*hdr).fmtLen = 16; // format length = 16 |
134 | 134 | ||
135 | if( wavFormat == WAVE_FORMAT_PCM) { | 135 | if( wavFormat == WAVE_FORMAT_PCM) { |
136 | (*hdr).fmtTag = 1; // PCM | 136 | (*hdr).fmtTag = 1; // PCM |
137 | // odebug << "set header WAVE_FORMAT_PCM" << oendl; | 137 | // odebug << "set header WAVE_FORMAT_PCM" << oendl; |
138 | } | 138 | } |
139 | else { | 139 | else { |
140 | (*hdr).fmtTag = WAVE_FORMAT_DVI_ADPCM; //intel ADPCM | 140 | (*hdr).fmtTag = WAVE_FORMAT_DVI_ADPCM; //intel ADPCM |
141 | // odebug << "set header WAVE_FORMAT_DVI_ADPCM" << oendl; | 141 | // odebug << "set header WAVE_FORMAT_DVI_ADPCM" << oendl; |
142 | } | 142 | } |
143 | 143 | ||
144 | // (*hdr).nChannels = 1;//filePara.channels;// ? 2 : 1*/; // channels | 144 | // (*hdr).nChannels = 1;//filePara.channels;// ? 2 : 1*/; // channels |
145 | (*hdr).nChannels = wavChannels;// ? 2 : 1*/; // channels | 145 | (*hdr).nChannels = wavChannels;// ? 2 : 1*/; // channels |
146 | 146 | ||
147 | (*hdr).sampleRate = wavSampleRate; //samples per second | 147 | (*hdr).sampleRate = wavSampleRate; //samples per second |
148 | (*hdr).avgBytesPerSec = (wavSampleRate)*( wavChannels*(wavResolution/8)); // bytes per second | 148 | (*hdr).avgBytesPerSec = (wavSampleRate)*( wavChannels*(wavResolution/8)); // bytes per second |
149 | (*hdr).nBlockAlign = wavChannels*( wavResolution/8); //block align | 149 | (*hdr).nBlockAlign = wavChannels*( wavResolution/8); //block align |
150 | (*hdr).bitsPerSample = wavResolution; //bits per sample 8, or 16 | 150 | (*hdr).bitsPerSample = wavResolution; //bits per sample 8, or 16 |
151 | 151 | ||
152 | strncpy((*hdr).dataID, "data", 4); | 152 | strncpy((*hdr).dataID, "data", 4); |
153 | 153 | ||
154 | write( fd,hdr, sizeof(*hdr)); | 154 | write( fd,hdr, sizeof(*hdr)); |
155 | owarn << "writing header: bitrate " << wavResolution << ", samplerate " << wavSampleRate << ", channels " << wavChannels << oendl; | 155 | // owarn << "writing header: bitrate " << wavResolution << ", samplerate " << wavSampleRate << ", channels " << wavChannels << oendl; |
156 | return true; | 156 | return true; |
157 | } | 157 | } |
158 | 158 | ||
159 | bool WavFile::adjustHeaders(int fd, int total) { | 159 | bool WavFile::adjustHeaders(int fd, int total) { |
160 | lseek(fd, 4, SEEK_SET); | 160 | lseek(fd, 4, SEEK_SET); |
161 | int i = total + 36; | 161 | int i = total + 36; |
162 | write( fd, &i, sizeof(i)); | 162 | write( fd, &i, sizeof(i)); |
163 | lseek( fd, 40, SEEK_SET); | 163 | lseek( fd, 40, SEEK_SET); |
164 | write( fd, &total, sizeof(total)); | 164 | write( fd, &total, sizeof(total)); |
165 | owarn << "adjusting header " << total << "" << oendl; | 165 | // owarn << "adjusting header " << total << "" << oendl; |
166 | return true; | 166 | return true; |
167 | } | 167 | } |
168 | 168 | ||
169 | int WavFile::parseWavHeader(int fd) { | 169 | int WavFile::parseWavHeader(int fd) { |
170 | owarn << "Parsing wav header" << oendl; | 170 | // owarn << "Parsing wav header" << oendl; |
171 | char string[4]; | 171 | char string[4]; |
172 | int found; | 172 | int found; |
173 | short fmt; | 173 | short fmt; |
174 | unsigned short ch, bitrate; | 174 | unsigned short ch, bitrate; |
175 | unsigned long samplerrate, longdata; | 175 | unsigned long samplerrate, longdata; |
176 | 176 | ||
177 | if (read(fd, string, 4) < 4) { | 177 | if (read(fd, string, 4) < 4) { |
178 | owarn << " Could not read from sound file." << oendl; | 178 | // owarn << " Could not read from sound file." << oendl; |
179 | return -1; | 179 | return -1; |
180 | } | 180 | } |
181 | if (strncmp(string, "RIFF", 4)) { | 181 | if (strncmp(string, "RIFF", 4)) { |
182 | owarn << " not a valid WAV file." << oendl; | 182 | // owarn << " not a valid WAV file." << oendl; |
183 | return -1; | 183 | return -1; |
184 | } | 184 | } |
185 | lseek(fd, 4, SEEK_CUR); | 185 | lseek(fd, 4, SEEK_CUR); |
186 | if (read(fd, string, 4) < 4) { | 186 | if (read(fd, string, 4) < 4) { |
187 | owarn << "Could not read from sound file." << oendl; | 187 | // owarn << "Could not read from sound file." << oendl; |
188 | return -1; | 188 | return -1; |
189 | } | 189 | } |
190 | if (strncmp(string, "WAVE", 4)) { | 190 | if (strncmp(string, "WAVE", 4)) { |
191 | owarn << "not a valid WAV file." << oendl; | 191 | // owarn << "not a valid WAV file." << oendl; |
192 | return -1; | 192 | return -1; |
193 | } | 193 | } |
194 | found = 0; | 194 | found = 0; |
195 | 195 | ||
196 | while (!found) { | 196 | while (!found) { |
197 | if (read(fd, string, 4) < 4) { | 197 | if (read(fd, string, 4) < 4) { |
198 | owarn << "Could not read from sound file." << oendl; | 198 | // owarn << "Could not read from sound file." << oendl; |
199 | return -1; | 199 | return -1; |
200 | } | 200 | } |
201 | if (strncmp(string, "fmt ", 4)) { | 201 | if (strncmp(string, "fmt ", 4)) { |
202 | if (read(fd, &longdata, 4) < 4) { | 202 | if (read(fd, &longdata, 4) < 4) { |
203 | owarn << "Could not read from sound file." << oendl; | 203 | // owarn << "Could not read from sound file." << oendl; |
204 | return -1; | 204 | return -1; |
205 | } | 205 | } |
206 | lseek(fd, longdata, SEEK_CUR); | 206 | lseek(fd, longdata, SEEK_CUR); |
207 | } else { | 207 | } else { |
208 | lseek(fd, 4, SEEK_CUR); | 208 | lseek(fd, 4, SEEK_CUR); |
209 | if (read(fd, &fmt, 2) < 2) { | 209 | if (read(fd, &fmt, 2) < 2) { |
210 | owarn << "Could not read format chunk." << oendl; | 210 | // owarn << "Could not read format chunk." << oendl; |
211 | return -1; | 211 | return -1; |
212 | } | 212 | } |
213 | if (fmt != WAVE_FORMAT_PCM && fmt != WAVE_FORMAT_DVI_ADPCM) { | 213 | if (fmt != WAVE_FORMAT_PCM && fmt != WAVE_FORMAT_DVI_ADPCM) { |
214 | owarn << "Wave file contains unknown format. Unable to continue." << oendl; | 214 | // owarn << "Wave file contains unknown format. Unable to continue." << oendl; |
215 | return -1; | 215 | return -1; |
216 | } | 216 | } |
217 | wavFormat = fmt; | 217 | wavFormat = fmt; |
218 | // compressionFormat=fmt; | 218 | // compressionFormat=fmt; |
219 | owarn << "compressionFormat is " << fmt << "" << oendl; | 219 | // owarn << "compressionFormat is " << fmt << "" << oendl; |
220 | if (read(fd, &ch, 2) < 2) { | 220 | if (read(fd, &ch, 2) < 2) { |
221 | owarn << "Could not read format chunk." << oendl; | 221 | // owarn << "Could not read format chunk." << oendl; |
222 | return -1; | 222 | return -1; |
223 | } else { | 223 | } else { |
224 | wavChannels = ch; | 224 | wavChannels = ch; |
225 | owarn << "File has " << ch << " channels" << oendl; | 225 | // owarn << "File has " << ch << " channels" << oendl; |
226 | } | 226 | } |
227 | if (read(fd, &samplerrate, 4) < 4) { | 227 | if (read(fd, &samplerrate, 4) < 4) { |
228 | owarn << "Could not read from format chunk." << oendl; | 228 | // owarn << "Could not read from format chunk." << oendl; |
229 | return -1; | 229 | return -1; |
230 | } else { | 230 | } else { |
231 | wavSampleRate = samplerrate; | 231 | wavSampleRate = samplerrate; |
232 | // sampleRate = samplerrate; | 232 | // sampleRate = samplerrate; |
233 | owarn << "File has samplerate of " << (int) samplerrate << "" << oendl; | 233 | // owarn << "File has samplerate of " << (int) samplerrate << "" << oendl; |
234 | } | 234 | } |
235 | lseek(fd, 6, SEEK_CUR); | 235 | lseek(fd, 6, SEEK_CUR); |
236 | if (read(fd, &bitrate, 2) < 2) { | 236 | if (read(fd, &bitrate, 2) < 2) { |
237 | owarn << "Could not read format chunk." << oendl; | 237 | // owarn << "Could not read format chunk." << oendl; |
238 | return -1; | 238 | return -1; |
239 | } else { | 239 | } else { |
240 | wavResolution=bitrate; | 240 | wavResolution=bitrate; |
241 | // resolution = bitrate; | 241 | // resolution = bitrate; |
242 | owarn << "File has bitrate of " << bitrate << "" << oendl; | 242 | // owarn << "File has bitrate of " << bitrate << "" << oendl; |
243 | } | 243 | } |
244 | found++; | 244 | found++; |
245 | } | 245 | } |
246 | } | 246 | } |
247 | found = 0; | 247 | found = 0; |
248 | while (!found) { | 248 | while (!found) { |
249 | if (read(fd, string, 4) < 4) { | 249 | if (read(fd, string, 4) < 4) { |
250 | odebug << "Could not read from sound file." << oendl; | 250 | odebug << "Could not read from sound file." << oendl; |
251 | return -1; | 251 | return -1; |
252 | } | 252 | } |
253 | 253 | ||
254 | if (strncmp(string, "data", 4)) { | 254 | if (strncmp(string, "data", 4)) { |
255 | if (read(fd, &longdata, 4)<4) { | 255 | if (read(fd, &longdata, 4)<4) { |
256 | odebug << "Could not read from sound file." << oendl; | 256 | odebug << "Could not read from sound file." << oendl; |
257 | return -1; | 257 | return -1; |
258 | } | 258 | } |
259 | 259 | ||
260 | lseek(fd, longdata, SEEK_CUR); | 260 | lseek(fd, longdata, SEEK_CUR); |
261 | } else { | 261 | } else { |
262 | if (read(fd, &longdata, 4) < 4) { | 262 | if (read(fd, &longdata, 4) < 4) { |
263 | odebug << "Could not read from sound file." << oendl; | 263 | odebug << "Could not read from sound file." << oendl; |
264 | return -1; | 264 | return -1; |
265 | } else { | 265 | } else { |
266 | wavNumberSamples = longdata; | 266 | wavNumberSamples = longdata; |
267 | odebug << "file hase length of " << (int)longdata << "" | 267 | odebug << "file hase length of " << (int)longdata << "" |
268 | << "lasting " | 268 | << "lasting " |
269 | << (int)(( longdata / wavSampleRate) / wavChannels) / ( wavChannels*( wavResolution/8)) | 269 | << (int)(( longdata / wavSampleRate) / wavChannels) / ( wavChannels*( wavResolution/8)) |
270 | << " seconds" << oendl; | 270 | << " seconds" << oendl; |
271 | // wavSeconds = (( longdata / wavSampleRate) / wavChannels) / ( wavChannels*( wavResolution/8)); | 271 | // wavSeconds = (( longdata / wavSampleRate) / wavChannels) / ( wavChannels*( wavResolution/8)); |
272 | 272 | ||
273 | return longdata; | 273 | return longdata; |
274 | } | 274 | } |
275 | } | 275 | } |
276 | } | 276 | } |
277 | 277 | ||
278 | lseek(fd, 0, SEEK_SET); | 278 | lseek(fd, 0, SEEK_SET); |
279 | 279 | ||
280 | return 0; | 280 | return 0; |
281 | } | 281 | } |
282 | 282 | ||
283 | QString WavFile::trackName() { | 283 | QString WavFile::trackName() { |
284 | return track.name(); | 284 | return track.name(); |
285 | } | 285 | } |
286 | 286 | ||
287 | int WavFile::wavHandle(){ | 287 | int WavFile::wavHandle(){ |
288 | return track.handle(); | 288 | return track.handle(); |
289 | } | 289 | } |
290 | 290 | ||
291 | int WavFile::getFormat() { | 291 | int WavFile::getFormat() { |
292 | return wavFormat; | 292 | return wavFormat; |
293 | } | 293 | } |
294 | 294 | ||
295 | int WavFile::getResolution() { | 295 | int WavFile::getResolution() { |
296 | return wavResolution; | 296 | return wavResolution; |
297 | } | 297 | } |
298 | 298 | ||
299 | int WavFile::getSampleRate() { | 299 | int WavFile::getSampleRate() { |
300 | return wavSampleRate; | 300 | return wavSampleRate; |
301 | } | 301 | } |
302 | 302 | ||
303 | int WavFile::getNumberSamples() { | 303 | int WavFile::getNumberSamples() { |
304 | return wavNumberSamples; | 304 | return wavNumberSamples; |
305 | } | 305 | } |
306 | 306 | ||
307 | bool WavFile::isTempFile() { | 307 | bool WavFile::isTempFile() { |
308 | return useTmpFile; | 308 | return useTmpFile; |
309 | } | 309 | } |
310 | 310 | ||
311 | int WavFile::getChannels() { | 311 | int WavFile::getChannels() { |
312 | 312 | ||
313 | return wavChannels; | 313 | return wavChannels; |
314 | } | 314 | } |