-rw-r--r-- | noncore/multimedia/opierec/device.cpp | 51 | ||||
-rw-r--r-- | noncore/multimedia/opierec/device.h | 3 | ||||
-rw-r--r-- | noncore/multimedia/opierec/main.cpp | 3 | ||||
-rw-r--r-- | noncore/multimedia/opierec/opierec.control | 2 | ||||
-rw-r--r-- | noncore/multimedia/opierec/opierec.pro | 23 | ||||
-rw-r--r-- | noncore/multimedia/opierec/qtrec.cpp | 983 | ||||
-rw-r--r-- | noncore/multimedia/opierec/qtrec.h | 11 | ||||
-rw-r--r-- | noncore/multimedia/opierec/wavFile.cpp | 13 | ||||
-rw-r--r-- | noncore/multimedia/opierec/wavFile.h | 1 |
9 files changed, 540 insertions, 550 deletions
diff --git a/noncore/multimedia/opierec/device.cpp b/noncore/multimedia/opierec/device.cpp index 11071d8..ce49e96 100644 --- a/noncore/multimedia/opierec/device.cpp +++ b/noncore/multimedia/opierec/device.cpp @@ -6,3 +6,3 @@ #include <qpe/qcopenvelope_qws.h> -#include <qpe/custom.h> + @@ -40,3 +40,5 @@ Device::Device( QObject * parent, const char * dsp, const char * mixr, bool reco // flags = O_RDONLY; - selectMicInput(); + +// selectMicInput(); + } @@ -96,2 +98,3 @@ void Device::changedOutVolume(int vol) { QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << false; + qWarning("changing output vol %d", vol); } @@ -110,2 +113,3 @@ void Device::changedInVolume(int vol ) { QCopEnvelope( "QPE/System", "micChange(bool)" ) << false; + qWarning("changing input volume %d", vol); } @@ -115,3 +119,3 @@ void Device::changedInVolume(int vol ) { bool Device::selectMicInput() { -/* + int md=0; @@ -128,3 +132,3 @@ bool Device::selectMicInput() { ::close(md); -*/ + return true; @@ -147,2 +151,3 @@ exit(1); */ +qDebug("Opening %s",dspstr); if (( sd = ::open( dspstr, flags)) == -1) { @@ -151,3 +156,3 @@ exit(1); +(QString)strerror(errno); - qDebug(errorMsg); + qDebug("XXXXXXXXXXXXXXXXXXXXXXX "+errorMsg); return -1; @@ -155,6 +160,9 @@ exit(1); +qDebug("Opening mixer"); int mixerHandle=0; - /* Set the input dsp device and its input gain the weird Zaurus way */ - if (( mixerHandle = open("/dev/mixer1",O_RDWR))<0) { - perror("open(\"/dev/mixer1\")"); + if (( mixerHandle = open("/dev/mixer",O_RDWR))<0) { + perror("open(\"/dev/mixer\")"); + QString errorMsg="Could not open audio device\n /dev/dsp\n" + +(QString)strerror(errno); + qDebug("XXXXXXXXXXXXXXXXXXXXXX "+errorMsg); } @@ -205,4 +213,4 @@ exit(1); ::close(mixerHandle ); - qDebug("open device %s", dspstr); - qDebug("success! %d",sd); +// qDebug("open device %s", dspstr); +// qDebug("success! %d",sd); return sd; @@ -210,3 +218,3 @@ exit(1); -bool Device::closeDevice( bool b) { +bool Device::closeDevice( bool) { // if(b) {//close now @@ -224,3 +232,3 @@ bool Device::closeDevice( bool b) { // sd=0; - qDebug("closed dsp"); +// qDebug("closed dsp"); return true; @@ -292,3 +300,3 @@ int Device::getDeviceBits() { int dBits=0; -#if !defined(OPIE_NO_SOUND_PCM_READ_BITS) // zaurus doesnt have this +#ifndef QT_QWS_EBX // zaurus doesnt have this if (ioctl( sd, SOUND_PCM_READ_BITS, &dBits) == -1) { @@ -313,4 +321,5 @@ int Device::getDeviceFragSize() { qDebug("no fragsize"); - } else + } else { qDebug("driver says frag size is %d", frag_size); + } return frag_size; @@ -335 +344,15 @@ bool Device::reset() { } + +int Device::devRead(int soundDescriptor, short *buf, int size) { + int number = 0; + number = ::read( soundDescriptor, (char *)buf, size); + return number; +} + +int Device::devWrite(int soundDescriptor, short * buf, int size) { + int bytesWritten = 0; + bytesWritten = ::write( soundDescriptor, buf, size); + return bytesWritten; +} + + diff --git a/noncore/multimedia/opierec/device.h b/noncore/multimedia/opierec/device.h index f92be98..8152e85 100644 --- a/noncore/multimedia/opierec/device.h +++ b/noncore/multimedia/opierec/device.h @@ -33,2 +33,5 @@ bool reset(); + int devRead(int, short *, int); + int devWrite(int, short *, int); + private: diff --git a/noncore/multimedia/opierec/main.cpp b/noncore/multimedia/opierec/main.cpp index 4a94800..e36d050 100644 --- a/noncore/multimedia/opierec/main.cpp +++ b/noncore/multimedia/opierec/main.cpp @@ -16 +16,4 @@ OPIE_EXPORT_APP( OApplicationFactory<QtRec> ) + + + diff --git a/noncore/multimedia/opierec/opierec.control b/noncore/multimedia/opierec/opierec.control index cb97933..b01406e 100644 --- a/noncore/multimedia/opierec/opierec.control +++ b/noncore/multimedia/opierec/opierec.control @@ -1,3 +1,3 @@ Package: opierec -Files: plugins/application/libopierec.so* bin/opierec pics/opierec apps/Applications/opierec.desktop +Files: bin/opierec pics/opierec apps/Applications/opierec.desktop Priority: optional diff --git a/noncore/multimedia/opierec/opierec.pro b/noncore/multimedia/opierec/opierec.pro index 7dbc4f7..b607c09 100644 --- a/noncore/multimedia/opierec/opierec.pro +++ b/noncore/multimedia/opierec/opierec.pro @@ -1,7 +1,20 @@ -CONFIG = qt warn_on debug +CONFIG = qt warn_on release #CONFIG = qt warn_on release quick-app -HEADERS = adpcm.h pixmaps.h qtrec.h device.h wavFile.h -SOURCES = adpcm.c main.cpp qtrec.cpp device.cpp wavFile.cpp +HEADERS = adpcm.h \ + pixmaps.h \ + helpwindow.h \ + qtrec.h \ + device.h \ + wavFile.h \ + waveform.h +SOURCES = adpcm.c \ + helpwindow.cpp \ + main.cpp \ + qtrec.cpp \ + device.cpp \ + wavFile.cpp \ + waveform.cpp INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include +#LIBS += -L/opt/buildroot-opie/output/staging/target/lib -lqpe -lpthread -ljpeg -lpng -lz LIBS += -lqpe -lpthread @@ -9,3 +22,5 @@ INTERFACES = TARGET = opierec -#TMAKE_CXXFLAGS += -DQT_QWS_VERCEL_IDR -DQWS -fno-exceptions -fno-rtti +DESTDIR=$(OPIEDIR)/bin + include ( $(OPIEDIR)/include.pro ) + diff --git a/noncore/multimedia/opierec/qtrec.cpp b/noncore/multimedia/opierec/qtrec.cpp index 1e36c96..aeab26d 100644 --- a/noncore/multimedia/opierec/qtrec.cpp +++ b/noncore/multimedia/opierec/qtrec.cpp @@ -10,2 +10,4 @@ #include "qtrec.h" +#include "waveform.h" +#include "device.h" @@ -19,6 +21,2 @@ extern "C" { -// #if defined (QTOPIA_INTERNAL_FSLP) -// #include <qpe/lnkproperties.h> -// #endif - #include <qpe/config.h> @@ -60,2 +58,19 @@ extern "C" { +#if defined(QT_QWS_SL5XXX) +///#if defined(QT_QWS_EBX) + +#define DSPSTROUT "/dev/dsp" +#define DSPSTRIN "/dev/dsp1" +#define DSPSTRMIXEROUT "/dev/mixer" +#define DSPSTRMIXERIN "/dev/mixer1" + +#else + +#define DSPSTROUT "/dev/dsp" +#define DSPSTRIN "/dev/dsp" +#define DSPSTRMIXERIN "/dev/mixer" +#define DSPSTRMIXEROUT "/dev/mixer" + +#endif + //#define ZAURUS 0 @@ -64,5 +79,2 @@ struct adpcm_state decoder_state; -long findPeak(long input ); -//char deviceRates[]; - typedef struct { @@ -87,3 +99,3 @@ fileParameters filePara; -bool monitoring, recording; +bool monitoring, recording, playing; bool stopped; @@ -93,18 +105,16 @@ int sd; -// #if defined(QT_QWS_EBX) -// #define DSPSTROUT "/dev/dsp" -// #define DSPSTRIN "/dev/dsp1" -// #define DSPSTRMIXEROUT "/dev/mixer" -// #define DSPSTRMIXERIN "/dev/mixer1" -// #else -#define DSPSTROUT "/dev/dsp" -#define DSPSTRIN "/dev/dsp" -#define DSPSTRMIXERIN "/dev/mixer" -#define DSPSTRMIXEROUT "/dev/mixer" -//#endif +Waveform* waveform; +Device *soundDevice; // threaded recording -void quickRec() { +//fuckin fulgy here +void quickRec() +{ //void QtRec::quickRec() { + qDebug("%d", + filePara.numberSamples/filePara.sampleRate * filePara.channels); + qDebug("samples %d, rate %d, channels %d", + filePara.numberSamples, filePara.sampleRate, filePara.channels); + int total = 0; // Total number of bytes read in so far. @@ -112,24 +122,16 @@ void quickRec() { - count_info info; - bytesWritten=0; number=0; - QString num, timeString; + QString num; int level=0; int threshold=0; - // if(limit != 0) - // t->start( ( limit +.3) , true); - - recording = true; - //rate=filePara.sampleRate; // int bits = filePara.resolution; - audio_buf_info inInfo; - ioctl( filePara.fd, SNDCTL_DSP_GETISPACE, &inInfo); - // qDebug("ispace is frags %d, total %d", inInfo.fragments, inInfo.fragstotal); +// qDebug("bits %d", bits); if( filePara.resolution == 16 ) { //AFMT_S16_LE) +// qDebug("AFMT_S16_LE size %d", filePara.SecondsToRecord); +// qDebug("samples to record %d", filePara.samplesToRecord); +// qDebug("%d", filePara.sd); level=7; threshold=0; - timeString.sprintf("%.2f", filePara.numberOfRecordedSeconds); - timeLabel->setText( timeString+ " seconds"); @@ -137,2 +139,3 @@ void quickRec() { // qDebug("start recording WAVE_FORMAT_DVI_ADPCM"); + // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_DVI_ADPCM >>>>>>>>>>>>>>>>>>>>>> char abuf[BUFSIZE/2]; @@ -146,12 +149,13 @@ void quickRec() { if (stopped) { - break; // stop if playing was set to false + qDebug("quickRec:: stopped"); + break; } - number=::read( filePara.sd, sbuf, BUFSIZE); +// number=::read( filePara.sd, sbuf, BUFSIZE); + number = soundDevice ->devRead( filePara.sd, sbuf, BUFSIZE); + if(number <= 0) { perror("recording error "); - // qDebug( "%s %d", filePara.fileName, number); - // errorStop(); - recording=stopped=false; -// QMessageBox::message("Note", "Error recording to file\n%s",filePara.fileName); + qDebug( "%s %d", filePara.fileName, number); + stopped = true; return; @@ -161,32 +165,20 @@ void quickRec() { adpcm_coder( sbuf, abuf, number/2, &encoder_state); - bytesWritten = ::write( filePara.fd , abuf, number/4); - long peak; - for (int i = 0; i < number; i++) - { //since Z is mono do normally - peak = findPeak((long)sbuf[i]); - printf("peak %ld\r",peak); - fflush(stdout); - } - //------------->>>> out to file - // if(filePara.channels==1) - // total += bytesWritten/2; //mono - // else + bytesWritten = soundDevice->devWrite( filePara.fd , (short *)abuf, number/4); + waveform->newSamples( (const short *)abuf, bytesWritten ); + total += bytesWritten; filePara.numberSamples = total; -// if( total >= filePara.samplesToRecord) -// timeSlider->setValue(0); -// else if( filePara.SecondsToRecord !=0) timeSlider->setValue( total); - filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate * (float)2; - ioctl( filePara.sd, SNDCTL_DSP_GETIPTR, &info); - timeString.sprintf("%.2f", filePara.numberOfRecordedSeconds); - timeLabel->setText( timeString + " seconds"); + filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate * (float)2 / filePara.channels; qApp->processEvents(); - if( total >= filePara.samplesToRecord) + if( total >= filePara.samplesToRecord) { + stopped = true; break; } + } } else { - // qDebug("start recording WAVE_FORMAT_PCM"); + // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_PCM >>>>>>>>>>>>>>>>>>>>>> + qDebug("start recording WAVE_FORMAT_PCM"); short inbuffer[BUFSIZE], outbuffer[BUFSIZE]; @@ -194,37 +186,33 @@ void quickRec() { memset( outbuffer,0,BUFSIZE); + for(;;) { if (stopped) { + qDebug("quickRec:: stopped"); + stopped = true; break; // stop if playing was set to false + return; } - number=::read( filePara.sd, inbuffer, BUFSIZE); + number = soundDevice ->devRead( filePara.sd, (short *)inbuffer, BUFSIZE); + waveform->newSamples( inbuffer, number ); + if(number <= 0) { perror("recording error "); - recording=stopped=false; - // errorStop(); - return;// false; + qDebug( filePara.fileName); + stopped = true; + return; } -/* for (int i=0;i< number;i++) { //2*i is left channel -outbuffer[i]=inbuffer[i]>>1; // no clippy, please -}*/ - bytesWritten = ::write( filePara.fd , inbuffer, number); -//------------->>>> out to file + + bytesWritten = soundDevice->devWrite( filePara.fd , inbuffer, number); + if(bytesWritten < 0) { - // errorStop(); perror("File writing error "); - return;// false; + stopped = true; + return; } - // if(filePara.channels==1) - // total += bytesWritten/2; //mono - // else total += bytesWritten; - long peak; - for (int i = 0; i < number; i++) - { //since Z is mono do normally - peak = findPeak((long)inbuffer[i]); - printf("peak %ld\r",peak); - fflush(stdout); - } + filePara.numberSamples = total; + if(filePara.SecondsToRecord !=0) @@ -234,12 +222,11 @@ outbuffer[i]=inbuffer[i]>>1; // no clippy, please - ioctl( filePara.sd, SNDCTL_DSP_GETIPTR, &info); -// qDebug("%d, %d", info.bytes, ( info.bytes / filePara.sampleRate) / 2); + filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate / (float)2/filePara.channels; - filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate / (float)2; - timeString.sprintf("%.2f", filePara.numberOfRecordedSeconds); - timeLabel->setText( timeString + " seconds"); qApp->processEvents(); - if( total >= filePara.samplesToRecord) + + if( total >= filePara.samplesToRecord) { + stopped = true; break; } + } } //end main loop @@ -253,32 +240,16 @@ outbuffer[i]=inbuffer[i]>>1; // no clippy, please if (stopped) { - // qDebug("quickRec:: stopped"); + qDebug("quickRec:: stopped"); break; // stop if playing was set to false } - number=::read( filePara.sd, unsigned_inbuffer, BUFSIZE); -//-------------<<<< in from device -// val = (data ^ 0x80) << 8; - -//unsigned_outbuffer = (unsigned_inbuffer ^ 0x80) << 8; - -// if(number <= 0) { -// perror("recording error "); -// qDebug(filePara.fileName); -// // errorStop(); -// QMessageBox::message("Note","error recording"); -// return;// false; -// } -// for (int i=0;i< number;i++) { //2*i is left channel -// unsigned_outbuffer[i]=unsigned_inbuffer[i]>>1; // no clippy, please -// } + number = ::read( filePara.sd, unsigned_inbuffer, BUFSIZE); bytesWritten = ::write( filePara.fd , unsigned_inbuffer, number); -//------------->>>> out to file if(bytesWritten < 0) { - recording=stopped=false; - // errorStop(); + stopped = true; QMessageBox::message("Note","There was a problem\nwriting to the file"); perror("File writing error "); - return;// false; + return; } + total += bytesWritten; @@ -292,16 +263,140 @@ outbuffer[i]=inbuffer[i]>>1; // no clippy, please - timeString.sprintf("%.2f",filePara.numberOfRecordedSeconds); - timeLabel->setText( timeString + " seconds"); - qApp->processEvents(); - if( total >= filePara.samplesToRecord) + if( total >= filePara.samplesToRecord) { + stopped = true; break; + } } //end main loop } -// qDebug("Final %d, %d", filePara.samplesToRecord , filePara.numberOfRecordedSeconds); } /// END quickRec() -// threaded play -void playIt() { +void playIt() +{ + int bytesWritten, number; + int total = 0; // Total number of bytes read in so far. + if( filePara.resolution == 16 ) { //AFMT_S16_LE) { + if( filePara.format == WAVE_FORMAT_DVI_ADPCM) { + char abuf[ BUFSIZE / 2 ]; + short sbuf[ BUFSIZE ]; + short sbuf2[ BUFSIZE * 2 ]; + memset( abuf, 0, BUFSIZE / 2); + memset( sbuf, 0, BUFSIZE); + memset( sbuf2, 0, BUFSIZE * 2); +// <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_DVI_ADPCM >>>>>>>>>>>>>>>>>>>>>> + for(;;) { // play loop + if ( stopped) { + break; + return; + }// stop if playing was set to false + + number = ::read( filePara.fd, abuf, BUFSIZE / 2); + adpcm_decoder( abuf, sbuf, number * 2, &decoder_state); + +// for (int i=0;i< number * 2; 2 * i++) { //2*i is left channel +// sbuf2[i+1]=sbuf2[i]=sbuf[i]; +// } + bytesWritten = write ( filePara.sd, sbuf, number * 4); + waveform->newSamples( (const short *)sbuf, number ); + // if(filePara.channels==1) + // total += bytesWritten/2; //mono + // else + total += bytesWritten; + filePara.numberSamples = total/4; + filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate / 2; + + timeSlider->setValue( total/4); +// timeString.sprintf("%.2f", filePara.numberOfRecordedSeconds); +// if(filePara.numberOfRecordedSeconds>1) +// timeLabel->setText( timeString+ tr(" seconds")); + printf("playing number %d, bytes %d, total %d\n",number, bytesWritten, total/4); + fflush(stdout); + + qApp->processEvents(); + + if( /*total >= filePara.numberSamples || */ bytesWritten == 0) { +// if( total >= filePara.numberSamples ){//|| secCount > filePara.numberOfRecordedSeconds ) { + stopped = true; + break; + } + } + } else { + // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_PCM >>>>>>>>>>>>>>>>>>>>>> + short inbuffer[ BUFSIZE ], outbuffer[ BUFSIZE ]; + memset( inbuffer, 0, BUFSIZE); + memset( outbuffer, 0, BUFSIZE); + + for(;;) { // play loop + if ( stopped) { + break; + return; + } +// stop if playing was set to false + number = ::read( filePara.fd, inbuffer, BUFSIZE); +// for (int i=0;i< number * 2; 2 * i++) { //2*i is left channel +// // for (int i=0;i< number ; i++) { //2*i is left channel +// outbuffer[i+1]= outbuffer[i]=inbuffer[i]; +// } + bytesWritten = ::write( filePara.sd, inbuffer, number); + waveform->newSamples( inbuffer, bytesWritten ); + //-------------->>>> out to device + // total+=bytesWritten; + // if(filePara.channels==1) + // total += bytesWritten/2; //mono + // else + total += bytesWritten; + timeSlider->setValue( total); + + filePara.numberSamples = total; + filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate / (float)2; + +// timeString.sprintf("%.2f",filePara.numberOfRecordedSeconds); +// timeLabel->setText( timeString + tr(" seconds")); + + qApp->processEvents(); + + if( /*total >= filePara.numberSamples || */ bytesWritten == 0) { + qWarning("Jane! Stop this crazy thing!"); + stopped = true; +// playing = false; + break; + } + } + printf("\nplaying number %d, bytes %d, total %d\r",number, bytesWritten, total); + fflush(stdout); + } //end loop + } else { +/////////////////////////////// format = AFMT_U8; + unsigned char unsigned_inbuffer[ BUFSIZE ]; //, unsigned_outbuffer[BUFSIZE]; + memset( unsigned_inbuffer, 0, BUFSIZE); + for(;;) { +// main loop + if (stopped) { + break; // stop if playing was set to false + return; + } + number = ::read( filePara.fd, unsigned_inbuffer, BUFSIZE); +//data = (val >> 8) ^ 0x80; + // unsigned_outbuffer = (unsigned_inbuffer >> 8) ^ 0x80; + bytesWritten = write ( filePara.sd, unsigned_inbuffer, number); + waveform->newSamples( (const short *)unsigned_inbuffer, bytesWritten ); + total += bytesWritten; + + timeSlider->setValue( total); + filePara.numberSamples = total; + + filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate; +// timeString.sprintf("%.2f",filePara.numberOfRecordedSeconds); +// timeLabel->setText( timeString + tr(" seconds")); + qApp->processEvents(); + + if( /*total >= filePara.numberSamples || */ bytesWritten == 0) { +// if( total >= filePara.numberSamples ) { + stopped = true; + break; + } + printf("Writing number %d, bytes %d, total %d, numberSamples %d\r",number, bytesWritten , total, filePara.numberSamples); + fflush(stdout); + } + } } @@ -309,8 +404,6 @@ void playIt() { /////////////////<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>> -QtRec::QtRec( QWidget* parent, const char* name, WFlags fl ) - : QWidget( parent, name, fl ) { - // QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << true; // mute device - // autoMute=TRUE; -// QPEApplication::grabKeyboard(); +QtRec::QtRec( QWidget* parent, const char* name, WFlags fl ) + : QWidget( parent, name, fl ) +{ if ( !name ) @@ -365,4 +458,2 @@ void QtRec::cleanUp() { // if(soundDevice) delete soundDevice; -// QPEApplication::grabKeyboard(); -// QPEApplication::ungrabKeyboard(); } @@ -394,5 +485,3 @@ void QtRec::init() { timeSlider = new QSlider( 0,100,10,0, QSlider::Horizontal, tab, (const char *) "timeSlider" ); - // timeSlider->setFixedWidth(150); layout1->addMultiCellWidget( timeSlider, 1, 1, 0, 3); -// timeSlider->setTickmarks(QSlider::Above); @@ -436,6 +525,8 @@ void QtRec::init() { rewindTimer = new QTimer( this ); - connect( rewindTimer, SIGNAL( timeout() ), SLOT( rewindTimerTimeout() ) ); + connect( rewindTimer, SIGNAL( timeout() ), + this, SLOT( rewindTimerTimeout() ) ); forwardTimer = new QTimer( this ); - connect( forwardTimer, SIGNAL( timeout() ), SLOT( forwardTimerTimeout() ) ); + connect( forwardTimer, SIGNAL( timeout() ), + this, SLOT( forwardTimerTimeout() ) ); @@ -469,16 +560,6 @@ void QtRec::init() { tab_3 = new QWidget( TabWidget, "tab_3" ); + QGridLayout *glayout3 = new QGridLayout( tab_3 ); + glayout3->setSpacing( 2); + glayout3->setMargin( 2); //////////////////////////////////// - - Layout19 = new QHBoxLayout( tab_3); - Layout19->setSpacing( 2 ); - Layout19->setMargin( 0 ); - - Layout18 = new QVBoxLayout(this); - Layout18->setSpacing( 2 ); - Layout18->setMargin( 0 ); - - Layout17 = new QHBoxLayout(this); - Layout17->setSpacing( 2 ); - Layout17->setMargin( 0 ); - sampleGroup = new QGroupBox( tab_3, "samplegroup" ); @@ -500,3 +581,3 @@ void QtRec::init() { - Layout17->addWidget( sampleGroup ); + glayout3->addMultiCellWidget( sampleGroup, 0, 0, 0, 0); @@ -509,2 +590,3 @@ void QtRec::init() { sizeLimitCombo->insertItem(tr("Unlimited")); + for(int i=1;i<13; i++) { @@ -513,16 +595,4 @@ void QtRec::init() { -// sizeLimitCombo->insertItem(tr("5 secs")); -// sizeLimitCombo->insertItem(tr("10 secs")); -// sizeLimitCombo->insertItem(tr("15 secs")); -// sizeLimitCombo->insertItem(tr("20 secs")); - - // Layout18->addWidget( sizeGroup ); - Layout17->addWidget( sizeGroup ); - - Layout18->addLayout( Layout17 ); - - Layout16 = new QHBoxLayout(this); - Layout16->setSpacing( 2 ); - Layout16->setMargin( 0 ); + glayout3->addMultiCellWidget( sizeGroup, 0, 0, 1, 1); dirGroup = new QGroupBox( tab_3, "dirGroup" ); @@ -534,3 +604,3 @@ void QtRec::init() { - Layout18->addWidget( dirGroup ); + glayout3->addMultiCellWidget( dirGroup, 1, 1, 0, 0); @@ -545,11 +615,12 @@ void QtRec::init() { - Layout18->addWidget( bitGroup ); + glayout3->addMultiCellWidget( bitGroup, 1, 1, 1, 1); compressionCheckBox = new QCheckBox ( tr("Wave Compression (smaller files)"), tab_3 ); - Layout18->addWidget( compressionCheckBox ); - autoMuteCheckBox= new QCheckBox ( tr("auto Mute"), tab_3 ); - Layout18->addWidget( autoMuteCheckBox ); + autoMuteCheckBox = new QCheckBox ( tr("Auto Mute"), tab_3 ); + stereoCheckBox = new QCheckBox ( tr("Stereo Channels"), tab_3 ); - Layout19->addLayout( Layout18 ); + glayout3->addMultiCellWidget( compressionCheckBox, 2, 2, 0, 3); + glayout3->addMultiCellWidget( autoMuteCheckBox, 3, 3, 0, 0); + glayout3->addMultiCellWidget( stereoCheckBox, 3, 3, 1, 1); @@ -559,4 +630,2 @@ void QtRec::init() { - - if( width < height) { @@ -570,3 +639,2 @@ void QtRec::init() { - Layout15 = new QVBoxLayout(this); @@ -636,3 +704,3 @@ void QtRec::init() { InputSlider = new QSlider( -100, 0, 10, 0, QSlider::Vertical, tab_3, (const char *) "InputSlider" ); - // InputSlider->setTickmarks(QSlider::Both); + InputSlider->setTickmarks(QSlider::Both); Layout15->addWidget( InputSlider); @@ -640,3 +708,3 @@ void QtRec::init() { OutputSlider = new QSlider( -100,0,10,0, QSlider::Vertical,tab_3,(const char *) "OutputSlider" ); - // OutputSlider->setTickmarks(QSlider::Both); + OutputSlider->setTickmarks(QSlider::Both); @@ -661,31 +729,8 @@ void QtRec::init() { + waveform = new Waveform( this, "waveform" ); +// waveform->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)3, waveform->sizePolicy().hasHeightForWidth() ) ); + waveform->setMinimumSize( QSize( 0, 50 ) ); - ///**********<<<<<<<<<<<<>>>>>>>>>>>>*************** - -// tab_4 = new QWidget( TabWidget, "tab_4" ); -// QGridLayout *layout4 = new QGridLayout( tab_4); -// layout4->setSpacing( 2); -// layout4->setMargin( 2); -// TabWidget->insertTab( tab_4, tr( "Help")); - -// ///////////////////////////////////////////// FIXME change to a real helpfile path -// QString url="/index.html"; -// HelpWindow *help = new HelpWindow( url, ".", tab_4, "opierec_help"); -// layout4->addMultiCellWidget( help, 0, 1, 0, 1); -// if( !QFile(url).exists()) { -// help->hide(); -// //help->showMaximized(); -// QLabel *helpLabel; -// helpLabel = new QLabel( tab_4, "TimeLabel" ); -// layout4->addMultiCellWidget( helpLabel, 0, 3, 0, 4 ); -// helpLabel->setText( "<B>OpieRec</B><br>" -// "Records files in standard wav format<br>" -// "or a compressed version<br>" -// "For help, please email the author<br>" -// "<B>OpieRec</B> is copyright© 2002 by" -// " L.J. Potter<br>llornkcor@handhelds.org<BR>" -// "and is licensed under the <B>QPL</B>"); -// } - ///**********<<<<<<<<<<<<>>>>>>>>>>>>*************** - + layout->addMultiCellWidget( waveform, 8, 8, 0, 7 ); + waveform->setBackgroundColor ( black ); } @@ -700,4 +745,5 @@ void QtRec::initIconView() { - int nFiles = cfg.readNumEntry("NumberofFiles",0); + qDebug("init number of files %d", nFiles); + for(int i=1;i<= nFiles;i++) { @@ -710,3 +756,2 @@ void QtRec::initIconView() { filePath = cfg.readEntry(temp,""); //currentFileName - // qDebug(filePath); @@ -729,30 +774,55 @@ void QtRec::initConnections() { - connect( toBeginningButton, SIGNAL( pressed()), this, SLOT( rewindPressed() )); - connect( toBeginningButton, SIGNAL( released()), this, SLOT( rewindReleased() )); - connect( toEndButton, SIGNAL( pressed()), this, SLOT( FastforwardPressed() )); - connect( toEndButton, SIGNAL( released()), this, SLOT( FastforwardReleased() )); - connect( deleteSoundButton, SIGNAL(released()), this, SLOT( deleteSound() )); - connect( Stop_PushButton, SIGNAL(released()), this, SLOT( doPlayBtn() )); - connect( Rec_PushButton, SIGNAL(released()), this, SLOT( newSound() ) ); - connect( TabWidget, SIGNAL( currentChanged( QWidget*)),this, SLOT(thisTab(QWidget*) )); - connect( OutputSlider, SIGNAL(sliderReleased()), this, SLOT( changedOutVolume()) ); - connect( InputSlider, SIGNAL(sliderReleased()), this, SLOT( changedInVolume()) ); - - // connect( OutputSlider, SIGNAL(valueChanged( int)), this, SLOT(changedOutVolume(int)) ); - // connect( InputSlider, SIGNAL(valueChanged( int)), this, SLOT(changedInVolume(int)) ); - - connect( sampleRateComboBox, SIGNAL(activated( int)), this, SLOT( changesamplerateCombo(int)) ); - connect( bitRateComboBox, SIGNAL(activated( int)), this, SLOT( changebitrateCombo(int)) ); - connect( directoryComboBox, SIGNAL(activated( int)), this, SLOT( changeDirCombo(int)) ); - connect( sizeLimitCombo, SIGNAL(activated( int)), this, SLOT( changeSizeLimitCombo(int)) ); - connect( outMuteCheckBox, SIGNAL(toggled( bool)), this, SLOT( doVolMuting(bool)) ); - connect( inMuteCheckBox , SIGNAL(toggled( bool)), this, SLOT( doMicMuting(bool)) ); - connect( ListView1,SIGNAL(doubleClicked( QListViewItem*)),this,SLOT( itClick(QListViewItem*))); + connect( toBeginningButton, SIGNAL( pressed()), + this, SLOT( rewindPressed() )); + connect( toBeginningButton, SIGNAL( released()), + this, SLOT( rewindReleased() )); + connect( toEndButton, SIGNAL( pressed()), + this, SLOT( FastforwardPressed() )); + connect( toEndButton, SIGNAL( released()), + this, SLOT( FastforwardReleased() )); + connect( deleteSoundButton, SIGNAL(released()), + this, SLOT( deleteSound() )); + connect( Stop_PushButton, SIGNAL(released()), + this, SLOT( doPlayBtn() )); + connect( Rec_PushButton, SIGNAL(released()), + this, SLOT( newSound() ) ); + connect( TabWidget, SIGNAL( currentChanged( QWidget*)), + this, SLOT(thisTab(QWidget*) )); + connect( OutputSlider, SIGNAL(sliderReleased()), + this, SLOT( changedOutVolume()) ); + connect( InputSlider, SIGNAL(sliderReleased()), + this, SLOT( changedInVolume()) ); + + connect( sampleRateComboBox, SIGNAL(activated( int)), + this, SLOT( changesamplerateCombo(int)) ); + connect( bitRateComboBox, SIGNAL(activated( int)), + this, SLOT( changebitrateCombo(int)) ); + + connect( directoryComboBox, SIGNAL(activated( int)), + this, SLOT( changeDirCombo(int)) ); + connect( sizeLimitCombo, SIGNAL(activated( int)), + this, SLOT( changeSizeLimitCombo(int)) ); + + connect( stereoCheckBox, SIGNAL(toggled( bool)), + this, SLOT( changeStereoCheck(bool)) ); + + connect( outMuteCheckBox, SIGNAL(toggled( bool)), + this, SLOT( doVolMuting(bool)) ); + connect( inMuteCheckBox , SIGNAL(toggled( bool)), + this, SLOT( doMicMuting(bool)) ); + + connect( ListView1,SIGNAL(doubleClicked( QListViewItem*)), + this,SLOT( itClick(QListViewItem*))); connect( ListView1, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint&, int)), this,SLOT( listPressed(int, QListViewItem *, const QPoint&, int)) ); - connect( timeSlider, SIGNAL( sliderMoved( int)), this, SLOT( changeTimeSlider(int) )); - connect( timeSlider, SIGNAL( sliderPressed( )), this, SLOT( timeSliderPressed() )); - connect( timeSlider, SIGNAL( sliderReleased( )), this, SLOT( timeSliderReleased() )); - connect( compressionCheckBox, SIGNAL( toggled(bool)),this, SLOT( compressionSelected(bool))); - connect( autoMuteCheckBox, SIGNAL( toggled(bool)),this, SLOT( slotAutoMute(bool))); + connect( timeSlider, SIGNAL( sliderMoved( int)), + this, SLOT( changeTimeSlider(int) )); + connect( timeSlider, SIGNAL( sliderPressed( )), + this, SLOT( timeSliderPressed() )); + connect( timeSlider, SIGNAL( sliderReleased( )), + this, SLOT( timeSliderReleased() )); + connect( compressionCheckBox, SIGNAL( toggled(bool)), + this, SLOT( compressionSelected(bool))); + connect( autoMuteCheckBox, SIGNAL( toggled(bool)), + this, SLOT( slotAutoMute(bool))); } @@ -784,9 +854,11 @@ void QtRec::initConfig() { QString temp; -// for(int i=1;i<13; i++) { -// temp = sizeLimitCombo->text(i); - -// sizeLimitCombo->insertItem( QString::number(i*5)+tr(" secs")); -// } sizeLimitCombo->setCurrentItem((i/5)); + stereoCheckBox->setChecked( cfg.readBoolEntry("stereo", 1)); + if( stereoCheckBox->isChecked()) { + filePara.channels = 2; + } else { + filePara.channels = 1; + } + compressionCheckBox->setChecked( cfg.readBoolEntry("wavCompression",1)); @@ -810,9 +882,5 @@ void QtRec::initConfig() { -//================ - void QtRec::stop() { - // qDebug("<<<<<<<<<stop()"); + qWarning("STOP"); setRecordButton(false); - monitoring=false; - stopped=true; @@ -823,3 +891,2 @@ void QtRec::stop() { timeSlider->setValue(0); - // QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << true; // mute device } @@ -855,2 +922,5 @@ void QtRec::start() { //play bool QtRec::rec() { //record + QString timeString; + timeString.sprintf("%.0f", 0.0); + timeLabel->setText( timeString+ " seconds"); if(!stopped) { @@ -863,3 +933,2 @@ bool QtRec::rec() { //record setRecordButton(true); - stopped=false; @@ -870,2 +939,7 @@ bool QtRec::rec() { //record cfg.setGroup("Settings"); +// qDebug( "<<<<<<<Device bits %d, device rate %d, device channels %d", +// soundDevice->getDeviceBits(), +// soundDevice->getDeviceRate(), +// soundDevice->getDeviceChannels()); + //filePara.sampleRate = cfg.readNumEntry("samplerate", 22050); @@ -874,2 +948,3 @@ bool QtRec::rec() { //record +// qDebug("size limit %d sec", filePara.SecondsToRecord); int diskSize = checkDiskSpace( (const QString &) wavFile->trackName()); @@ -879,2 +954,3 @@ bool QtRec::rec() { //record } else if( filePara.format==WAVE_FORMAT_PCM) { +// qDebug("WAVE_FORMAT_PCM"); fileSize = (filePara.SecondsToRecord ) * filePara.channels @@ -882,2 +958,3 @@ bool QtRec::rec() { //record } else { +// qDebug("WAVE_FORMAT_DVI_ADPCM"); fileSize = ((filePara.SecondsToRecord) * filePara.channels @@ -887,2 +964,4 @@ bool QtRec::rec() { //record filePara.samplesToRecord = fileSize; + qDebug("filesize should be %d, bits %d, rate %d", + filePara.samplesToRecord, filePara.resolution, filePara.sampleRate); if(paused) { @@ -890,3 +969,7 @@ bool QtRec::rec() { //record } + // else { + qDebug("Setting timeslider %d", filePara.samplesToRecord); + // if(fileSize != 0) timeSlider->setRange(0, filePara.samplesToRecord); + // } @@ -906,2 +989,4 @@ bool QtRec::rec() { //record filePara.fileName=currentFile.latin1(); +// qDebug("Start recording thread"); + stopped = false; @@ -913,2 +998,3 @@ bool QtRec::rec() { //record startTimer(1000); +// quickRec(); } @@ -916,21 +1002,2 @@ bool QtRec::rec() { //record } //end setupAudio - // _exit( 0); - - // ///* default: -// // /* pid greater than zero is parent getting the child's pid */ -// /* printf("Child's pid is %d\n",pid); -// waitpid( pid, &status, 0); -// printf("Child[%d] exited with status %d\n", pid, status);*/ - // while (wait(NULL) != pid) -// ; -// printf("child %ld terminated normally, return status is zero\n", (long) pid); - // endRecording(); -/* else { //device was not opened - qDebug("Audio device open failed"); - return false; - } - }*/ -// } //end fork -// } -// } return true; @@ -943,4 +1010,4 @@ void QtRec::thisTab(QWidget* widg) { -// if(index==0) { //file page -// } + if(index == 0) { //file page + } @@ -952,4 +1019,5 @@ void QtRec::thisTab(QWidget* widg) { -// if(index==2) { //help page -// } + if( index==2) { //help page + } + qApp->processEvents(); @@ -961,2 +1029,3 @@ void QtRec::getOutVol( ) { filePara.outVol = soundDevice->getOutVolume(); +// qDebug("out vol %d", filePara.outVol); OutputSlider->setValue( -filePara.outVol); @@ -966,2 +1035,3 @@ void QtRec::getInVol() { filePara.inVol = soundDevice->getInVolume(); +// qDebug("in vol %d", filePara.inVol); InputSlider->setValue( -filePara.inVol); @@ -985,3 +1055,4 @@ bool QtRec::setupAudio( bool b) { - if( !b){ // we want to play + if( !b) { +// we want to play if( filePara.resolution == 16 || compressionCheckBox->isChecked() ) { @@ -994,3 +1065,3 @@ bool QtRec::setupAudio( bool b) { - stereo = filePara.channels = 1; + stereo = filePara.channels; flags= O_WRONLY; @@ -998,2 +1069,3 @@ bool QtRec::setupAudio( bool b) { mixerString = DSPSTRMIXEROUT; + recording = false; } else { // we want to record @@ -1007,2 +1079,3 @@ bool QtRec::setupAudio( bool b) { filePara.format=WAVE_FORMAT_PCM; +// qDebug("WAVE_FORMAT_PCM"); } else { @@ -1010,8 +1083,12 @@ bool QtRec::setupAudio( bool b) { sampleformat=AFMT_S16_LE; +// qDebug("WAVE_FORMAT_DVI_ADPCM"); } - stereo = filePara.channels = 1; + stereo = filePara.channels; +// filePara.sampleRate = sampleRateComboBox->currentText().toInt( &ok,10);//44100; flags= O_RDWR; +// flags= O_RDONLY; dspString = DSPSTRIN; mixerString = DSPSTRMIXEROUT; + recording = true; } @@ -1019,2 +1096,6 @@ bool QtRec::setupAudio( bool b) { // if(soundDevice) delete soundDevice; + qDebug("<<<<<<<<<<<<<<<<<<<open dsp %d %d %d", filePara.sampleRate, filePara.channels, sampleformat); + qWarning("change waveform settings"); + waveform->changeSettings( filePara.sampleRate, filePara.channels ); + soundDevice = new Device( this, dspString, mixerString, b); @@ -1023,2 +1104,5 @@ bool QtRec::setupAudio( bool b) { + qDebug("device has been made %d", soundDevice->sd); + + ////////////////// <<<<<<<<<<<<>>>>>>>>>>>> soundDevice->setDeviceFormat( sampleformat); @@ -1032,3 +1116,3 @@ bool QtRec::setupAudio( bool b) { #endif - + ///////////////// filePara.sd = soundDevice->sd; @@ -1036,2 +1120,3 @@ bool QtRec::setupAudio( bool b) { if ( filePara.sd == -1) { + monitoring=false; @@ -1039,4 +1124,3 @@ bool QtRec::setupAudio( bool b) { update(); - setCaption( tr( "OpieRecord " ) /*+ QString::number(VERSION)*/ ); - stopped=true; + setCaption( tr( "OpieRecord " )+ QString::number(VERSION) ); return false; @@ -1064,3 +1148,3 @@ bool QtRec::setUpFile() { //setup file for recording } else { - filePara.channels=1; +// filePara.channels=1; } @@ -1072,13 +1156,4 @@ bool QtRec::doPlay() { -// pthread_t thread2; -// pthread_create( &thread2, NULL, (void * (*)(void *))playIt, NULL/* &*/); - - // qDebug("doPlay file %d", filePara.fd); - int bytesWritten, number; - recording = false; -// int number=0; if( !paused) { - // qDebug("new"); total=0; - bytesWritten=0; filePara.numberOfRecordedSeconds = 0; @@ -1089,17 +1164,18 @@ bool QtRec::doPlay() { playing=true; - number=0; + stopped = false; + recording = false; QString num; -// block=BUFSIZE; - timeSlider->setRange(0, filePara.numberSamples); - timeString.sprintf("%.2f", filePara.numberOfRecordedSeconds); + qDebug( "Play number of samples %d", filePara.numberSamples); + +// timeSlider->setRange( 0, filePara.numberSamples); + + timeString.sprintf("%d", filePara.numberOfRecordedSeconds); timeLabel->setText( timeString+ tr(" seconds")); -// if( filePara.format==WAVE_FORMAT_DVI_ADPCM) { -// // qDebug("WAVE_FORMAT_DVI_ADPCM"); -// } else { -// // qDebug("WAVE_FORMAT_PCM"); -// } QString msg; - msg.sprintf("%d, %d, %d", filePara.sampleRate, filePara.channels, filePara.resolution); + msg.sprintf("%d, %d, %d", + filePara.sampleRate, + filePara.channels, + filePara.resolution); #ifdef DEV_VERSION @@ -1107,124 +1183,10 @@ bool QtRec::doPlay() { #endif - if( filePara.resolution == 16 ) { //AFMT_S16_LE) { - // qDebug("16 bit"); startTimer(1000); + pthread_t thread2; + pthread_create( &thread2, NULL, (void * (*)(void *))playIt, NULL/* &*/); - if( filePara.format==WAVE_FORMAT_DVI_ADPCM) { - char abuf[BUFSIZE/2]; - short sbuf[BUFSIZE]; - short sbuf2[BUFSIZE*2]; - memset( abuf, 0, BUFSIZE / 2); - memset( sbuf, 0, BUFSIZE); - memset( sbuf2, 0, BUFSIZE * 2); -// <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_DVI_ADPCM >>>>>>>>>>>>>>>>>>>>>> - for(;;) { // play loop - if (stopped) - break; // stop if playing was set to false - - - number=::read( filePara.fd, abuf, BUFSIZE/2); - adpcm_decoder( abuf, sbuf, number*2, &decoder_state); - -// for (int i=0;i< number * 2; 2 * i++) { //2*i is left channel -// sbuf2[i+1]=sbuf2[i]=sbuf[i]; -// } - - bytesWritten = write ( filePara.sd, sbuf, number*4); - // if(filePara.channels==1) - // total += bytesWritten/2; //mono - // else - total += bytesWritten; - timeSlider->setValue( total / 4); - - filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate / 2; - - timeString.sprintf("%.2f", filePara.numberOfRecordedSeconds); -// if(filePara.numberOfRecordedSeconds>1) - timeLabel->setText( timeString+ tr(" seconds")); -// printf("playing number %d, bytes %d, total %d\n",number, bytesWritten, total/4); -// printf("playing number %d, bytes %d, total %d totalsamples %d number recorded seconds %.2f\r", -// number, bytesWritten, total/4, filePara.numberSamples, filePara.numberOfRecordedSeconds); -// fflush(stdout); - - qApp->processEvents(); - - if( bytesWritten <= 0 ){//|| secCount > filePara.numberOfRecordedSeconds ) { - stopped = true; - endPlaying(); - } - } - } else { - // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_PCM >>>>>>>>>>>>>>>>>>>>>> - short inbuffer[BUFSIZE], outbuffer[BUFSIZE]; - memset( inbuffer, 0, BUFSIZE); - memset( outbuffer, 0, BUFSIZE); - - for(;;) { // play loop - if (stopped) - break; // stop if playing was set to false - number=::read( filePara.fd, inbuffer, BUFSIZE); -// for (int i=0;i< number * 2; 2 * i++) { //2*i is left channel -// // for (int i=0;i< number ; i++) { //2*i is left channel -// outbuffer[i+1]= outbuffer[i]=inbuffer[i]; -// } - - bytesWritten = ::write( filePara.sd, inbuffer, number); - //-------------->>>> out to device - // total+=bytesWritten; - // if(filePara.channels==1) - // total += bytesWritten/2; //mono - // else - total += bytesWritten; - - timeSlider->setValue( total); - filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate / (float)2; - - timeString.sprintf("%.2f",filePara.numberOfRecordedSeconds); - timeLabel->setText( timeString + tr(" seconds")); - - qApp->processEvents(); - - if( bytesWritten <= 0 && secCount > filePara.numberOfRecordedSeconds ) { - stopped = true; - endPlaying(); - } - } -// printf("\nplaying number %d, bytes %d, total %d\r",number, bytesWritten, total); -// fflush(stdout); - } //end loop - } else { /////////////////////////////// format = AFMT_U8; - unsigned char unsigned_inbuffer[BUFSIZE];//, unsigned_outbuffer[BUFSIZE]; - memset( unsigned_inbuffer,0,BUFSIZE); - for(;;) { // main loop - if (stopped) - break; // stop if playing was set to false - number=::read( filePara.fd, unsigned_inbuffer, BUFSIZE); -//data = (val >> 8) ^ 0x80; - // unsigned_outbuffer = (unsigned_inbuffer >> 8) ^ 0x80; - bytesWritten = write ( filePara.sd, unsigned_inbuffer, number); - total+=bytesWritten; - - timeSlider->setValue( total); - - filePara.numberOfRecordedSeconds=(float)total/(float)filePara.sampleRate; - timeString.sprintf("%.2f",filePara.numberOfRecordedSeconds); - timeLabel->setText( timeString + tr(" seconds")); - qApp->processEvents(); - - if( bytesWritten <= 0 && secCount > filePara.numberOfRecordedSeconds ) { - stopped = true; - endPlaying(); - } - // printf("Writing number %d, bytes %d, total %d, numberSamples %d\r",number, bytesWritten , total, filePara.numberSamples); - // fflush(stdout); - } - } + toBeginningButton->setEnabled( false); + toEndButton->setEnabled( false); -// qDebug("\nstopped or paused %d", total/4); - if(!paused && !stopped) { - stopped = true; -// endPlaying(); - endPlaying(); - } return true; @@ -1252,15 +1214,4 @@ void QtRec::changesamplerateCombo(int i) { filePara.sampleRate=rate; -/* soundDevice = new Device( this, DSPSTROUT, DSPSTRMIXER, false); - soundDevice->openDsp();*/ -// -// soundDevice->setDeviceFormat(AFMT_S16_LE); -// soundDevice->setDeviceChannels(filePara.channels); -// soundDevice->setDeviceRate(filePara.sampleRate); -// -// soundDevice->closeDevice( true); -// soundDevice=0; -// delete soundDevice; - // qDebug("Change sample rate %d", rate); + qDebug( "Change sample rate %d", rate); cfg.write(); - } @@ -1283,3 +1234,3 @@ void QtRec::changeDirCombo(int index) { cfg.writeEntry("directory", recDir); - // qDebug("new rec dir "+recDir); + qDebug("new rec dir "+recDir); } @@ -1298,6 +1249,3 @@ void QtRec::changeSizeLimitCombo(int) { void QtRec::newSound() { - // qDebug("<<<<<<<<<new sound"); - if( !rec()) { - // qDebug("rec() failed"); endRecording(); @@ -1305,3 +1253,2 @@ void QtRec::newSound() { } - } @@ -1326,3 +1273,2 @@ void QtRec::deleteSound() { QString file = ListView1->currentItem()->text(0); - // qDebug("Filename to find is "+file); QString fileName; @@ -1330,3 +1276,2 @@ void QtRec::deleteSound() { QFile f(fileName); - // qDebug("fileName is "+fileName); if(f.exists()) @@ -1338,3 +1283,2 @@ void QtRec::deleteSound() { for(int i=0;i<nFiles+1;i++) { - // qDebug(cfg.readEntry(QString::number(i))); @@ -1342,3 +1286,2 @@ void QtRec::deleteSound() { found = true; -// qDebug( cfg.readEntry(QString::number(i))+"\n" +cfg.readEntry(QString::number(i+1)) ); cfg.writeEntry( QString::number(i), cfg.readEntry( QString::number(i+1),"")); @@ -1351,3 +1294,2 @@ void QtRec::deleteSound() { cfg.removeEntry( file); - // cfg.removeEntry( QString::number(nFiles)); cfg.writeEntry("NumberofFiles", nFiles-1); @@ -1356,3 +1298,2 @@ void QtRec::deleteSound() { ListView1->takeItem( ListView1->currentItem() ); - // ListView1->takeItem( ListView1->itemAt(nFiles) ); delete ListView1->currentItem(); @@ -1367,3 +1308,3 @@ void QtRec::deleteSound() { #endif - setCaption( tr( "OpieRecord " ) /*+ QString::number(VERSION)*/ ); + setCaption( tr( "OpieRecord " ) + QString::number(VERSION) ); @@ -1374,21 +1315,2 @@ void QtRec::keyPressEvent( QKeyEvent *e) { switch ( e->key() ) { - /* - vercel keys-> - right side - 0 - 1 0x1030 Key_F1 - 2 0x1031 Key_F2 - 3 0x1032 Key_F3 - 4 0x1016 Key_PageUp - 5 0x1017 Key_PageDown - 6 - --------------- - left side - Up 0x1013 Key_Up - Down 0x1015 Key_Down - Left 0x1012 Key_Left - Right 0x1014 Key_Right - 0x1010 Key_Home - - */ // case Key_F1: @@ -1432,3 +1354,3 @@ void QtRec::keyPressEvent( QKeyEvent *e) { case Key_Left: { - // qDebug("rewinding"); + qDebug("rewinding"); if( !e->isAutoRepeat()) @@ -1486,3 +1408,3 @@ void QtRec::keyReleaseEvent( QKeyEvent *e) { // stop(); - // qDebug("Up"); + qDebug("Up"); break; @@ -1494,3 +1416,3 @@ void QtRec::keyReleaseEvent( QKeyEvent *e) { case Key_Left: - // qDebug("Left"); + qDebug("Left"); rewindReleased(); @@ -1498,3 +1420,3 @@ void QtRec::keyReleaseEvent( QKeyEvent *e) { case Key_Right: - // qDebug("Right"); + qDebug("Right"); FastforwardReleased(); @@ -1505,5 +1427,8 @@ void QtRec::keyReleaseEvent( QKeyEvent *e) { void QtRec::endRecording() { - // qDebug("endRecording"); + monitoring = false; + recording = false; + stopped = true; + waveform->reset(); setRecordButton(false); - timeSlider->setValue(0); + toBeginningButton->setEnabled(true); @@ -1511,4 +1436,2 @@ void QtRec::endRecording() { - monitoring=false; - killTimers(); @@ -1520,6 +1443,2 @@ void QtRec::endRecording() { - recording = false; - stopped=true; - t->stop(); - if( wavFile->track.isOpen()) { @@ -1540,3 +1459,3 @@ void QtRec::endRecording() { - // qDebug("Just moved "+wavFile->currentFileName); + qDebug("Just moved " + wavFile->currentFileName); Config cfg("OpieRec"); @@ -1559,3 +1478,3 @@ void QtRec::endRecording() { cfg.write(); - // qDebug("finished recording"); + qDebug("finished recording"); timeLabel->setText(""); @@ -1565,2 +1484,3 @@ void QtRec::endRecording() { + timeSlider->setValue(0); initIconView(); @@ -1570,3 +1490,8 @@ void QtRec::endRecording() { void QtRec::endPlaying() { - + monitoring = false; + recording = false; + playing = false; + stopped = true; + waveform->reset(); +// errorStop(); // qDebug("end playing"); @@ -1584,7 +1509,3 @@ void QtRec::endPlaying() { // qDebug("file and sound device closed"); - stopped=true; - recording=false; - playing=false; timeLabel->setText(""); - monitoring=false; total = 0; @@ -1592,3 +1513,3 @@ void QtRec::endPlaying() { filePara.sd=-1; - wavFile->closeFile(); +// wavFile->closeFile(); filePara.fd=0; @@ -1597,2 +1518,4 @@ void QtRec::endPlaying() { // qDebug("track closed"); + killTimers(); + qWarning("reset slider"); timeSlider->setValue(0); @@ -1618,3 +1541,3 @@ bool QtRec::openPlayFile() { currentFileName=cfg.readEntry( currentFile, "" ); - // qDebug("opening for play: "+currentFileName); + qDebug("opening for play: " + currentFileName); } @@ -1629,3 +1552,3 @@ bool QtRec::openPlayFile() { monitoring=false; - setCaption( tr( "OpieRecord " )/* + QString::number(VERSION)*/ ); + setCaption( tr( "OpieRecord " ) + QString::number(VERSION) ); QMessageBox::message(tr("Note"),tr("Could not open audio file.\n") @@ -1634,11 +1557,17 @@ bool QtRec::openPlayFile() { } else { + filePara.numberSamples=wavFile->getNumberSamples(); filePara.format = wavFile->getFormat(); - // qDebug("file %d, samples %f", filePara.fd, filePara.numberSamples); filePara.sampleRate= wavFile->getSampleRate(); filePara.resolution=wavFile->getResolution(); + filePara.channels = wavFile->getChannels(); timeSlider->setPageStep(1); monitoring=true; + + qDebug("file %d, samples %d %d", filePara.fd, filePara.numberSamples, filePara.sampleRate); + int sec = (int) (( filePara.numberSamples / filePara.sampleRate) / filePara.channels) / ( filePara.channels*( filePara.resolution/8)); + + qWarning("seconds %d", sec); + timeSlider->setRange(0, filePara.numberSamples ); - filePara.numberOfRecordedSeconds=(float) filePara.numberSamples / (float)filePara.sampleRate * (float)2; } @@ -1705,3 +1634,4 @@ void QtRec::doBeam() { Ir *file = new Ir(this, "IR"); - connect(file, SIGNAL(done(Ir*)), this, SLOT( fileBeamFinished( Ir * ))); + connect( file, SIGNAL( done(Ir*)), + this, SLOT( fileBeamFinished( Ir * ))); file->send( filePath, "OPieRec audio file\n"+filePath ); @@ -1740,4 +1670,3 @@ void QtRec::doRename() { void QtRec::okRename() { - // qDebug("okRename"); - // qDebug(renameBox->text()); + qDebug(renameBox->text()); QString filename = renameBox->text(); @@ -1753,3 +1682,3 @@ void QtRec::okRename() { - // qDebug("filename is " + filename); + qDebug("filename is " + filename); @@ -1777,3 +1706,2 @@ void QtRec::okRename() { void QtRec::cancelRename() { - // qDebug("cancel rename"); bool resetFocus = ListView1->viewport()->focusProxy() == renameBox; @@ -1813,4 +1741,3 @@ int QtRec::getCurrentSizeLimit() { void QtRec::timerBreak() { - // qDebug("timer break"); - stop(); + endPlaying(); } @@ -1838,3 +1765,4 @@ void QtRec::compressionSelected(bool b) { cfg.writeEntry("wavCompression", b); - cfg.writeEntry("bitrate",16); filePara.resolution=16; + cfg.writeEntry("bitrate", 16); + filePara.resolution = 16; cfg.write(); @@ -1880,4 +1808,4 @@ long QtRec::checkDiskSpace(const QString &path) { -void QtRec::receive( const QCString &/* msg*/, const QByteArray & ) { - // qDebug("Voicerecord received message "+msg); +void QtRec::receive( const QCString &msg, const QByteArray & ) { + qDebug("Voicerecord received message "+msg); @@ -1888,3 +1816,22 @@ void QtRec::receive( const QCString &/* msg*/, const QByteArray & ) { void QtRec::timerEvent( QTimerEvent *e ) { -// qDebug( "%d", secCount ); + +// if(!recording) +// timeSlider->setValue( secCount); +// else +// timeSlider->setValue( filePara.numberOfRecordedSeconds); + + if( stopped && playing) { + stop(); + } + + if( stopped && recording ){ + stop(); + } + + if( recording && filePara.SecondsToRecord < secCount && filePara.SecondsToRecord != 0) { + stop(); + } + + qDebug( "%d", secCount ); + QString timeString; #ifdef DEV_VERSION @@ -1895,24 +1842,5 @@ void QtRec::timerEvent( QTimerEvent *e ) { - if( !playing ) { - if(!recording ){ - killTimer(e->timerId()); -///* stopped=true; -// recording=false; -///*/ -// _exit( 0); - } - if(filePara.SecondsToRecord < secCount && filePara.SecondsToRecord !=0) { - killTimer(e->timerId()); - stop(); - } - } -// if( stopped && !paused) { -// if( filePara.numberOfRecordedSeconds < secCount) { -// stopped = true; -// // playing=false; -// killTimer(e->timerId()); -// endPlaying(); -// } -// } -// qApp->processEvents(); + timeString.sprintf("%d", secCount); + timeLabel->setText( timeString + " seconds"); + secCount++; @@ -2143,26 +2071,39 @@ void QtRec::selectItemByName(const QString & name) { -long findPeak(long input ) { +// long findPeak(long input ) { -// halfLife = time in seconds for output to decay to half value after an impulse - float output = 0.0; - float halfLife = .25; - float vsf = .0025; - float scalar = pow( 0.5, 1.0/(halfLife * filePara.sampleRate )); - if( input < 0.0 ) - input = -input; // Absolute value. - if ( input >= output) { - // When we hit a peak, ride the peak to the top. - output = input; - } else { -// Exponential decay of output when signal is low. - output = output * scalar; -// -// When current gets close to 0.0, set current to 0.0 to prevent FP underflow -// which can cause a severe performance degradation due to a flood -// of interrupts. -// - if( output < vsf ) output = 0.0; - } +// // halfLife = time in seconds for output to decay to half value after an impulse +// static float output = 0.0; +// float halfLife = .0025; +// float vsf = .0025; +// float scalar = pow( 0.5, 1.0/(halfLife * filePara.sampleRate )); +// if( input < 0.0 ) +// input = -input; // Absolute value. +// if ( input >= output ) { +// // When we hit a peak, ride the peak to the top. +// output = input; +// } else { +// // Exponential decay of output when signal is low. +// output = output * scalar; +// // +// // When current gets close to 0.0, set current to 0.0 to prevent FP underflow +// // which can cause a severe performance degradation due to a flood +// // of interrupts. +// // +// if( output < vsf ) output = 0.0; +// } - return (long)output; +// return (long) output; +// } + +void QtRec::changeStereoCheck(bool b) { + Config cfg("OpieRec"); + cfg.setGroup("Settings"); + int ch = 0; + if ( !b) { ch = 1;} + else { ch = 2;} + cfg.writeEntry("stereo", b); + filePara.channels = ch; + + cfg.write(); } + diff --git a/noncore/multimedia/opierec/qtrec.h b/noncore/multimedia/opierec/qtrec.h index ada3270..93b9b5f 100644 --- a/noncore/multimedia/opierec/qtrec.h +++ b/noncore/multimedia/opierec/qtrec.h @@ -6,3 +6,3 @@ copyright 2002 by L.J. Potter ljp@llornkcor.com #define QTREC_H -#define VERSION 1.0 +#define VERSION 20030920 @@ -74,3 +74,3 @@ private: QTimer *t_timer; - bool needsStereoOut, paused, playing; + bool needsStereoOut, paused; bool useTmpFile, autoMute; @@ -100,3 +100,2 @@ private slots: - void FastforwardPressed(); @@ -107,2 +106,4 @@ private slots: void changebitrateCombo(int); + void changeStereoCheck( bool); + void changedInVolume(); @@ -136,7 +137,5 @@ protected: - Device *soundDevice; WavFile *wavFile; - QButtonGroup *ButtonGroup1; - QCheckBox *outMuteCheckBox, *inMuteCheckBox, *compressionCheckBox, *autoMuteCheckBox; + QCheckBox *outMuteCheckBox, *inMuteCheckBox, *compressionCheckBox, *autoMuteCheckBox, *stereoCheckBox; QComboBox* sampleRateComboBox, * bitRateComboBox, *directoryComboBox, *sizeLimitCombo; diff --git a/noncore/multimedia/opierec/wavFile.cpp b/noncore/multimedia/opierec/wavFile.cpp index b177c91..987fa32 100644 --- a/noncore/multimedia/opierec/wavFile.cpp +++ b/noncore/multimedia/opierec/wavFile.cpp @@ -151,4 +151,4 @@ bool WavFile::setWavHeader(int fd, wavhdr *hdr) { write( fd,hdr, sizeof(*hdr)); -// qDebug("writing header: bitrate%d, samplerate %d, channels %d", -// wavResolution, wavSampleRate, wavChannels); + qDebug("writing header: bitrate%d, samplerate %d, channels %d", + wavResolution, wavSampleRate, wavChannels); return true; @@ -162,3 +162,3 @@ bool WavFile::adjustHeaders(int fd, int total) { write( fd, &total, sizeof(total)); -// qDebug("adjusting header %d", total); + qDebug("adjusting header %d", total); return true; @@ -167,3 +167,3 @@ bool WavFile::adjustHeaders(int fd, int total) { int WavFile::parseWavHeader(int fd) { -// qDebug("Parsing wav header"); + qDebug("Parsing wav header"); char string[4]; @@ -306 +306,6 @@ return useTmpFile; } + +int WavFile::getChannels() { + + return wavChannels; +} diff --git a/noncore/multimedia/opierec/wavFile.h b/noncore/multimedia/opierec/wavFile.h index b70c09d..e18cfce 100644 --- a/noncore/multimedia/opierec/wavFile.h +++ b/noncore/multimedia/opierec/wavFile.h @@ -43,2 +43,3 @@ public: int getNumberSamples(); + int getChannels(); bool isTempFile(); |