summaryrefslogtreecommitdiff
path: root/core
Unidiff
Diffstat (limited to 'core') (more/less context) (ignore whitespace changes)
-rw-r--r--core/applets/vmemo/vmemo.cpp116
-rw-r--r--core/applets/vmemo/vmemo.h1
2 files changed, 70 insertions, 47 deletions
diff --git a/core/applets/vmemo/vmemo.cpp b/core/applets/vmemo/vmemo.cpp
index 4d4d598..4c55dc7 100644
--- a/core/applets/vmemo/vmemo.cpp
+++ b/core/applets/vmemo/vmemo.cpp
@@ -4,48 +4,50 @@
4** GNU General Public License version 2 as published by the Free Software 4** GNU General Public License version 2 as published by the Free Software
5** Foundation and appearing in the file LICENSE.GPL included in the 5** Foundation and appearing in the file LICENSE.GPL included in the
6** packaging of this file. 6** packaging of this file.
7** 7**
8** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 8** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
9** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 9** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
10** 10**
11************************************************************************************/ 11************************************************************************************/
12 12
13/* 13/*
14 * $Id$ 14 * $Id$
15 */ 15 */
16// Sun 03-17-2002 L.J.Potter <ljp@llornkcor.com> 16// Sun 03-17-2002 L.J.Potter <ljp@llornkcor.com>
17#include <sys/utsname.h> 17#include <sys/utsname.h>
18#include <sys/time.h> 18#include <sys/time.h>
19#include <sys/types.h> 19#include <sys/types.h>
20#include <unistd.h> 20#include <unistd.h>
21#include <stdio.h> 21#include <stdio.h>
22#include <sys/stat.h> 22#include <sys/stat.h>
23#include <fcntl.h> 23#include <fcntl.h>
24#include <sys/ioctl.h> 24#include <sys/ioctl.h>
25#include <linux/soundcard.h> 25#include <linux/soundcard.h>
26#include <string.h> 26#include <string.h>
27#include <stdlib.h> 27#include <stdlib.h>
28#include <errno.h>
29#include <string.h>
28 30
29typedef struct _waveheader { 31typedef struct _waveheader {
30 u_long main_chunk; /* 'RIFF' */ 32 u_long main_chunk; /* 'RIFF' */
31 u_long length; /* filelen */ 33 u_long length; /* filelen */
32 u_long chunk_type; /* 'WAVE' */ 34 u_long chunk_type; /* 'WAVE' */
33 u_long sub_chunk; /* 'fmt ' */ 35 u_long sub_chunk; /* 'fmt ' */
34 u_long sc_len; /* length of sub_chunk, =16 36 u_long sc_len; /* length of sub_chunk, =16
35 (chunckSize) format len */ 37 (chunckSize) format len */
36 u_short format; /* should be 1 for PCM-code (formatTag) */ 38 u_short format; /* should be 1 for PCM-code (formatTag) */
37 39
38 u_short modus; /* 1 Mono, 2 Stereo (channels) */ 40 u_short modus; /* 1 Mono, 2 Stereo (channels) */
39 u_long sample_fq; /* samples per second (samplesPerSecond) */ 41 u_long sample_fq; /* samples per second (samplesPerSecond) */
40 u_long byte_p_sec; /* avg bytes per second (avgBytePerSecond) */ 42 u_long byte_p_sec; /* avg bytes per second (avgBytePerSecond) */
41 u_short byte_p_spl; /* samplesize; 1 or 2 bytes (blockAlign) */ 43 u_short byte_p_spl; /* samplesize; 1 or 2 bytes (blockAlign) */
42 u_short bit_p_spl; /* 8, 12 or 16 bit (bitsPerSample) */ 44 u_short bit_p_spl; /* 8, 12 or 16 bit (bitsPerSample) */
43 45
44 u_long data_chunk; /* 'data' */ 46 u_long data_chunk; /* 'data' */
45 47
46 u_long data_length;/* samplecount */ 48 u_long data_length;/* samplecount */
47} WaveHeader; 49} WaveHeader;
48 50
49#define RIFF 0x46464952 51#define RIFF 0x46464952
50#define WAVE 0x45564157 52#define WAVE 0x45564157
51#define FMT 0x20746D66 53#define FMT 0x20746D66
@@ -185,218 +187,239 @@ static char * vmemo_xpm[] = {
185" o x y z A B C D E n ", 187" o x y z A B C D E n ",
186" F G H I J K L M N O ", 188" F G H I J K L M N O ",
187" P Q R S T U V W X ", 189" P Q R S T U V W X ",
188" Y Z ` b ...+. ", 190" Y Z ` b ...+. ",
189" @.#.$.%.&. ", 191" @.#.$.%.&. ",
190" *.B =. ", 192" *.B =. ",
191" n n n n n n n n n "}; 193" n n n n n n n n n "};
192 194
193 195
194VMemo::VMemo( QWidget *parent, const char *_name ) 196VMemo::VMemo( QWidget *parent, const char *_name )
195 : QWidget( parent, _name ) 197 : QWidget( parent, _name )
196{ 198{
197 setFixedHeight( 18 ); 199 setFixedHeight( 18 );
198 setFixedWidth( 14 ); 200 setFixedWidth( 14 );
199 201
200 recording = FALSE; 202 recording = FALSE;
201 203
202 struct utsname name; /* check for embedix kernel running on the zaurus*/ 204 struct utsname name; /* check for embedix kernel running on the zaurus*/
203 if (uname(&name) != -1) { 205 if (uname(&name) != -1) {
204 QString release=name.release; 206 QString release=name.release;
205 if(release.find("embedix",0,TRUE) !=-1) 207 if(release.find("embedix",0,TRUE) !=-1)
206 systemZaurus=TRUE; 208 systemZaurus=TRUE;
207 else { 209 else {
208 systemZaurus=FALSE; 210 systemZaurus=FALSE;
209 myChannel = new QCopChannel( "QPE/VMemo", this ); 211 myChannel = new QCopChannel( "QPE/VMemo", this );
210 connect( myChannel, SIGNAL(received(const QCString&, const QByteArray&)), 212 connect( myChannel, SIGNAL(received(const QCString&, const QByteArray&)),
211 this, SLOT(receive(const QCString&, const QByteArray&)) ); 213 this, SLOT(receive(const QCString&, const QByteArray&)) );
212 214
213// // Register the REC key press, for ipaq only 215// // Register the REC key press, for ipaq only
214 QCopEnvelope e("QPE/Desktop", "keyRegister(int key, QString channel, QString message)"); 216 QCopEnvelope e("QPE/Desktop", "keyRegister(int key, QString channel, QString message)");
215 e << 4096; 217 e << 4096;
216 e << QString("QPE/VMemo"); 218 e << QString("QPE/VMemo");
217 e << QString("toggleRecord()"); 219 e << QString("toggleRecord()");
218 } 220 }
219 } 221 }
220} 222}
221 223
222VMemo::~VMemo() 224VMemo::~VMemo()
223{ 225{
224} 226}
225 227
226void VMemo::receive( const QCString &msg, const QByteArray &data ) 228void VMemo::receive( const QCString &msg, const QByteArray &data )
227{ 229{
228 QDataStream stream( data, IO_ReadOnly ); 230 QDataStream stream( data, IO_ReadOnly );
229 if (msg == "toggleRecord()") { 231 if (msg == "toggleRecord()") {
230 if (recording) 232 if (recording)
231 mouseReleaseEvent(NULL); 233 mouseReleaseEvent(NULL);
232 else 234 else
233 mousePressEvent(NULL); 235 mousePressEvent(NULL);
234 } 236 }
235} 237}
236 238
237void VMemo::paintEvent( QPaintEvent* ) 239void VMemo::paintEvent( QPaintEvent* )
238{ 240{
239 QPainter p(this); 241 QPainter p(this);
240 p.drawPixmap( 0, 1,( const char** ) vmemo_xpm ); 242 p.drawPixmap( 0, 1,( const char** ) vmemo_xpm );
241} 243}
242 244
243void VMemo::mousePressEvent( QMouseEvent *me ) 245void VMemo::mousePressEvent( QMouseEvent *me )
244{ 246{
245 // just to be safe 247 // just to be safe
246 if (recording) { 248 if (recording) {
247 recording = FALSE; 249 recording = FALSE;
248 return; 250 return;
249 } 251 }
250 252
251 /* 253 /*
252 No mousePress/mouseRelease recording on the iPAQ. The REC button on the iPAQ calls these functions 254 No mousePress/mouseRelease recording on the iPAQ. The REC button on the iPAQ calls these functions
253 mousePressEvent and mouseReleaseEvent with a NULL parameter. 255 mousePressEvent and mouseReleaseEvent with a NULL parameter.
254 */ 256 */
255 if (!systemZaurus && me != NULL) 257 if (!systemZaurus && me != NULL)
256 return; 258 return;
257 259
258// Config config( "Sound" ); 260 Config config( "Sound" );
259// config.setGroup( "System" ); 261 config.setGroup( "System" );
260// useAlerts = config.readBoolEntry("Alert"); 262 useAlerts = config.readBoolEntry("Alert");
261 263
262// if(useAlerts) { 264// if(useAlerts)
263// if( QMessageBox::warning(this,"VMemo","Really Record?","Yes","No",0,0,1) ==1) 265// QMessageBox::message("VMemo","Really Record?");//) ==1)
264// return; 266// return;
265// } else { 267// } else {
266 QSound::play(Resource::findSound("vmemob")); 268 QSound::play(Resource::findSound("vmemob"));
267// } 269// }
268 qDebug("Start recording"); 270 qDebug("Start recording");
269 recording = TRUE; 271 recording = TRUE;
270 if (openDSP() == -1) { 272 if (openDSP() == -1) {
271 QMessageBox::critical(0, "VMemo", "Could not open dsp device.", "Abort"); 273 QMessageBox::critical(0, "VMemo", "Could not open dsp device.\n"+errorMsg, "Abort");
272 recording = FALSE; 274 recording = FALSE;
273 return; 275 return;
274 } 276 }
275 277
276 Config vmCfg("VMemo"); 278 Config vmCfg("VMemo");
277 vmCfg.setGroup("Defaults"); 279 vmCfg.setGroup("Defaults");
278 280
279 QDateTime dt = QDateTime::currentDateTime(); 281 QDateTime dt = QDateTime::currentDateTime();
280 QString fileName;
281 282
282 if(systemZaurus) 283 QString fName;
283 fileName=vmCfg.readEntry("Dir", "/mnt/cf/"); // zaurus does not have /mnt/ramfs 284 Config cfg( "Sound" );
284 else 285 cfg.setGroup( "System" );
285 fileName=vmCfg.readEntry("Dir", "/mnt/ramfs/"); 286 fileName = cfg.readEntry("RecLocation",QPEApplication::documentDir() );
286 287
287 fileName += "vm_"; 288 int s;
288 fileName += dt.toString(); 289 s=fileName.find(':');
289 fileName += ".wav"; 290 if(s)
291 fileName=fileName.right(fileName.length()-s-2)+"/";
292
293// if( !fileName.right(1).find('/') == -1)
294// fileName+="/audio/";
295// else
296// fileName+="audio/";
297
298// if(systemZaurus)
299// fileName=vmCfg.readEntry("Dir", "/mnt/cf/"); // zaurus does not have /mnt/ramfs
300// else
301// fileName=vmCfg.readEntry("Dir", "/mnt/ramfs/");
290 302
303 fName = "vm_"+ dt.toString()+ ".wav";
304 fileName+=fName;
305 qDebug("filename is "+fileName);
291 // No spaces in the filename 306 // No spaces in the filename
292 fileName.replace(QRegExp("'"),""); 307 fileName.replace(QRegExp("'"),"");
293 fileName.replace(QRegExp(" "),"_"); 308 fileName.replace(QRegExp(" "),"_");
294 fileName.replace(QRegExp(":"),"."); 309 fileName.replace(QRegExp(":"),".");
295 fileName.replace(QRegExp(","),""); 310 fileName.replace(QRegExp(","),"");
296 311
297 if(openWAV(fileName.latin1()) == -1) { 312 if(openWAV(fileName.latin1()) == -1) {
298 QString err("Could not open the output file: "); 313 QString err("Could not open the output file\n");
299 err += fileName; 314 err += fileName;
300
301 QMessageBox::critical(0, "VMemo", err, "Abort"); 315 QMessageBox::critical(0, "VMemo", err, "Abort");
302 close(dsp); 316 close(dsp);
303 return; 317 return;
304 } 318 }
305 319
306 QArray<int> cats(1); 320 QArray<int> cats(1);
307 cats[0] = vmCfg.readNumEntry("Category", 0); 321 cats[0] = vmCfg.readNumEntry("Category", 0);
308 322
309 QString dlName("vm_"); 323 QString dlName("vm_");
310 dlName += dt.toString(); 324 dlName += dt.toString();
311 DocLnk l; 325 DocLnk l;
312 l.setFile(fileName); 326 l.setFile(fileName);
313 l.setName(dlName); 327 l.setName(dlName);
314 l.setType("audio/x-wav"); 328 l.setType("audio/x-wav");
315 l.setCategories(cats); 329 l.setCategories(cats);
316 l.writeLink(); 330 l.writeLink();
317 331
318 record(); 332 record();
319} 333}
320 334
321void VMemo::mouseReleaseEvent( QMouseEvent * ) 335void VMemo::mouseReleaseEvent( QMouseEvent * )
322{ 336{
323 recording = FALSE; 337 recording = FALSE;
324} 338}
325 339
326int VMemo::openDSP() 340int VMemo::openDSP()
327{ 341{
328 Config cfg("Sound"); 342 Config cfg("Sound");
329 cfg.setGroup("Record"); 343 cfg.setGroup("Record");
330 344
331 speed = cfg.readNumEntry("SampleRate", 22050); 345 speed = cfg.readNumEntry("SampleRate", 22050);
332 channels = cfg.readNumEntry("Stereo", 1) ? 2 : 1; // 1 = stereo(2), 0 = mono(1) 346 channels = cfg.readNumEntry("Stereo", 1) ? 2 : 1; // 1 = stereo(2), 0 = mono(1)
333 if (cfg.readNumEntry("SixteenBit", 1)==1) { 347 if (cfg.readNumEntry("SixteenBit", 1)==1) {
334 format = AFMT_S16_LE; 348 format = AFMT_S16_LE;
335 resolution = 16; 349 resolution = 16;
336 } else { 350 } else {
337 format = AFMT_S8; 351 format = AFMT_U8;
338 resolution = 8; 352 resolution = 8;
339 } 353 }
340 354
355 qDebug("samplerate: %d, channels %d, resolution %d", speed, channels, resolution);
341 356
342 if(systemZaurus) { 357 if(systemZaurus) {
343 dsp = open("/dev/dsp1", O_RDWR); //Zaurus needs /dev/dsp1 358 dsp = open("/dev/dsp1", O_RDWR); //Zaurus needs /dev/dsp1
344 channels=1; //zaurus has one input channel 359 channels=1; //zaurus has one input channel
345 } else { 360 } else {
346 dsp = open("/dev/dsp", O_RDWR); 361 dsp = open("/dev/dsp", O_RDWR);
347 } 362 }
348 363
349 if(dsp == -1) { 364 if(dsp == -1) {
350 perror("open(\"/dev/dsp\")"); 365 perror("open(\"/dev/dsp\")");
366
367 errorMsg="open(\"/dev/dsp\")\n "+(QString)strerror(errno);
351 return -1; 368 return -1;
352 } 369 }
353 370
354 if(ioctl(dsp, SNDCTL_DSP_SETFMT , &format)==-1) { 371 if(ioctl(dsp, SNDCTL_DSP_SETFMT , &format)==-1) {
355 perror("ioctl(\"SNDCTL_DSP_SETFMT\")"); 372 perror("ioctl(\"SNDCTL_DSP_SETFMT\")");
373 errorMsg="ioctl(\"SNDCTL_DSP_SETFMT\")\n%d\n"+(QString)strerror(errno),format;
356 return -1; 374 return -1;
357 } 375 }
358 if(ioctl(dsp, SNDCTL_DSP_CHANNELS , &channels)==-1) { 376 if(ioctl(dsp, SNDCTL_DSP_CHANNELS , &channels)==-1) {
359 perror("ioctl(\"SNDCTL_DSP_CHANNELS\")"); 377 perror("ioctl(\"SNDCTL_DSP_CHANNELS\")");
378 errorMsg="ioctl(\"SNDCTL_DSP_CHANNELS\")\n%d\n"+(QString)strerror(errno),channels;
360 return -1; 379 return -1;
361 } 380 }
362 if(ioctl(dsp, SNDCTL_DSP_SPEED , &speed)==-1) { 381 if(ioctl(dsp, SNDCTL_DSP_SPEED , &speed)==-1) {
363 perror("ioctl(\"SNDCTL_DSP_SPEED\")"); 382 perror("ioctl(\"SNDCTL_DSP_SPEED\")");
383 errorMsg="ioctl(\"SNDCTL_DSP_SPEED\")\n%d\n"+(QString)strerror(errno),speed;
364 return -1; 384 return -1;
365 } 385 }
366 if(ioctl(dsp, SOUND_PCM_READ_RATE , &rate)==-1) { 386 if(ioctl(dsp, SOUND_PCM_READ_RATE , &rate)==-1) {
367 perror("ioctl(\"SOUND_PCM_READ_RATE\")"); 387 perror("ioctl(\"SOUND_PCM_READ_RATE\")");
388 errorMsg="ioctl(\"SOUND_PCM_READ_RATE\")\n%d\n"+(QString)strerror(errno),rate;
368 return -1; 389 return -1;
369 } 390 }
370 391
371 return 1; 392 return 1;
372} 393}
373 394
374int VMemo::openWAV(const char *filename) 395int VMemo::openWAV(const char *filename)
375{ 396{
376 track.setName(filename); 397 track.setName(filename);
377 if(!track.open(IO_WriteOnly|IO_Truncate|IO_Raw)) 398 if(!track.open(IO_WriteOnly|IO_Truncate|IO_Raw)) {
399 errorMsg=filename;
378 return -1; 400 return -1;
401 }
379 402
380 wav=track.handle(); 403 wav=track.handle();
381 404
382 WaveHeader wh; 405 WaveHeader wh;
383 406
384 wh.main_chunk = RIFF; 407 wh.main_chunk = RIFF;
385 wh.length=0; 408 wh.length=0;
386 wh.chunk_type = WAVE; 409 wh.chunk_type = WAVE;
387 wh.sub_chunk = FMT; 410 wh.sub_chunk = FMT;
388 wh.sc_len = 16; 411 wh.sc_len = 16;
389 wh.format = PCM_CODE; 412 wh.format = PCM_CODE;
390 wh.modus = channels; 413 wh.modus = channels;
391 wh.sample_fq = speed; 414 wh.sample_fq = speed;
392 wh.byte_p_sec = speed * channels * resolution/8; 415 wh.byte_p_sec = speed * channels * resolution/8;
393 wh.byte_p_spl = channels * (resolution / 8); 416 wh.byte_p_spl = channels * (resolution / 8);
394 wh.bit_p_spl = resolution; 417 wh.bit_p_spl = resolution;
395 wh.data_chunk = DATA; 418 wh.data_chunk = DATA;
396 wh.data_length= 0; 419 wh.data_length= 0;
397 // qDebug("Write header channels %d, speed %d, b/s %d, blockalign %d, bitrate %d" 420 // qDebug("Write header channels %d, speed %d, b/s %d, blockalign %d, bitrate %d"
398 // , wh.modus, wh.sample_fq, wh.byte_p_sec, wh.byte_p_spl, wh.bit_p_spl ); 421 // , wh.modus, wh.sample_fq, wh.byte_p_sec, wh.byte_p_spl, wh.bit_p_spl );
399 write (wav, &wh, sizeof(WaveHeader)); 422 write (wav, &wh, sizeof(WaveHeader));
400 423
401 return 1; 424 return 1;
402} 425}
@@ -409,90 +432,89 @@ void VMemo::record(void)
409 if(systemZaurus) { 432 if(systemZaurus) {
410 signed short sound[512], monoBuffer[512]; 433 signed short sound[512], monoBuffer[512];
411 if(format==AFMT_S16_LE) { 434 if(format==AFMT_S16_LE) {
412 while(recording) { 435 while(recording) {
413 result = read(dsp, sound, 512); // 8192 436 result = read(dsp, sound, 512); // 8192
414 qApp->processEvents(); 437 qApp->processEvents();
415 int j=0; 438 int j=0;
416 if(systemZaurus) { 439 if(systemZaurus) {
417 for (int i = 0; i < result; i++) { //since Z is mono do normally 440 for (int i = 0; i < result; i++) { //since Z is mono do normally
418 monoBuffer[i] = sound[i]; 441 monoBuffer[i] = sound[i];
419 } 442 }
420 qApp->processEvents(); 443 qApp->processEvents();
421 length+=write(wav, monoBuffer, result); 444 length+=write(wav, monoBuffer, result);
422 } else { //ipaq /stereo inputs 445 } else { //ipaq /stereo inputs
423 for (int i = 0; i < result; i+=2) { 446 for (int i = 0; i < result; i+=2) {
424 monoBuffer[j] = (sound[i]+sound[i+1])/2; 447 monoBuffer[j] = (sound[i]+sound[i+1])/2;
425 j++; 448 j++;
426 } 449 }
427 qApp->processEvents(); 450 qApp->processEvents();
428 length+=write(wav, monoBuffer, result/2); 451 length+=write(wav, monoBuffer, result/2);
429 } 452 }
430 printf("%d\r",length); 453 printf("%d\r",length);
431 fflush(stdout); 454 fflush(stdout);
432 } 455 }
433 } else { //AFMT_S8 456 } else { //AFMT_U8
434// 8bit unsigned 457// 8bit unsigned
435 unsigned short sound[512], monoBuffer[512]; 458 unsigned short sound[512], monoBuffer[512];
436 while(recording) { 459 while(recording) {
437 result = read(dsp, sound, 512); // 8192 460 result = read(dsp, sound, 512); // 8192
438 qApp->processEvents(); 461 qApp->processEvents();
439 int j=0; 462 int j=0;
440 if(systemZaurus) { 463 if(systemZaurus) {
441 for (int i = 0; i < result; i++) { //since Z is mono do normally 464 for (int i = 0; i < result; i++) { //since Z is mono do normally
442 monoBuffer[i] = sound[i]; 465 monoBuffer[i] = sound[i];
443 } 466 }
444 qApp->processEvents(); 467 qApp->processEvents();
445 length+=write(wav, monoBuffer, result); 468 length+=write(wav, monoBuffer, result);
446 } else { //ipaq /stereo inputs 469 } else { //ipaq /stereo inputs
447 for (int i = 0; i < result; i+=2) { 470 for (int i = 0; i < result; i+=2) {
448 monoBuffer[j] = (sound[i]+sound[i+1])/2; 471 monoBuffer[j] = (sound[i]+sound[i+1])/2;
449 j++; 472 j++;
450 } 473 }
451 qApp->processEvents(); 474 qApp->processEvents();
452 length+=write(wav, monoBuffer, result/2); 475 length+=write(wav, monoBuffer, result/2);
453 } 476 }
454 length += result; 477 length += result;
455 printf("%d\r",length); 478 printf("%d\r",length);
456 fflush(stdout); 479 fflush(stdout);
457 480
458 qApp->processEvents(); 481 qApp->processEvents();
459 } 482 }
460 483
461 qApp->processEvents(); 484 qApp->processEvents();
462 } 485 }
463 486
464 } else { 487 } else {
465 488
466 signed short sound[512], monoBuffer[512]; 489 signed short sound[512], monoBuffer[512];
467 490
468 while(recording) { 491 while(recording) {
469 result = read(dsp, sound, 512); // 8192 492 result = read(dsp, sound, 512); // 8192
470 qApp->processEvents(); 493 qApp->processEvents();
471 494
472 write(wav, sound, result); 495 write(wav, sound, result);
473 length += result; 496 length += result;
474 497
475 qApp->processEvents(); 498 qApp->processEvents();
476 } 499 }
477 printf("%d\r",length); 500 printf("%d\r",length);
478 fflush(stdout); 501 fflush(stdout);
479 // qDebug("file has length of %d lasting %d seconds", 502 // qDebug("file has length of %d lasting %d seconds",
480 // length, (( length / speed) / channels) / 2 ); 503 // length, (( length / speed) / channels) / 2 );
481 // medialplayer states wrong length in secs 504 // medialplayer states wrong length in secs
482 } 505 }
483 506
484 value = length+36; 507 value = length+36;
485 lseek(wav, 4, SEEK_SET); 508 lseek(wav, 4, SEEK_SET);
486 write(wav, &value, 4); 509 write(wav, &value, 4);
487 lseek(wav, 40, SEEK_SET); 510 lseek(wav, 40, SEEK_SET);
488 write(wav, &length, 4); 511 write(wav, &length, 4);
489 track.close(); 512 track.close();
490 513
491 if( ioctl( dsp, SNDCTL_DSP_RESET,0) == -1) 514 if( ioctl( dsp, SNDCTL_DSP_RESET,0) == -1)
492 perror("ioctl(\"SNDCTL_DSP_RESET\")"); 515 perror("ioctl(\"SNDCTL_DSP_RESET\")");
493 ::close(dsp); 516 ::close(dsp);
494// if(useAlerts) 517 if(useAlerts)
495// QMessageBox::message("Vmemo"," Done recording"); 518 QMessageBox::message("Vmemo"," Done recording\n"+ fileName);
496// else 519 QSound::play(Resource::findSound("vmemoe"));
497 QSound::play(Resource::findSound("vmemoe"));
498} 520}
diff --git a/core/applets/vmemo/vmemo.h b/core/applets/vmemo/vmemo.h
index f30476f..3972877 100644
--- a/core/applets/vmemo/vmemo.h
+++ b/core/applets/vmemo/vmemo.h
@@ -9,47 +9,48 @@
9** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 9** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
10** 10**
11*********************************************************************************************/ 11*********************************************************************************************/
12 12
13/* 13/*
14 * $Id$ 14 * $Id$
15 */ 15 */
16 16
17#ifndef __VMEMO_H__ 17#ifndef __VMEMO_H__
18#define __VMEMO_H__ 18#define __VMEMO_H__
19 19
20#include <qwidget.h> 20#include <qwidget.h>
21#include <qpixmap.h> 21#include <qpixmap.h>
22#include <qpe/applnk.h> 22#include <qpe/applnk.h>
23#include <qfile.h> 23#include <qfile.h>
24#include <qpe/qcopenvelope_qws.h> 24#include <qpe/qcopenvelope_qws.h>
25 25
26class VMemo : public QWidget 26class VMemo : public QWidget
27{ 27{
28 Q_OBJECT 28 Q_OBJECT
29public: 29public:
30 VMemo( QWidget *parent, const char *name = NULL); 30 VMemo( QWidget *parent, const char *name = NULL);
31 ~VMemo(); 31 ~VMemo();
32 QFile track; 32 QFile track;
33 QString fileName, errorMsg;
33 34
34public slots: 35public slots:
35 void record(); 36 void record();
36 void mousePressEvent( QMouseEvent * ); 37 void mousePressEvent( QMouseEvent * );
37 void mouseReleaseEvent( QMouseEvent * ); 38 void mouseReleaseEvent( QMouseEvent * );
38 void receive( const QCString &msg, const QByteArray &data ); 39 void receive( const QCString &msg, const QByteArray &data );
39 40
40private: 41private:
41 bool useAlerts; 42 bool useAlerts;
42 void paintEvent( QPaintEvent* ); 43 void paintEvent( QPaintEvent* );
43 44
44 int openDSP(); 45 int openDSP();
45 int openWAV(const char *filename); 46 int openWAV(const char *filename);
46 47
47 QPixmap vmemoPixmap; 48 QPixmap vmemoPixmap;
48 QCopChannel *myChannel; 49 QCopChannel *myChannel;
49 bool systemZaurus; 50 bool systemZaurus;
50 int dsp, wav, rate, speed, channels, format, resolution; 51 int dsp, wav, rate, speed, channels, format, resolution;
51 bool recording; 52 bool recording;
52}; 53};
53 54
54#endif // __VMEMO_H__ 55#endif // __VMEMO_H__
55 56