-rw-r--r-- | noncore/multimedia/opierec/device.cpp | 59 | ||||
-rw-r--r-- | noncore/multimedia/opierec/device.h | 59 | ||||
-rw-r--r-- | noncore/multimedia/opierec/main.cpp | 5 | ||||
-rw-r--r-- | noncore/multimedia/opierec/opierec.control | 2 | ||||
-rw-r--r-- | noncore/multimedia/opierec/opierec.pro | 25 | ||||
-rw-r--r-- | noncore/multimedia/opierec/qtrec.cpp | 1409 | ||||
-rw-r--r-- | noncore/multimedia/opierec/qtrec.h | 15 | ||||
-rw-r--r-- | noncore/multimedia/opierec/wavFile.cpp | 17 | ||||
-rw-r--r-- | noncore/multimedia/opierec/wavFile.h | 1 |
9 files changed, 791 insertions, 801 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> + @@ -28,3 +28,3 @@ Device::Device( QObject * parent, const char * dsp, const char * mixr, bool reco mixstr = (char *)mixr; - + devForm=-1; @@ -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,3 +151,4 @@ exit(1); */ - if (( sd = ::open( dspstr, flags)) == -1) { +qDebug("Opening %s",dspstr); + if (( sd = ::open( dspstr, flags)) == -1) { perror("open(\"/dev/dsp\")"); @@ -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); } @@ -201,3 +209,3 @@ exit(1); // qDebug("<<<<<<<<<<<<<>>>>>>>>>>>>"+s); - + // f2.close(); @@ -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) { @@ -310,7 +318,8 @@ int Device::getDeviceFragSize() { int frag_size; - + if (ioctl( sd, SNDCTL_DSP_GETBLKSIZE, &frag_size) == -1) { 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 @@ -7,33 +7,36 @@ class Device : public QObject { - Q_OBJECT + Q_OBJECT public: - Device( QObject * parent=0, const char * dspStr=0, const char * mixerStr=0, bool record=0 ); - ~Device() {}; - bool closeDevice( bool); - int getChannels(); - int getFormat(); - int getInVolume(); - int getOutVolume(); - int getRate(); - int getRes(); - int sd; //sound descriptor - void changedInVolume(int); - void changedOutVolume(int); - bool openDsp(); - int getDeviceFormat(); - int getDeviceRate(); - int getDeviceBits(); - int getDeviceChannels(); - int getDeviceFragSize(); - bool setFragSize(int); - bool setDeviceChannels(int); - bool setDeviceRate(int); - bool setDeviceFormat(int); -bool reset(); + Device( QObject * parent=0, const char * dspStr=0, const char * mixerStr=0, bool record=0 ); + ~Device() {}; + bool closeDevice( bool); + int getChannels(); + int getFormat(); + int getInVolume(); + int getOutVolume(); + int getRate(); + int getRes(); + int sd; //sound descriptor + void changedInVolume(int); + void changedOutVolume(int); + bool openDsp(); + int getDeviceFormat(); + int getDeviceRate(); + int getDeviceBits(); + int getDeviceChannels(); + int getDeviceFragSize(); + bool setFragSize(int); + bool setDeviceChannels(int); + bool setDeviceRate(int); + bool setDeviceFormat(int); + bool reset(); + + int devRead(int, short *, int); + int devWrite(int, short *, int); private: - int devRes, devCh, devRate, devForm, flags; - char *dspstr, *mixstr; - bool selectMicInput(); - int openDevice( int ); + int devRes, devCh, devRate, devForm, flags; + char *dspstr, *mixstr; + bool selectMicInput(); + int openDevice( int ); private slots: 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 @@ -14,3 +14,6 @@ #include <opie/oapplicationfactory.h> - + 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,11 +1,26 @@ -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 -INTERFACES = +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> @@ -57,5 +55,22 @@ extern "C" { #include <unistd.h> -#include<sys/wait.h> +#include <sys/wait.h> #include <sys/signal.h> +#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,46 +122,40 @@ void quickRec() { - count_info info; - - bytesWritten=0; - number=0; - QString num, timeString; - 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); + bytesWritten = 0; + number = 0; + QString num; + int level = 0; + int threshold = 0; +// int bits = filePara.resolution; +// qDebug("bits %d", bits); if( filePara.resolution == 16 ) { //AFMT_S16_LE) - level=7; - threshold=0; - timeString.sprintf("%.2f", filePara.numberOfRecordedSeconds); - timeLabel->setText( timeString+ " seconds"); - - if( filePara.format==WAVE_FORMAT_DVI_ADPCM) { - // qDebug("start recording WAVE_FORMAT_DVI_ADPCM"); - char abuf[BUFSIZE/2]; - short sbuf[BUFSIZE]; - short sbuf2[BUFSIZE]; - memset( abuf,0,BUFSIZE/2); - memset( sbuf,0,BUFSIZE); - memset( sbuf2,0,BUFSIZE); +// qDebug("AFMT_S16_LE size %d", filePara.SecondsToRecord); +// qDebug("samples to record %d", filePara.samplesToRecord); +// qDebug("%d", filePara.sd); + level = 7; + threshold = 0; + + if( filePara.format == WAVE_FORMAT_DVI_ADPCM) { +// qDebug("start recording WAVE_FORMAT_DVI_ADPCM"); + // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_DVI_ADPCM >>>>>>>>>>>>>>>>>>>>>> + char abuf[ BUFSIZE/2 ]; + short sbuf[ BUFSIZE ]; + short sbuf2[ BUFSIZE ]; + memset( abuf, 0, BUFSIZE/2); + memset( sbuf, 0, BUFSIZE); + memset( sbuf2, 0, BUFSIZE); for(;;) { - if (stopped) { - break; // stop if playing was set to false + if ( stopped) { + 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,71 +165,55 @@ 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"); - short inbuffer[BUFSIZE], outbuffer[BUFSIZE]; - memset( inbuffer,0,BUFSIZE); - memset( outbuffer,0,BUFSIZE); + // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_PCM >>>>>>>>>>>>>>>>>>>>>> + qDebug("start recording WAVE_FORMAT_PCM"); + short inbuffer[ BUFSIZE ], outbuffer[ BUFSIZE ]; + memset( inbuffer, 0, BUFSIZE); + memset( outbuffer, 0, BUFSIZE); + for(;;) { - if (stopped) { + if ( stopped) { + qDebug("quickRec:: stopped"); + stopped = true; break; // stop if playing was set to false + return; } - number=::read( filePara.sd, inbuffer, BUFSIZE); - if(number <= 0) { - perror("recording error "); - recording=stopped=false; - // errorStop(); - return;// false; + number = soundDevice ->devRead( filePara.sd, (short *)inbuffer, BUFSIZE); + waveform->newSamples( inbuffer, number ); + + if( number <= 0) { + perror( "recording error "); + 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 - if(bytesWritten < 0) { - // errorStop(); + + bytesWritten = soundDevice->devWrite( filePara.fd , inbuffer, number); + + if( bytesWritten < 0) { 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) + + if( filePara.SecondsToRecord != 0) timeSlider->setValue( total); @@ -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 @@ -247,3 +234,3 @@ outbuffer[i]=inbuffer[i]>>1; // no clippy, please } else { // <<<<<<<<<<<<<<<<<<<<<<< format = AFMT_U8; - unsigned char unsigned_inbuffer[BUFSIZE], unsigned_outbuffer[BUFSIZE]; + unsigned char unsigned_inbuffer[ BUFSIZE ], unsigned_outbuffer[ BUFSIZE ]; memset( unsigned_inbuffer, 0, BUFSIZE); @@ -252,33 +239,17 @@ outbuffer[i]=inbuffer[i]>>1; // no clippy, please for(;;) { - if (stopped) { - // qDebug("quickRec:: stopped"); + if ( 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; @@ -287,3 +258,3 @@ outbuffer[i]=inbuffer[i]>>1; // no clippy, please // fflush(stdout); - if(filePara.SecondsToRecord !=0) + if( filePara.SecondsToRecord !=0) timeSlider->setValue( total); @@ -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 ) @@ -332,8 +425,8 @@ QtRec::QtRec( QWidget* parent, const char* name, WFlags fl ) - soundDevice->closeDevice( true); - soundDevice->sd=-1; - soundDevice=0; - wavFile=0; + soundDevice->closeDevice( true); + soundDevice->sd = -1; + soundDevice = 0; + wavFile = 0; - if(soundDevice) delete soundDevice; + if( soundDevice) delete soundDevice; @@ -341,6 +434,6 @@ QtRec::QtRec( QWidget* parent, const char* name, WFlags fl ) - if(autoMute) - doMute(true); + if( autoMute) + doMute( true); ListView1->setFocus(); - playing=false; + playing = false; } @@ -353,4 +446,4 @@ void QtRec::cleanUp() { - if(!stopped) { - stopped=true; + if( !stopped) { + stopped = true; endRecording(); @@ -360,9 +453,7 @@ void QtRec::cleanUp() { - if(autoMute) + if( autoMute) doMute(false); - if(wavFile) delete wavFile; + if( wavFile) delete wavFile; // if(soundDevice) delete soundDevice; -// QPEApplication::grabKeyboard(); -// QPEApplication::ungrabKeyboard(); } @@ -371,3 +462,3 @@ void QtRec::init() { - needsStereoOut=false; + needsStereoOut = false; QPixmap image3( ( const char** ) image3_data ); @@ -376,3 +467,3 @@ void QtRec::init() { - stopped=true; + stopped = true; setCaption( tr( "OpieRecord " ) + QString::number(VERSION) ); @@ -384,3 +475,3 @@ void QtRec::init() { layout->addMultiCellWidget(TabWidget, 0, 7, 0, 7); - // TabWidget->setTabShape(QTabWidget::Triangular); +// TabWidget->setTabShape(QTabWidget::Triangular); @@ -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); @@ -403,3 +492,3 @@ void QtRec::init() { playLabel2->setText(tr("Play") ); - playLabel2->setFixedHeight(18); + playLabel2->setFixedHeight( 18); layout1->addMultiCellWidget( playLabel2, 0, 0, 4, 4); @@ -408,3 +497,3 @@ void QtRec::init() { layout1->addMultiCellWidget( Stop_PushButton, 1, 1, 4, 4); - Stop_PushButton->setFixedSize(22,22); + Stop_PushButton->setFixedSize( 22, 22); Stop_PushButton->setPixmap( image4 ); @@ -413,3 +502,3 @@ void QtRec::init() { layout1->addMultiCellWidget(toBeginningButton, 1, 1, 5, 5); - toBeginningButton->setFixedSize(22,22); + toBeginningButton->setFixedSize( 22, 22); toBeginningButton->setPixmap( Resource::loadPixmap("fastback") ); @@ -418,3 +507,3 @@ void QtRec::init() { layout1->addMultiCellWidget( toEndButton, 1, 1, 6, 6); - toEndButton->setFixedSize(22,22); + toEndButton->setFixedSize( 22, 22); toEndButton->setPixmap( Resource::loadPixmap( "fastforward" ) ); @@ -424,3 +513,3 @@ void QtRec::init() { recLabel2->setText(tr("Rec")); - recLabel2->setFixedHeight(18); + recLabel2->setFixedHeight( 18); layout1->addMultiCellWidget( recLabel2, 0, 0, 7, 7); @@ -429,3 +518,3 @@ void QtRec::init() { layout1->addMultiCellWidget( Rec_PushButton, 1, 1, 7, 7); - Rec_PushButton->setFixedSize(22,22); + Rec_PushButton->setFixedSize( 22, 22); Rec_PushButton->setPixmap( image6 ); @@ -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() ) ); @@ -449,17 +540,17 @@ void QtRec::init() { ListView1->addColumn( tr( "Name" ) ); - ListView1->setColumnWidth(0,140); + ListView1->setColumnWidth( 0, 140); ListView1->setSorting( 1, false); ListView1->addColumn( tr( "Time" ) ); //in seconds - ListView1->setColumnWidth(1,50); + ListView1->setColumnWidth( 1, 50); ListView1->addColumn( tr("Location") ); - ListView1->setColumnWidth(2,50); + ListView1->setColumnWidth( 2, 50); ListView1->addColumn( tr("Date") ); - ListView1->setColumnWidth(3,63); + ListView1->setColumnWidth( 3, 63); - ListView1->setColumnWidthMode(0,QListView::Manual); - ListView1->setColumnAlignment(1,QListView::AlignCenter); - ListView1->setColumnAlignment(2,QListView::AlignRight); - ListView1->setColumnAlignment(3,QListView::AlignLeft); + ListView1->setColumnWidthMode( 0, QListView::Manual); + ListView1->setColumnAlignment( 1, QListView::AlignCenter); + ListView1->setColumnAlignment( 2, QListView::AlignRight); + ListView1->setColumnAlignment( 3, QListView::AlignLeft); ListView1->setAllColumnsShowFocus( true ); - QPEApplication::setStylusOperation( ListView1->viewport(),QPEApplication::RightOnHold); + QPEApplication::setStylusOperation( ListView1->viewport(), QPEApplication::RightOnHold); @@ -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); @@ -504,3 +585,3 @@ void QtRec::init() { sizeGroup->setTitle( tr( "Limit Size" ) ); - sizeGroup->setFixedSize(80,50); + sizeGroup->setFixedSize( 80, 50); @@ -509,23 +590,12 @@ void QtRec::init() { sizeLimitCombo->insertItem(tr("Unlimited")); + for(int i=1;i<13; i++) { - sizeLimitCombo->insertItem( QString::number(i*5)); + sizeLimitCombo->insertItem( QString::number( i * 5)); } -// 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" ); dirGroup->setTitle( tr( "File Directory" ) ); - dirGroup->setFixedSize(130,50); + dirGroup->setFixedSize( 130, 50); @@ -534,3 +604,3 @@ void QtRec::init() { - Layout18->addWidget( dirGroup ); + glayout3->addMultiCellWidget( dirGroup, 1, 1, 0, 0); @@ -538,3 +608,3 @@ void QtRec::init() { bitGroup->setTitle( tr( "Bit Depth" ) ); - bitGroup->setFixedSize(65,50); + bitGroup->setFixedSize( 65, 50); @@ -545,17 +615,16 @@ 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); QWidget *d = QApplication::desktop(); - int width=d->width(); - int height=d->height(); - - + int width = d->width(); + int height = d->height(); @@ -570,4 +639,3 @@ void QtRec::init() { - - Layout15 = new QVBoxLayout(this); + Layout15 = new QVBoxLayout( this); Layout15->setSpacing( 2 ); @@ -575,3 +643,3 @@ void QtRec::init() { - Layout15b = new QVBoxLayout(this); + Layout15b = new QVBoxLayout( this); Layout15b->setSpacing( 2 ); @@ -581,3 +649,3 @@ void QtRec::init() { TextLabel2->setText( tr( "In")); - TextLabel2->setFixedWidth(35); + TextLabel2->setFixedWidth( 35); Layout15->addWidget( TextLabel2 ); @@ -589,3 +657,3 @@ void QtRec::init() { InputSlider = new QSlider( -100, 0, 10, 0, QSlider::Vertical, tab_5, (const char *) "InputSlider" ); - InputSlider->setTickmarks(QSlider::Both); + InputSlider->setTickmarks( QSlider::Both); Layout15->addWidget( InputSlider); @@ -593,3 +661,3 @@ void QtRec::init() { OutputSlider = new QSlider( -100,0,10,0, QSlider::Vertical,tab_5,(const char *) "OutputSlider" ); - OutputSlider->setTickmarks(QSlider::Both); + OutputSlider->setTickmarks( QSlider::Both); @@ -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++) { @@ -707,6 +753,5 @@ void QtRec::initIconView() { - temp.sprintf("%d",i); - temp=cfg.readEntry(temp,""); //reads currentFile - filePath = cfg.readEntry(temp,""); //currentFileName - // qDebug(filePath); + temp.sprintf( "%d",i); + temp = cfg.readEntry( temp,""); //reads currentFile + filePath = cfg.readEntry( temp,""); //currentFileName @@ -716,7 +761,7 @@ void QtRec::initIconView() { fileS = cfg.readEntry( filePath, "0" );// file length in seconds - mediaLocation=getStorage( filePath); - if(info.exists()) { + mediaLocation = getStorage( filePath); + if( info.exists()) { item = new QListViewItem( ListView1, temp, fileS, mediaLocation, fileDate); item->setPixmap( 0, image0); - if(currentFileName == filePath) + if( currentFileName == filePath) ListView1->setSelected( item, true); @@ -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))); } @@ -769,3 +839,3 @@ void QtRec::initConfig() { fred = sampleRateComboBox->text(ws).toInt(&ok, 10); - if(index == fred) { + if( index == fred) { filePara.sampleRate = fred; @@ -775,3 +845,3 @@ void QtRec::initConfig() { - i=cfg.readNumEntry("bitrate",16); + i = cfg.readNumEntry("bitrate",16); if(i == 16) @@ -782,11 +852,13 @@ void QtRec::initConfig() { - i=cfg.readNumEntry("sizeLimit", 5 ); + i = cfg.readNumEntry("sizeLimit", 5 ); 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 } @@ -840,9 +907,9 @@ void QtRec::doPlayBtn() { void QtRec::start() { //play - if(stopped) { + if( stopped) { QPixmap image3( ( const char** ) image3_data ); Stop_PushButton->setPixmap( image3 ); - Stop_PushButton->setDown(true); - stopped=false; - paused=false; - secCount=1; + Stop_PushButton->setDown( true); + stopped = false; + paused = false; + secCount = 1; @@ -855,11 +922,13 @@ void QtRec::start() { //play bool QtRec::rec() { //record + QString timeString; + timeString.sprintf("%.0f", 0.0); + timeLabel->setText( timeString+ " seconds"); if(!stopped) { - monitoring=true; + monitoring = true; return false; } else { - secCount=1; + secCount = 1; playLabel2->setText(tr("Stop")); - monitoring=false; - setRecordButton(true); - stopped=false; + monitoring = false; + setRecordButton( true); @@ -867,9 +936,15 @@ bool QtRec::rec() { //record if(setUpFile()) { - int fileSize=0; + int fileSize = 0; Config cfg("OpieRec"); 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); - // qDebug("sample rate is %d", filePara.sampleRate); +// qDebug("sample rate is %d", filePara.sampleRate); filePara.SecondsToRecord = getCurrentSizeLimit(); +// qDebug("size limit %d sec", filePara.SecondsToRecord); int diskSize = checkDiskSpace( (const QString &) wavFile->trackName()); @@ -878,8 +953,10 @@ bool QtRec::rec() { //record fileSize = diskSize; - } else if( filePara.format==WAVE_FORMAT_PCM) { + } else if( filePara.format == WAVE_FORMAT_PCM) { +// qDebug("WAVE_FORMAT_PCM"); fileSize = (filePara.SecondsToRecord ) * filePara.channels - * filePara.sampleRate *(filePara.resolution/8)+1000; + * filePara.sampleRate * ( filePara.resolution / 8) + 1000; } else { +// qDebug("WAVE_FORMAT_DVI_ADPCM"); fileSize = ((filePara.SecondsToRecord) * filePara.channels - * filePara.sampleRate *(filePara.resolution/8) )/4+250; + * filePara.sampleRate * ( filePara.resolution / 8) ) / 4 + 250; } @@ -887,6 +964,12 @@ bool QtRec::rec() { //record filePara.samplesToRecord = fileSize; - if(paused) { + qDebug("filesize should be %d, bits %d, rate %d", + filePara.samplesToRecord, filePara.resolution, filePara.sampleRate); + if( paused) { paused = false; } + // else { + qDebug("Setting timeslider %d", filePara.samplesToRecord); + // if(fileSize != 0) timeSlider->setRange(0, filePara.samplesToRecord); + // } @@ -906,9 +989,12 @@ bool QtRec::rec() { //record filePara.fileName=currentFile.latin1(); +// qDebug("Start recording thread"); + stopped = false; - pthread_t thread1; - pthread_create( &thread1, NULL, (void * (*)(void *))quickRec, NULL/* &*/); - toBeginningButton->setEnabled(false); - toEndButton->setEnabled(false); + pthread_t thread1; + pthread_create( &thread1, NULL, (void * (*)(void *))quickRec, NULL/* &*/); + toBeginningButton->setEnabled( false); + toEndButton->setEnabled( false); 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; @@ -941,8 +1008,8 @@ void QtRec::thisTab(QWidget* widg) { if(widg != NULL) { - int index=TabWidget->currentPageIndex(); + int index = TabWidget->currentPageIndex(); -// if(index==0) { //file page -// } + if(index == 0) { //file page + } - if(index ==1) { //control page + if(index == 1) { //control page fillDirectoryCombo(); @@ -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); @@ -970,3 +1040,3 @@ void QtRec::getInVol() { void QtRec::changedOutVolume() { - soundDevice->changedOutVolume(-OutputSlider->value()); + soundDevice->changedOutVolume( -OutputSlider->value()); } @@ -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() ) { @@ -991,9 +1062,10 @@ bool QtRec::setupAudio( bool b) { sampleformat = AFMT_U8; - filePara.resolution=8; + filePara.resolution = 8; } - stereo = filePara.channels = 1; - flags= O_WRONLY; + stereo = filePara.channels; + flags = O_WRONLY; dspString = DSPSTROUT; mixerString = DSPSTRMIXEROUT; + recording = false; } else { // we want to record @@ -1006,12 +1078,17 @@ bool QtRec::setupAudio( bool b) { if( !compressionCheckBox->isChecked()) { - filePara.format=WAVE_FORMAT_PCM; + filePara.format = WAVE_FORMAT_PCM; +// qDebug("WAVE_FORMAT_PCM"); } else { - filePara.format=WAVE_FORMAT_DVI_ADPCM; - sampleformat=AFMT_S16_LE; + filePara.format = WAVE_FORMAT_DVI_ADPCM; + 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,7 +1120,7 @@ bool QtRec::setupAudio( bool b) { if ( filePara.sd == -1) { - monitoring=false; - stopped=true; + + monitoring = false; + stopped = true; update(); - setCaption( tr( "OpieRecord " ) /*+ QString::number(VERSION)*/ ); - stopped=true; + setCaption( tr( "OpieRecord " )+ QString::number(VERSION) ); return false; @@ -1051,3 +1135,3 @@ bool QtRec::setupAudio( bool b) { bool QtRec::setUpFile() { //setup file for recording - // qDebug("Setting up wavfile"); +// qDebug("Setting up wavfile"); // if(wavFile) delete wavFile; @@ -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; + total = 0; filePara.numberOfRecordedSeconds = 0; @@ -1088,18 +1163,19 @@ bool QtRec::doPlay() { } - playing=true; - number=0; + playing = true; + 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); - - 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; + startTimer( 1000); + pthread_t thread2; + pthread_create( &thread2, NULL, (void * (*)(void *))playIt, NULL/* &*/); - timeSlider->setValue( total); + toBeginningButton->setEnabled( false); + toEndButton->setEnabled( false); - 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); - } - } - -// qDebug("\nstopped or paused %d", total/4); - if(!paused && !stopped) { - stopped = true; -// endPlaying(); - endPlaying(); - } return true; @@ -1236,7 +1198,7 @@ void QtRec::changebitrateCombo(int i) { cfg.setGroup("Settings"); - int bits=0; - if(i==0) { bits=16; } + int bits = 0; + if( i == 0) { bits = 16; } else { bits=8; } cfg.writeEntry("bitrate", bits); - filePara.resolution=bits; + filePara.resolution = bits; cfg.write(); @@ -1250,17 +1212,6 @@ void QtRec::changesamplerateCombo(int i) { rate = sampleRateComboBox->text(i).toInt(&ok, 10); - cfg.writeEntry("samplerate",rate); + cfg.writeEntry( "samplerate",rate); 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(); - } @@ -1281,5 +1232,5 @@ void QtRec::changeDirCombo(int index) { const QString path = (*it)->path(); - recDir = path; + recDir = path; 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() { } - } @@ -1309,3 +1256,3 @@ void QtRec::newSound() { void QtRec::itClick(QListViewItem *item) { - currentFile=item->text(0); + currentFile = item->text(0); setCaption("OpieRecord "+currentFile); @@ -1316,3 +1263,3 @@ void QtRec::deleteSound() { cfg.setGroup("Sounds"); - if( ListView1->currentItem() == NULL) + if( ListView1->currentItem() == NULL) return; @@ -1326,15 +1273,12 @@ void QtRec::deleteSound() { QString file = ListView1->currentItem()->text(0); - // qDebug("Filename to find is "+file); QString fileName; fileName = cfg.readEntry( file, ""); - QFile f(fileName); - // qDebug("fileName is "+fileName); - if(f.exists()) + QFile f( fileName); + if( f.exists()) if( !f.remove()) - QMessageBox::message(tr("Error"),tr("Could not remove file.")); + QMessageBox::message( tr("Error"), tr("Could not remove file.")); - int nFiles = cfg.readNumEntry("NumberofFiles",0); - bool found=false; + int nFiles = cfg.readNumEntry( "NumberofFiles",0); + bool found = false; 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),"")); @@ -1349,6 +1292,5 @@ void QtRec::deleteSound() { - cfg.removeEntry(cfg.readEntry(file)); + cfg.removeEntry( cfg.readEntry( file)); cfg.removeEntry( file); - // cfg.removeEntry( QString::number(nFiles)); - cfg.writeEntry("NumberofFiles", nFiles-1); + cfg.writeEntry( "NumberofFiles", nFiles-1); cfg.write(); @@ -1356,3 +1298,2 @@ void QtRec::deleteSound() { ListView1->takeItem( ListView1->currentItem() ); - // ListView1->takeItem( ListView1->itemAt(nFiles) ); delete ListView1->currentItem(); @@ -1360,3 +1301,3 @@ void QtRec::deleteSound() { ListView1->clear(); - ListView1->setSelected(ListView1->firstChild(), true); + ListView1->setSelected( ListView1->firstChild(), true); initIconView(); @@ -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,9 +1427,10 @@ void QtRec::keyReleaseEvent( QKeyEvent *e) { void QtRec::endRecording() { - // qDebug("endRecording"); - setRecordButton(false); - timeSlider->setValue(0); - toBeginningButton->setEnabled(true); - toEndButton->setEnabled(true); + monitoring = false; + recording = false; + stopped = true; + waveform->reset(); + setRecordButton( false); - monitoring=false; + toBeginningButton->setEnabled( true); + toEndButton->setEnabled( true); @@ -1516,3 +1439,3 @@ void QtRec::endRecording() { if(autoMute) - doMute(true); + doMute( true); @@ -1520,6 +1443,2 @@ void QtRec::endRecording() { - recording = false; - stopped=true; - t->stop(); - if( wavFile->track.isOpen()) { @@ -1527,3 +1446,3 @@ void QtRec::endRecording() { // soundDevice->sd=-1; - filePara.numberSamples=0; + filePara.numberSamples = 0; // filePara.sd=-1; @@ -1532,3 +1451,3 @@ void QtRec::endRecording() { - if(wavFile->isTempFile()) { + if( wavFile->isTempFile()) { // move tmp file to regular file @@ -1536,7 +1455,7 @@ void QtRec::endRecording() { cmd.sprintf("mv "+ wavFile->trackName() + " " + wavFile->currentFileName); - // qDebug("moving tmp file to "+currentFileName); - system(cmd.latin1()); +// qDebug("moving tmp file to "+currentFileName); + system( cmd.latin1()); } - - // qDebug("Just moved "+wavFile->currentFileName); + + qDebug("Just moved " + wavFile->currentFileName); Config cfg("OpieRec"); @@ -1546,7 +1465,7 @@ void QtRec::endRecording() { - currentFile = QFileInfo(wavFile->currentFileName).fileName(); - currentFile=currentFile.left(currentFile.length()-4); + currentFile = QFileInfo( wavFile->currentFileName).fileName(); + currentFile = currentFile.left( currentFile.length() - 4); - cfg.writeEntry( "NumberofFiles",nFiles+1); - cfg.writeEntry( QString::number( nFiles+1), currentFile); + cfg.writeEntry( "NumberofFiles", nFiles + 1); + cfg.writeEntry( QString::number( nFiles + 1), currentFile); cfg.writeEntry( currentFile, wavFile->currentFileName); @@ -1556,6 +1475,6 @@ void QtRec::endRecording() { cfg.writeEntry( wavFile->currentFileName, time ); - // qDebug("writing config numberOfRecordedSeconds "+time); +// qDebug("writing config numberOfRecordedSeconds "+time); cfg.write(); - // qDebug("finished recording"); + qDebug("finished recording"); timeLabel->setText(""); @@ -1565,4 +1484,5 @@ void QtRec::endRecording() { + timeSlider->setValue(0); initIconView(); - selectItemByName(currentFile); + selectItemByName( currentFile); } @@ -1570,29 +1490,32 @@ void QtRec::endRecording() { void QtRec::endPlaying() { + monitoring = false; + recording = false; + playing = false; + stopped = true; + waveform->reset(); +// errorStop(); +// qDebug("end playing"); + setRecordButton( false); - // qDebug("end playing"); - setRecordButton(false); - - toBeginningButton->setEnabled(true); - toEndButton->setEnabled(true); + toBeginningButton->setEnabled( true); + toEndButton->setEnabled( true); if(autoMute) - doMute(true); + doMute( true); soundDevice->closeDevice( false); - soundDevice->sd=-1; + soundDevice->sd = -1; // if(soundDevice) delete soundDevice; - // qDebug("file and sound device closed"); - stopped=true; - recording=false; - playing=false; +// qDebug("file and sound device closed"); timeLabel->setText(""); - monitoring=false; total = 0; - filePara.numberSamples=0; - filePara.sd=-1; - wavFile->closeFile(); - filePara.fd=0; + filePara.numberSamples = 0; + filePara.sd = -1; +// wavFile->closeFile(); + filePara.fd = 0; // if(wavFile) delete wavFile; //this crashes - // qDebug("track closed"); +// qDebug("track closed"); + killTimers(); + qWarning("reset slider"); timeSlider->setValue(0); @@ -1614,7 +1537,7 @@ bool QtRec::openPlayFile() { cfg.setGroup("Sounds"); - int nFiles = cfg.readNumEntry("NumberofFiles",0); + int nFiles = cfg.readNumEntry( "NumberofFiles", 0); for(int i=0;i<nFiles+1;i++) { //look for file if( cfg.readEntry( QString::number(i),"").find( currentFile,0,true) != -1) { - currentFileName=cfg.readEntry( currentFile, "" ); - // qDebug("opening for play: "+currentFileName); + currentFileName = cfg.readEntry( currentFile, "" ); + qDebug("opening for play: " + currentFileName); } @@ -1627,18 +1550,24 @@ bool QtRec::openPlayFile() { // if(!track.open(IO_ReadOnly)) { - QString errorMsg=(QString)strerror(errno); - monitoring=false; - setCaption( tr( "OpieRecord " )/* + QString::number(VERSION)*/ ); - QMessageBox::message(tr("Note"),tr("Could not open audio file.\n") - +errorMsg+"\n"+currentFile); + QString errorMsg = (QString)strerror(errno); + monitoring = false; + setCaption( tr( "OpieRecord " ) + QString::number(VERSION) ); + QMessageBox::message(tr("Note"), tr("Could not open audio file.\n") + + errorMsg + "\n" + currentFile); return false; } else { - filePara.numberSamples=wavFile->getNumberSamples(); + + 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.sampleRate = wavFile->getSampleRate(); + filePara.resolution = wavFile->getResolution(); + filePara.channels = wavFile->getChannels(); timeSlider->setPageStep(1); - monitoring=true; + 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; } @@ -1653,7 +1582,7 @@ void QtRec::listPressed( int mouse, QListViewItem *item, const QPoint &, int ) { case 1: { - if( renameBox !=0 ) //tricky + if( renameBox != 0 ) //tricky cancelRename(); - currentFile=item->text(0); - setCaption( "OpieRecord "+currentFile); + currentFile = item->text(0); + setCaption( "OpieRecord " + currentFile); } @@ -1702,7 +1631,8 @@ void QtRec::doBeam() { for(int i=0;i<nFiles+1;i++) { - if( cfg.readEntry( QString::number(i),"").find(file,0,true) != -1) { + if( cfg.readEntry( QString::number( i),"").find( file, 0, true) != -1) { QString filePath = cfg.readEntry(file,""); Ir *file = new Ir(this, "IR"); - connect(file, SIGNAL(done(Ir*)), this, SLOT( fileBeamFinished( Ir * ))); - file->send( filePath, "OPieRec audio file\n"+filePath ); + 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); @@ -1764,3 +1693,3 @@ void QtRec::okRename() { cfg.writeEntry( filename, filePath ); - cfg.removeEntry(file); + cfg.removeEntry( file); cfg.write(); @@ -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(); @@ -1842,7 +1770,7 @@ void QtRec::compressionSelected(bool b) { if(b) { - bitRateComboBox->setEnabled(false); - bitRateComboBox->setCurrentItem(0); - filePara.resolution=16; + bitRateComboBox->setEnabled( false); + bitRateComboBox->setCurrentItem( 0); + filePara.resolution = 16; } else{ - bitRateComboBox->setEnabled(true); + bitRateComboBox->setEnabled( true); } @@ -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++; @@ -1921,3 +1849,3 @@ void QtRec::timerEvent( QTimerEvent *e ) { void QtRec::changeTimeSlider(int index) { - if(ListView1->currentItem() == 0 || !wavFile->track.isOpen()) return; + if( ListView1->currentItem() == 0 || !wavFile->track.isOpen()) return; // qDebug("Slider moved to %d",index); @@ -1929,6 +1857,6 @@ void QtRec::changeTimeSlider(int index) { QString timeString; - filePara.numberOfRecordedSeconds=(float)sliderPos/(float)filePara.sampleRate*(float)2; + filePara.numberOfRecordedSeconds = (float)sliderPos / (float)filePara.sampleRate * (float)2; timeString.sprintf( "%.2f", filePara.numberOfRecordedSeconds); secCount = (int)filePara.numberOfRecordedSeconds; - timeLabel->setText( timeString+ tr(" seconds")); + timeLabel->setText( timeString + tr(" seconds")); } @@ -1936,3 +1864,3 @@ void QtRec::changeTimeSlider(int index) { void QtRec::timeSliderPressed() { - if(ListView1->currentItem() == 0) return; + if( ListView1->currentItem() == 0) return; // qDebug("slider pressed"); @@ -1943,4 +1871,4 @@ void QtRec::timeSliderPressed() { void QtRec::timeSliderReleased() { - if(ListView1->currentItem() == 0) return; - sliderPos=timeSlider->value(); + if( ListView1->currentItem() == 0) return; + sliderPos = timeSlider->value(); @@ -1950,3 +1878,3 @@ void QtRec::timeSliderReleased() { total = newPos*4; - filePara.numberOfRecordedSeconds=(float)sliderPos/(float)filePara.sampleRate*(float)2; + filePara.numberOfRecordedSeconds = (float)sliderPos / (float)filePara.sampleRate * (float)2; @@ -1956,3 +1884,3 @@ void QtRec::timeSliderReleased() { void QtRec::rewindPressed() { - if(ListView1->currentItem() == 0) return; + if( ListView1->currentItem() == 0) return; if( !wavFile->track.isOpen()) { @@ -1967,3 +1895,3 @@ void QtRec::rewindPressed() { stopped = true; - rewindTimer->start(50, false); + rewindTimer->start( 50, false); } @@ -1973,3 +1901,3 @@ void QtRec::rewindTimerTimeout() { int sliderValue = timeSlider->value(); - sliderValue = sliderValue-(filePara.numberSamples/100); + sliderValue = sliderValue - ( filePara.numberSamples / 100); // if(toBeginningButton->isDown()) @@ -1978,3 +1906,3 @@ void QtRec::rewindTimerTimeout() { QString timeString; - filePara.numberOfRecordedSeconds=(float)sliderValue/(float)filePara.sampleRate*(float)2; + filePara.numberOfRecordedSeconds = (float)sliderValue / (float)filePara.sampleRate * (float)2; timeString.sprintf( "%.2f", filePara.numberOfRecordedSeconds); @@ -1989,5 +1917,5 @@ void QtRec::rewindReleased() { int newPos = lseek( filePara.fd, sliderPos, SEEK_SET); - total = newPos*4; + total = newPos * 4; // qDebug("rewind released %d", total); - startTimer(1000); + startTimer( 1000); doPlay(); @@ -1997,3 +1925,3 @@ void QtRec::rewindReleased() { void QtRec::FastforwardPressed() { - if(ListView1->currentItem() == 0) return; + if( ListView1->currentItem() == 0) return; if( !wavFile->track.isOpen()) @@ -2014,9 +1942,9 @@ void QtRec::forwardTimerTimeout() { int sliderValue = timeSlider->value(); - sliderValue = sliderValue +(filePara.numberSamples/100); + sliderValue = sliderValue + ( filePara.numberSamples / 100); // if(toEndButton->isDown()) - timeSlider->setValue(sliderValue); + timeSlider->setValue( sliderValue); QString timeString; - filePara.numberOfRecordedSeconds=(float)sliderValue/(float)filePara.sampleRate*(float)2; + filePara.numberOfRecordedSeconds = (float)sliderValue / (float)filePara.sampleRate * (float)2; timeString.sprintf( "%.2f", filePara.numberOfRecordedSeconds); @@ -2031,5 +1959,5 @@ void QtRec::FastforwardReleased() { int newPos = lseek( filePara.fd, sliderPos, SEEK_SET); - total = newPos*4; - filePara.numberOfRecordedSeconds=(float)sliderPos/(float)filePara.sampleRate*(float)2; - startTimer(1000); + total = newPos * 4; + filePara.numberOfRecordedSeconds = (float)sliderPos / (float)filePara.sampleRate * (float)2; + startTimer( 1000); doPlay(); @@ -2046,7 +1974,7 @@ QString QtRec::getStorage(const QString &fileName) { for( ; it.current(); ++it ){ - const QString name = (*it)->name(); - const QString path = (*it)->path(); - const QString disk = (*it)->disk(); - if( fileName.find(path,0,true) != -1) - storage=name; + const QString name = ( *it)->name(); + const QString path = ( *it)->path(); + const QString disk = ( *it)->disk(); + if( fileName.find( path,0,true) != -1) + storage = name; // const QString options = (*it)->options(); @@ -2073,3 +2001,3 @@ void QtRec::setRecordButton(bool b) { - Rec_PushButton->setDown(true); + Rec_PushButton->setDown( true); QPixmap image3( ( const char** ) image3_data ); @@ -2077,4 +2005,4 @@ void QtRec::setRecordButton(bool b) { if(Stop_PushButton->isDown()) - Stop_PushButton->setDown(true); - playLabel2->setText(tr("Stop") ); + Stop_PushButton->setDown( true); + playLabel2->setText( tr("Stop") ); @@ -2085,4 +2013,4 @@ void QtRec::setRecordButton(bool b) { if(Stop_PushButton->isDown()) - Stop_PushButton->setDown(false); - playLabel2->setText(tr("Play") ); + Stop_PushButton->setDown( false); + playLabel2->setText( tr("Play") ); if(Rec_PushButton->isDown()) @@ -2095,6 +2023,6 @@ void QtRec::fillDirectoryCombo() { directoryComboBox->clear(); - int index=0; + int index = 0; Config cfg("OpieRec"); cfg.setGroup("Settings"); - QString dir= cfg.readEntry("directory", "/"); + QString dir = cfg.readEntry("directory", "/"); StorageInfo storageInfo; @@ -2104,8 +2032,8 @@ void QtRec::fillDirectoryCombo() { for( ; it.current(); ++it ){ - const QString name = (*it)->name(); - const QString path = (*it)->path(); + const QString name = ( *it)->name(); + const QString path = ( *it)->path(); // directoryComboBox->insertItem(name+" "+path); directoryComboBox->insertItem(name); - if(path==dir) - directoryComboBox->setCurrentItem(index); + if( path == dir) + directoryComboBox->setCurrentItem( index); index++; @@ -2126,3 +2054,3 @@ void QtRec::doMute(bool b) { void QtRec::slotAutoMute(bool b) { - autoMute=b; + autoMute = b; Config cfg("OpieRec"); @@ -2130,3 +2058,3 @@ void QtRec::slotAutoMute(bool b) { cfg.writeEntry("useAutoMute",b); - doMute(b); + doMute( b); outMuteCheckBox->setChecked( b); @@ -2138,3 +2066,3 @@ void QtRec::selectItemByName(const QString & name) { for ( ; it.current(); ++it ) - if(name == it.current()->text(0)) + if( name == it.current()->text(0)) ListView1->setCurrentItem(it.current()); @@ -2143,26 +2071,39 @@ void QtRec::selectItemByName(const QString & name) { -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; - } +// long findPeak(long input ) { + +// // 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 @@ -57,3 +57,3 @@ class QtRec : public QWidget public: - static QString appName() { return QString::fromLatin1("opierec"); } + static QString appName() { return QString::fromLatin1("opierec"); } QtRec( QWidget* parent=0, const char* name=0, WFlags fl=0 ); @@ -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; @@ -180,3 +179,3 @@ protected: void showListMenu(QListViewItem * ); -// void quickRec(); +// void quickRec(); 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]; @@ -296,3 +296,3 @@ return wavResolution; int WavFile::getSampleRate() { -return wavSampleRate; + return wavSampleRate; } @@ -300,3 +300,3 @@ return wavSampleRate; int WavFile::getNumberSamples() { -return wavNumberSamples; + return wavNumberSamples; } @@ -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(); |