-rw-r--r-- | core/applets/vmemo/vmemo.cpp | 116 |
1 files changed, 60 insertions, 56 deletions
diff --git a/core/applets/vmemo/vmemo.cpp b/core/applets/vmemo/vmemo.cpp index 1ead4dd..835f63a 100644 --- a/core/applets/vmemo/vmemo.cpp +++ b/core/applets/vmemo/vmemo.cpp @@ -248,49 +248,49 @@ int VMemo::position() { return 6; } void VMemo::receive( const QCString &msg, const QByteArray &data ) { odebug << "Vmemo receive" << oendl; QDataStream stream( data, IO_ReadOnly ); if (msg == "toggleRecord()") { if (recording) { fromToggle = TRUE; stopRecording(); } else { fromToggle = TRUE; startRecording(); } } } void VMemo::paintEvent( QPaintEvent* ) { QPainter p(this); p.drawPixmap( 0, 1,( const char** ) vmemo_xpm ); } -void VMemo::mousePressEvent( QMouseEvent * me) { +void VMemo::mousePressEvent( QMouseEvent * /*me*/) { /* No mousePress/mouseRelease recording on the iPAQ. The REC button on the iPAQ calls these functions mousePressEvent and mouseReleaseEvent with a NULL parameter. */ // if (!systemZaurus && me != NULL) // return; // } if(!recording) startRecording(); else stopRecording(); } void VMemo::mouseReleaseEvent( QMouseEvent * ) { } bool VMemo::startRecording() { Config config( "Vmemo" ); config.setGroup( "System" ); useAlerts = config.readBoolEntry("Alert",1); if(useAlerts) { msgLabel = new QLabel( 0, "alertLabel" ); @@ -464,146 +464,150 @@ int VMemo::openWAV(const char *filename) { wh.length=0; wh.chunk_type = WAVE; wh.sub_chunk = FMT; wh.sc_len = 16; if(useADPCM) wh.format = WAVE_FORMAT_DVI_ADPCM;//PCM_CODE; else wh.format = PCM_CODE; wh.modus = channels; wh.sample_fq = speed; wh.byte_p_sec = speed * channels * resolution/8; wh.byte_p_spl = channels * (resolution / 8); wh.bit_p_spl = resolution; wh.data_chunk = DATA; wh.data_length= 0; // qDebug("Write header channels %d, speed %d, b/s %d, blockalign %d, bitrate %d" // , wh.modus, wh.sample_fq, wh.byte_p_sec, wh.byte_p_spl, wh.bit_p_spl ); write (wav, &wh, sizeof(WaveHeader)); return 1; } bool VMemo::record() { length = 0; - int result, value; + int bytesWritten = 0; + int result = 0; + int value = 0; QString msg; msg.sprintf("Recording format %d", format); odebug << msg << oendl; Config config("Vmemo"); config.setGroup("Record"); - int sRate=config.readNumEntry("SizeLimit", 30); + int sRate = config.readNumEntry("SizeLimit", 30); if(sRate > 0) t_timer->start( sRate * 1000+1000, TRUE); -// if(systemZaurus) { -// } else { // 16 bit only capabilities - msg.sprintf("Recording format other"); odebug << msg << oendl; + config.setGroup("Defaults"); + useADPCM = config.readBoolEntry("use_ADPCM", 0); - int bytesWritten = 0; - - Config vmCfg("Vmemo"); - vmCfg.setGroup("Defaults"); - useADPCM = vmCfg.readBoolEntry("use_ADPCM", 0); - - int bufsize = vmCfg.readNumEntry("BufferSize",1024); - signed short sound[bufsize], monoBuffer[bufsize]; + int bufsize = config.readNumEntry("BufferSize",1024); + unsigned short sound[bufsize]; //, monoBuffer[bufsize]; char abuf[bufsize / 2]; short sbuf[bufsize]; - while(recording) { - - if(useADPCM) - result = ::read(dsp, sbuf, bufsize); // 8192 - else - result = ::read(dsp, sound, bufsize); // 8192 - if( result <= 0) { - perror("recording error "); -// odebug << currentFileName << oendl; - QMessageBox::message(tr("Note"),tr("error recording")); - recording = FALSE; - break; - return FALSE; - } - - if(useADPCM) { - adpcm_coder( sbuf, abuf, result/2, &encoder_state); - bytesWritten = ::write(wav, abuf, result/4); - - } else { -// for (int i = 0; i < result; i++) { //since Z is mono do normally -// monoBuffer[i] = sound[i]; -// } - - length += write(wav, sound, result); - } - length += bytesWritten; - - if(length<0) { - recording = false; - perror("dev/dsp's is a lookin' messy"); - QMessageBox::message("Vmemo","Error writing to file\n"+ fileName); - break; - return FALSE; + if(useADPCM) { + while(recording) { + result = ::read(dsp, sbuf, bufsize); // adpcm read + if( result <= 0) { + perror("recording error "); + QMessageBox::message(tr("Note"),tr("error recording")); + recording = FALSE; + break; + return FALSE; + } + adpcm_coder( sbuf, abuf, result/2, &encoder_state); + bytesWritten = ::write(wav, abuf, result/4); // adpcm write + length += bytesWritten; + + if(length < 0) { + recording = false; + perror("dev/dsp's is a lookin' messy"); + QMessageBox::message("Vmemo","Error writing to file\n"+ fileName); + break; + return FALSE; + } + // printf("%d\r", length); + // fflush(stdout); + qApp->processEvents(); } - // odebug << "" << length << "\r" << oendl; - // fflush(stdout); - qApp->processEvents(); - } + } else { + while(recording) { + result = ::read(dsp, sound, bufsize); // read + if( result <= 0) { + perror("recording error "); + QMessageBox::message(tr("Note"),tr("error recording")); + recording = FALSE; + break; + return FALSE; + + bytesWritten = ::write(wav, sound, result); // write + length += bytesWritten; + + if(length < 0) { + recording = false; + perror("dev/dsp's is a lookin' messy"); + QMessageBox::message("Vmemo","Error writing to file\n"+ fileName); + break; + return FALSE; + } + // printf("%d\r", length); + // fflush(stdout); + qApp->processEvents(); + } + } + } // qDebug("file has length of %d lasting %d seconds", // length, (( length / speed) / channels) / 2 ); - // } - - //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<// value = length + 36; lseek(wav, 4, SEEK_SET); write(wav, &value, 4); lseek(wav, 40, SEEK_SET); write(wav, &length, 4); track.close(); odebug << "Track closed" << oendl; if( ioctl( dsp, SNDCTL_DSP_RESET,0) == -1) perror("ioctl(\"SNDCTL_DSP_RESET\")"); ::close(dsp); Config cfgO("OpieRec"); cfgO.setGroup("Sounds"); int nFiles = cfgO.readNumEntry( "NumberofFiles",0); QString currentFileName = fileName; QString currentFile = "vm_"+ date; - float numberOfRecordedSeconds=(float) length / (float)speed * (float)2; + float numberOfRecordedSeconds = (float) length / (float)speed * (float)2; cfgO.writeEntry( "NumberofFiles", nFiles + 1); cfgO.writeEntry( QString::number( nFiles + 1), currentFile); cfgO.writeEntry( currentFile, currentFileName); QString time; time.sprintf("%.2f", numberOfRecordedSeconds); cfgO.writeEntry( currentFileName, time ); // odebug << "writing config numberOfRecordedSeconds "+time << oendl; cfgO.write(); odebug << "done recording "+fileName << oendl; Config cfg("qpe"); cfg.setGroup("Volume"); QString foo = cfg.readEntry("Mute","TRUE"); if(foo.find("TRUE",0,TRUE) != -1) QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << TRUE; //mute return TRUE; } int VMemo::setToggleButton(int tog) { |