summaryrefslogtreecommitdiff
path: root/core/applets/vmemo/vmemo.cpp
Unidiff
Diffstat (limited to 'core/applets/vmemo/vmemo.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/applets/vmemo/vmemo.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/core/applets/vmemo/vmemo.cpp b/core/applets/vmemo/vmemo.cpp
index 577db75..4b398ad 100644
--- a/core/applets/vmemo/vmemo.cpp
+++ b/core/applets/vmemo/vmemo.cpp
@@ -345,70 +345,74 @@ bool VMemo::startRecording() {
345 345
346 QString fName; 346 QString fName;
347 config.setGroup( "System" ); 347 config.setGroup( "System" );
348 fName = QPEApplication::documentDir() ; 348 fName = QPEApplication::documentDir() ;
349 fileName = config.readEntry("RecLocation", fName); 349 fileName = config.readEntry("RecLocation", fName);
350 350
351 int s; 351 int s;
352 s=fileName.find(':'); 352 s=fileName.find(':');
353 if(s) 353 if(s)
354 fileName=fileName.right(fileName.length()-s-2); 354 fileName=fileName.right(fileName.length()-s-2);
355 qDebug("pathname will be "+fileName); 355 qDebug("pathname will be "+fileName);
356 356
357 if( fileName.left(1).find('/') == -1) 357 if( fileName.left(1).find('/') == -1)
358 fileName="/"+fileName; 358 fileName="/"+fileName;
359 if( fileName.right(1).find('/') == -1) 359 if( fileName.right(1).find('/') == -1)
360 fileName+="/"; 360 fileName+="/";
361 fName = "vm_"+ dt.toString()+ ".wav"; 361 fName = "vm_"+ dt.toString()+ ".wav";
362 362
363 fileName+=fName; 363 fileName+=fName;
364 // No spaces in the filename 364 // No spaces in the filename
365 fileName.replace(QRegExp("'"),""); 365 fileName.replace(QRegExp("'"),"");
366 fileName.replace(QRegExp(" "),"_"); 366 fileName.replace(QRegExp(" "),"_");
367 fileName.replace(QRegExp(":"),"."); 367 fileName.replace(QRegExp(":"),".");
368 fileName.replace(QRegExp(","),""); 368 fileName.replace(QRegExp(","),"");
369 fileName += ".wav"; 369
370 370
371 qDebug("filename is "+fileName); 371 qDebug("filename is "+fileName);
372// open tmp file here 372// open tmp file here
373 char *pointer; 373 char *pointer;
374 pointer=tmpnam(NULL); 374 pointer=tmpnam(NULL);
375 qDebug("Opening tmp file %s",pointer); 375 qDebug("Opening tmp file %s",pointer);
376 376
377 if(openWAV(pointer ) == -1) { 377 if(openWAV(pointer ) == -1) {
378 378
379// if(openWAV(fileName.latin1()) == -1) { 379// if(openWAV(fileName.latin1()) == -1) {
380 QString err("Could not open the temp file\n"); 380 QString err("Could not open the temp file\n");
381 err += fileName; 381 err += fileName;
382 QMessageBox::critical(0, "vmemo", err, "Abort"); 382 QMessageBox::critical(0, "vmemo", err, "Abort");
383 ::close(dsp); 383 ::close(dsp);
384 return FALSE; 384 return FALSE;
385 } 385 }
386 if( record() ) { 386 if( record() ) {
387 387
388 QString cmd; 388 QString cmd;
389 if( fileName.find(".wav",0,TRUE) == -1)
390 fileName += ".wav";
391
389 cmd.sprintf("mv %s "+fileName, pointer); 392 cmd.sprintf("mv %s "+fileName, pointer);
390// move tmp file to regular file here 393// move tmp file to regular file here
394
391 system(cmd.latin1()); 395 system(cmd.latin1());
392 396
393 QArray<int> cats(1); 397 QArray<int> cats(1);
394 cats[0] = config.readNumEntry("Category", 0); 398 cats[0] = config.readNumEntry("Category", 0);
395 399
396 QString dlName("vm_"); 400 QString dlName("vm_");
397 dlName += dt.toString(); 401 dlName += dt.toString();
398 DocLnk l; 402 DocLnk l;
399 l.setFile(fileName); 403 l.setFile(fileName);
400 l.setName(dlName); 404 l.setName(dlName);
401 l.setType("audio/x-wav"); 405 l.setType("audio/x-wav");
402 l.setCategories(cats); 406 l.setCategories(cats);
403 l.writeLink(); 407 l.writeLink();
404 return TRUE; 408 return TRUE;
405 } else 409 } else
406 return FALSE; 410 return FALSE;
407 411
408} 412}
409 413
410void VMemo::stopRecording() { 414void VMemo::stopRecording() {
411 show(); 415 show();
412 qDebug("Stopped recording"); 416 qDebug("Stopped recording");
413 recording = FALSE; 417 recording = FALSE;
414 if(useAlerts) { 418 if(useAlerts) {
@@ -462,48 +466,50 @@ int VMemo::openDSP() {
462 return -1; 466 return -1;
463 } 467 }
464 if(ioctl(dsp, SNDCTL_DSP_SPEED , &speed)==-1) { 468 if(ioctl(dsp, SNDCTL_DSP_SPEED , &speed)==-1) {
465 perror("ioctl(\"SNDCTL_DSP_SPEED\")"); 469 perror("ioctl(\"SNDCTL_DSP_SPEED\")");
466 return -1; 470 return -1;
467 } 471 }
468 if(ioctl(dsp, SOUND_PCM_READ_RATE , &rate)==-1) { 472 if(ioctl(dsp, SOUND_PCM_READ_RATE , &rate)==-1) {
469 perror("ioctl(\"SOUND_PCM_READ_RATE\")"); 473 perror("ioctl(\"SOUND_PCM_READ_RATE\")");
470 return -1; 474 return -1;
471 } 475 }
472 476
473 QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << FALSE; //mute 477 QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << FALSE; //mute
474 478
475 return 1; 479 return 1;
476} 480}
477 481
478int VMemo::openWAV(const char *filename) { 482int VMemo::openWAV(const char *filename) {
479 track.setName(filename); 483 track.setName(filename);
480 if(!track.open(IO_WriteOnly|IO_Truncate|IO_Raw)) { 484 if(!track.open(IO_WriteOnly|IO_Truncate|IO_Raw)) {
481 errorMsg=filename; 485 errorMsg=filename;
482 return -1; 486 return -1;
483 } 487 }
484 488
485 wav=track.handle(); 489 wav=track.handle();
490 Config vmCfg("Vmemo");
491 vmCfg.setGroup("Defaults");
486 useADPCM = vmCfg.readBoolEntry("use_ADPCM", 0); 492 useADPCM = vmCfg.readBoolEntry("use_ADPCM", 0);
487 493
488 WaveHeader wh; 494 WaveHeader wh;
489 495
490 wh.main_chunk = RIFF; 496 wh.main_chunk = RIFF;
491 wh.length=0; 497 wh.length=0;
492 wh.chunk_type = WAVE; 498 wh.chunk_type = WAVE;
493 wh.sub_chunk = FMT; 499 wh.sub_chunk = FMT;
494 wh.sc_len = 16; 500 wh.sc_len = 16;
495 if(useADPCM) 501 if(useADPCM)
496 wh.format = WAVE_FORMAT_DVI_ADPCM;//PCM_CODE; 502 wh.format = WAVE_FORMAT_DVI_ADPCM;//PCM_CODE;
497 else 503 else
498 wh.format = PCM_CODE; 504 wh.format = PCM_CODE;
499 wh.modus = channels; 505 wh.modus = channels;
500 wh.sample_fq = speed; 506 wh.sample_fq = speed;
501 wh.byte_p_sec = speed * channels * resolution/8; 507 wh.byte_p_sec = speed * channels * resolution/8;
502 wh.byte_p_spl = channels * (resolution / 8); 508 wh.byte_p_spl = channels * (resolution / 8);
503 wh.bit_p_spl = resolution; 509 wh.bit_p_spl = resolution;
504 wh.data_chunk = DATA; 510 wh.data_chunk = DATA;
505 wh.data_length= 0; 511 wh.data_length= 0;
506 // qDebug("Write header channels %d, speed %d, b/s %d, blockalign %d, bitrate %d" 512 // qDebug("Write header channels %d, speed %d, b/s %d, blockalign %d, bitrate %d"
507 // , wh.modus, wh.sample_fq, wh.byte_p_sec, wh.byte_p_spl, wh.bit_p_spl ); 513 // , wh.modus, wh.sample_fq, wh.byte_p_sec, wh.byte_p_spl, wh.bit_p_spl );
508 write (wav, &wh, sizeof(WaveHeader)); 514 write (wav, &wh, sizeof(WaveHeader));
509 515
@@ -512,48 +518,50 @@ int VMemo::openWAV(const char *filename) {
512 518
513bool VMemo::record() { 519bool VMemo::record() {
514 520
515 int length=0, result, value; 521 int length=0, result, value;
516 QString msg; 522 QString msg;
517 msg.sprintf("Recording format %d", format); 523 msg.sprintf("Recording format %d", format);
518 qDebug(msg); 524 qDebug(msg);
519 Config config("Vmemo"); 525 Config config("Vmemo");
520 config.setGroup("Record"); 526 config.setGroup("Record");
521 int sRate=config.readNumEntry("SizeLimit", 30); 527 int sRate=config.readNumEntry("SizeLimit", 30);
522 if(sRate > 0) 528 if(sRate > 0)
523 t_timer->start( sRate * 1000+1000, TRUE); 529 t_timer->start( sRate * 1000+1000, TRUE);
524 530
525// if(systemZaurus) { 531// if(systemZaurus) {
526// } else { // 16 bit only capabilities 532// } else { // 16 bit only capabilities
527 533
528 msg.sprintf("Recording format other"); 534 msg.sprintf("Recording format other");
529 qDebug(msg); 535 qDebug(msg);
530 536
531 int bufsize=1024; 537 int bufsize=1024;
532 int bytesWritten=0; 538 int bytesWritten=0;
533 signed short sound[1024], monoBuffer[1024]; 539 signed short sound[1024], monoBuffer[1024];
534 char abuf[bufsize/2]; 540 char abuf[bufsize/2];
535 short sbuf[bufsize]; 541 short sbuf[bufsize];
542 Config vmCfg("Vmemo");
543 vmCfg.setGroup("Defaults");
536 useADPCM = vmCfg.readBoolEntry("use_ADPCM", 0); 544 useADPCM = vmCfg.readBoolEntry("use_ADPCM", 0);
537 545
538 while(recording) { 546 while(recording) {
539 547
540 if(useADPCM) 548 if(useADPCM)
541 result = read( dsp, sbuf, bufsize); // 8192 549 result = read( dsp, sbuf, bufsize); // 8192
542 else 550 else
543 result = read(dsp, sound, 1024); // 8192 551 result = read(dsp, sound, 1024); // 8192
544 if( result <= 0) { 552 if( result <= 0) {
545 perror("recording error "); 553 perror("recording error ");
546// qDebug(currentFileName); 554// qDebug(currentFileName);
547 QMessageBox::message(tr("Note"),tr("error recording")); 555 QMessageBox::message(tr("Note"),tr("error recording"));
548 recording=FALSE; 556 recording=FALSE;
549 break; 557 break;
550 return FALSE; 558 return FALSE;
551 } 559 }
552 560
553 if(useADPCM) { 561 if(useADPCM) {
554 adpcm_coder( sbuf, abuf, result/2, &encoder_state); 562 adpcm_coder( sbuf, abuf, result/2, &encoder_state);
555 bytesWritten = ::write(wav, abuf, result/4); 563 bytesWritten = ::write(wav, abuf, result/4);
556 564
557 } else { 565 } else {
558 for (int i = 0; i < result; i++) { //since Z is mono do normally 566 for (int i = 0; i < result; i++) { //since Z is mono do normally
559 monoBuffer[i] = sound[i]; 567 monoBuffer[i] = sound[i];
@@ -574,49 +582,49 @@ bool VMemo::record() {
574 // fflush(stdout); 582 // fflush(stdout);
575 qApp->processEvents(); 583 qApp->processEvents();
576 } 584 }
577 // qDebug("file has length of %d lasting %d seconds", 585 // qDebug("file has length of %d lasting %d seconds",
578 // length, (( length / speed) / channels) / 2 ); 586 // length, (( length / speed) / channels) / 2 );
579 // } 587 // }
580 588
581 //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<// 589 //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<//
582 590
583 value = length+36; 591 value = length+36;
584 592
585 lseek(wav, 4, SEEK_SET); 593 lseek(wav, 4, SEEK_SET);
586 write(wav, &value, 4); 594 write(wav, &value, 4);
587 lseek(wav, 40, SEEK_SET); 595 lseek(wav, 40, SEEK_SET);
588 596
589 write(wav, &length, 4); 597 write(wav, &length, 4);
590 598
591 track.close(); 599 track.close();
592 qDebug("Track closed"); 600 qDebug("Track closed");
593 601
594 if( ioctl( dsp, SNDCTL_DSP_RESET,0) == -1) 602 if( ioctl( dsp, SNDCTL_DSP_RESET,0) == -1)
595 perror("ioctl(\"SNDCTL_DSP_RESET\")"); 603 perror("ioctl(\"SNDCTL_DSP_RESET\")");
596 604
597 ::close(dsp); 605 ::close(dsp);
598 fileName = fileName.left(fileName.length()-4); 606
599 // if(useAlerts) 607 // if(useAlerts)
600 // QMessageBox::message("Vmemo"," Done1 recording\n"+ fileName); 608 // QMessageBox::message("Vmemo"," Done1 recording\n"+ fileName);
601 qDebug("done recording "+fileName); 609 qDebug("done recording "+fileName);
602 610
603// QSound::play(Resource::findSound("vmemoe")); 611// QSound::play(Resource::findSound("vmemoe"));
604 612
605 Config cfg("qpe"); 613 Config cfg("qpe");
606 cfg.setGroup("Volume"); 614 cfg.setGroup("Volume");
607 QString foo = cfg.readEntry("Mute","TRUE"); 615 QString foo = cfg.readEntry("Mute","TRUE");
608 if(foo.find("TRUE",0,TRUE) != -1) 616 if(foo.find("TRUE",0,TRUE) != -1)
609 QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << TRUE; //mute 617 QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << TRUE; //mute
610return TRUE; 618return TRUE;
611} 619}
612 620
613int VMemo::setToggleButton(int tog) { 621int VMemo::setToggleButton(int tog) {
614 622
615 for( int i=0; i < 10;i++) { 623 for( int i=0; i < 10;i++) {
616 switch (tog) { 624 switch (tog) {
617 case 0: 625 case 0:
618 return -1; 626 return -1;
619 break; 627 break;
620 case 1: 628 case 1:
621 return 0; 629 return 0;
622 break; 630 break;