author | llornkcor <llornkcor> | 2003-08-10 23:03:39 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2003-08-10 23:03:39 (UTC) |
commit | 892aac84512b257c72362702a98462289589faec (patch) (side-by-side diff) | |
tree | d514fbd450129f2a1b2a897ef06c93e27cde4b30 | |
parent | 44bb1f23dcd0bea4775ba4b48fb370ad651290cc (diff) | |
download | opie-892aac84512b257c72362702a98462289589faec.zip opie-892aac84512b257c72362702a98462289589faec.tar.gz opie-892aac84512b257c72362702a98462289589faec.tar.bz2 |
forgot what I changed, but I changed something I need to commit
-rw-r--r-- | noncore/multimedia/opierec/qtrec.cpp | 200 | ||||
-rw-r--r-- | noncore/multimedia/opierec/qtrec.h | 2 |
2 files changed, 58 insertions, 144 deletions
diff --git a/noncore/multimedia/opierec/qtrec.cpp b/noncore/multimedia/opierec/qtrec.cpp index 147f63d..2bf795f 100644 --- a/noncore/multimedia/opierec/qtrec.cpp +++ b/noncore/multimedia/opierec/qtrec.cpp @@ -78,369 +78,320 @@ typedef struct { float numberOfRecordedSeconds; //total number of samples recorded int samplesToRecord; //number of samples to be recorded int inVol; //input volume int outVol; //output volume int format; //wavfile format PCM.. ADPCM const char *fileName; //name of fiel to be played/recorded } fileParameters; fileParameters filePara; bool monitoring, recording; bool stopped; QLabel *timeLabel; QSlider *timeSlider; 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 // threaded recording 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. int bytesWritten, number; 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; - qDebug("bits %d", bits); -// if( filePara.format==WAVE_FORMAT_DVI_ADPCM) -// else + // 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("ispace is frags %d, total %d", inInfo.fragments, inInfo.fragstotal); 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"); if( filePara.format==WAVE_FORMAT_DVI_ADPCM) { - qDebug("start recording WAVE_FORMAT_DVI_ADPCM"); - // <<<<<<<<<<<<<<<<<<<<<<<<<<< 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); for(;;) { if (stopped) { - qDebug("quickRec:: stopped"); break; // stop if playing was set to false -// return; } number=::read( filePara.sd, sbuf, BUFSIZE); - if(number <= 0) { perror("recording error "); - qDebug( "%s %d", filePara.fileName, number); + // qDebug( "%s %d", filePara.fileName, number); // errorStop(); recording=stopped=false; -// QMessageBox::message("Note", -// "Error recording to file\n%s", -// filePara.fileName); +// QMessageBox::message("Note", "Error recording to file\n%s",filePara.fileName); return; } //if(stereo == 2) { // adpcm_coder( sbuf2, abuf, number/2, &encoder_state); 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 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; - -// printf("Writing number %d, bytes %d,total %d, sample rate %d, secs %.2f \n", -// number, -// bytesWritten , -// total, -// filePara.sampleRate, -// filePara.numberOfRecordedSeconds); -// fflush(stdout); ioctl( filePara.sd, SNDCTL_DSP_GETIPTR, &info); -// qDebug("%d, %d", info.bytes, (info.bytes / filePara.sampleRate) / 2); - timeString.sprintf("%.2f", filePara.numberOfRecordedSeconds); timeLabel->setText( timeString + " seconds"); qApp->processEvents(); if( total >= filePara.samplesToRecord) break; } } else { - // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_PCM >>>>>>>>>>>>>>>>>>>>>> - qDebug("start recording 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) { - qDebug("quickRec:: stopped"); break; // stop if playing was set to false - return; } number=::read( filePara.sd, inbuffer, BUFSIZE); - if(number <= 0) { perror("recording error "); - qDebug( filePara.fileName); recording=stopped=false; // errorStop(); -// QMessageBox::message("Note","error recording to file\n%s",filePara.fileName); return;// false; } /* 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(); perror("File writing error "); return;// false; } // 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) timeSlider->setValue( total); // printf("Writing number %d, bytes %d,total %d\r",number, bytesWritten , total); // fflush(stdout); 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; - timeString.sprintf("%.2f", filePara.numberOfRecordedSeconds); timeLabel->setText( timeString + " seconds"); - qApp->processEvents(); if( total >= filePara.samplesToRecord) break; } } //end main loop } else { // <<<<<<<<<<<<<<<<<<<<<<< format = AFMT_U8; unsigned char unsigned_inbuffer[BUFSIZE], unsigned_outbuffer[BUFSIZE]; memset( unsigned_inbuffer, 0, BUFSIZE); memset( unsigned_outbuffer, 0, BUFSIZE); for(;;) { 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 // } bytesWritten = ::write( filePara.fd , unsigned_inbuffer, number); //------------->>>> out to file if(bytesWritten < 0) { recording=stopped=false; // errorStop(); QMessageBox::message("Note","There was a problem\nwriting to the file"); perror("File writing error "); return;// false; } total += bytesWritten; filePara.numberSamples = total; // printf("\nWriting number %d, bytes %d,total %d \r",number, bytesWritten , total); // fflush(stdout); if(filePara.SecondsToRecord !=0) timeSlider->setValue( total); filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate; timeString.sprintf("%.2f",filePara.numberOfRecordedSeconds); timeLabel->setText( timeString + " seconds"); qApp->processEvents(); if( total >= filePara.samplesToRecord) break; } //end main loop } // qDebug("Final %d, %d", filePara.samplesToRecord , filePara.numberOfRecordedSeconds); } /// END quickRec() // threaded play 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(); -// signal(SIGPIPE, SIG_IGN); - if ( !name ) setName( "OpieRec" ); init(); initConfig(); initConnections(); renameBox = 0; // open sound device to get volumes soundDevice = new Device( this, DSPSTROUT, DSPSTRMIXEROUT, false); // soundDevice->setDeviceFormat(AFMT_S16_LE); // soundDevice->setDeviceChannels(1); // soundDevice->setDeviceRate( 22050); getInVol(); getOutVol(); soundDevice->closeDevice( true); soundDevice->sd=-1; soundDevice=0; wavFile=0; if(soundDevice) delete soundDevice; initIconView(); if(autoMute) doMute(true); ListView1->setFocus(); playing=false; } QtRec::~QtRec() { } void QtRec::cleanUp() { if(!stopped) { stopped=true; endRecording(); } ListView1->clear(); if(autoMute) doMute(false); if(wavFile) delete wavFile; // if(soundDevice) delete soundDevice; - // QPEApplication::grabKeyboard(); // QPEApplication::ungrabKeyboard(); } void QtRec::init() { needsStereoOut=false; QPixmap image3( ( const char** ) image3_data ); QPixmap image4( ( const char** ) image4_data ); QPixmap image6( ( const char** ) image6_data ); stopped=true; setCaption( tr( "OpieRecord " ) + QString::number(VERSION) ); QGridLayout *layout = new QGridLayout( this ); layout->setSpacing( 2); layout->setMargin( 2); TabWidget = new QTabWidget( this, "TabWidget" ); layout->addMultiCellWidget(TabWidget, 0, 7, 0, 7); // TabWidget->setTabShape(QTabWidget::Triangular); ///**********<<<<<<<<<<<<>>>>>>>>>>>>*************** tab = new QWidget( TabWidget, "tab" ); QGridLayout *layout1 = new QGridLayout( tab); layout1->setSpacing( 2); layout1->setMargin( 2); 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); @@ -725,67 +676,68 @@ void QtRec::init() { // 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>"); // } ///**********<<<<<<<<<<<<>>>>>>>>>>>>*************** } void QtRec::initIconView() { ListView1->clear(); Config cfg("OpieRec"); cfg.setGroup("Sounds"); QString temp; QPixmap image0( ( const char** ) image0_data ); int nFiles = cfg.readNumEntry("NumberofFiles",0); for(int i=1;i<= nFiles;i++) { QListViewItem * item; QString fileS, mediaLocation, fileDate, filePath; -// temp.sprintf("%d",i); + temp.sprintf("%d",i); temp=cfg.readEntry(temp,""); //reads currentFile filePath = cfg.readEntry(temp,""); //currentFileName + // qDebug(filePath); QFileInfo info(filePath); fileDate = info.lastModified().toString(); fileS = cfg.readEntry( filePath, "0" );// file length in seconds mediaLocation=getStorage( filePath); if(info.exists()) { item = new QListViewItem( ListView1, temp, fileS, mediaLocation, fileDate); item->setPixmap( 0, image0); if(currentFileName == filePath) ListView1->setSelected( item, true); } } } void QtRec::initConnections() { connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) ); 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)) ); @@ -830,395 +782,360 @@ void QtRec::initConfig() { 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)); compressionCheckBox->setChecked( cfg.readBoolEntry("wavCompression",1)); if( compressionCheckBox->isChecked()) { bitRateComboBox->setEnabled(false); bitRateComboBox->setCurrentItem(0); filePara.resolution=16; } autoMuteCheckBox->setChecked( cfg.readBoolEntry("useAutoMute",0)); if( autoMuteCheckBox->isChecked()) slotAutoMute(true); else slotAutoMute(false); Config cofg( "qpe"); cofg.setGroup( "Volume"); outMuteCheckBox->setChecked( cofg.readBoolEntry( "Mute",0)); inMuteCheckBox->setChecked( cofg.readBoolEntry( "MicMute",0)); } //================ void QtRec::stop() { - qDebug("<<<<<<<<<stop()"); + // qDebug("<<<<<<<<<stop()"); setRecordButton(false); monitoring=false; stopped=true; if( !recording) endPlaying(); else endRecording(); timeSlider->setValue(0); // QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << true; // mute device } void QtRec::doPlayBtn() { if(!stopped) { playLabel2->setText(tr("Play")); stop(); } else { if(ListView1->currentItem() == 0) return; playLabel2->setText(tr("Stop")); currentFile = ListView1->currentItem()->text(0); start(); } } void QtRec::start() { //play if(stopped) { - qDebug("start::"); QPixmap image3( ( const char** ) image3_data ); Stop_PushButton->setPixmap( image3 ); Stop_PushButton->setDown(true); stopped=false; paused=false; secCount=1; if( openPlayFile()) if( setupAudio( false)) //recording is false doPlay(); } } bool QtRec::rec() { //record - qDebug("rec()"); if(!stopped) { - qDebug("rec:: !stopped"); monitoring=true; return false; } else { - qDebug("go ahead and record"); secCount=1; playLabel2->setText(tr("Stop")); monitoring=false; setRecordButton(true); stopped=false; if( setupAudio( true)) if(setUpFile()) { - qDebug("Ok to start recording"); 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()); if( filePara.SecondsToRecord == 0) { fileSize = diskSize; } else if( filePara.format==WAVE_FORMAT_PCM) { - qDebug("WAVE_FORMAT_PCM"); fileSize = (filePara.SecondsToRecord ) * filePara.channels * 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.samplesToRecord = fileSize; - 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); - // } if( diskSize < fileSize/1024) { QMessageBox::warning(this, tr("Low Disk Space"), tr("You are running low of\nrecording space\n" "or a card isn't being recognized")); stopped = true; //we need to be stopped stop(); } else { QString msg; msg.sprintf("%d, %d, %d", filePara.sampleRate, filePara.channels, filePara.resolution); #ifdef DEV_VERSION setCaption( msg); #endif filePara.fileName=currentFile.latin1(); - qDebug("Start recording thread"); pthread_t thread1; pthread_create( &thread1, NULL, (void * (*)(void *))quickRec, NULL/* &*/); -// quickRec(); toBeginningButton->setEnabled(false); toEndButton->setEnabled(false); startTimer(1000); } } //end setUpFile } //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; } /* This happens when a tab is selected*/ void QtRec::thisTab(QWidget* widg) { if(widg != NULL) { int index=TabWidget->currentPageIndex(); - if(index==0) { //file page - } +// if(index==0) { //file page +// } if(index ==1) { //control page fillDirectoryCombo(); // soundDevice->getOutVol(); // soundDevice->getInVol(); } - if(index==2) { //help page - } +// if(index==2) { //help page +// } qApp->processEvents(); update(); } } void QtRec::getOutVol( ) { filePara.outVol = soundDevice->getOutVolume(); - qDebug("out vol %d", filePara.outVol); OutputSlider->setValue( -filePara.outVol); } void QtRec::getInVol() { filePara.inVol = soundDevice->getInVolume(); - qDebug("in vol %d", filePara.inVol); InputSlider->setValue( -filePara.inVol); } void QtRec::changedOutVolume() { soundDevice->changedOutVolume(-OutputSlider->value()); } void QtRec::changedInVolume( ) { soundDevice->changedInVolume( -InputSlider->value()); } bool QtRec::setupAudio( bool b) { bool ok; int sampleformat, stereo, flags; char * dspString, *mixerString; filePara.resolution = bitRateComboBox->currentText().toInt( &ok,10); //16 if( !b){ // we want to play - qDebug("setting up DSP for playing"); if( filePara.resolution == 16 || compressionCheckBox->isChecked() ) { sampleformat = AFMT_S16_LE; filePara.resolution = 16; } else { sampleformat = AFMT_U8; filePara.resolution=8; } stereo = filePara.channels = 1; flags= O_WRONLY; dspString = DSPSTROUT; mixerString = DSPSTRMIXEROUT; } else { // we want to record - qDebug("setting up DSP for recording"); if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "16") sampleformat = AFMT_S16_LE; else sampleformat = AFMT_U8; if( !compressionCheckBox->isChecked()) { filePara.format=WAVE_FORMAT_PCM; - qDebug("WAVE_FORMAT_PCM"); } else { filePara.format=WAVE_FORMAT_DVI_ADPCM; sampleformat=AFMT_S16_LE; - qDebug("WAVE_FORMAT_DVI_ADPCM"); } stereo = filePara.channels = 1; -// filePara.sampleRate = sampleRateComboBox->currentText().toInt( &ok,10);//44100; flags= O_RDWR; -// flags= O_RDONLY; dspString = DSPSTRIN; mixerString = DSPSTRMIXEROUT; } // if(soundDevice) delete soundDevice; - qDebug("<<<<<<<<<<<<<<<<<<<open dsp %d %d %d", filePara.sampleRate, filePara.channels, sampleformat); soundDevice = new Device( this, dspString, mixerString, b); // soundDevice->openDsp(); soundDevice->reset(); - qDebug("device has been made %d", soundDevice->sd); - - ////////////////// <<<<<<<<<<<<>>>>>>>>>>>> soundDevice->setDeviceFormat( sampleformat); soundDevice->setDeviceChannels( filePara.channels); soundDevice->setDeviceRate( filePara.sampleRate); soundDevice->getDeviceFragSize(); #ifdef QT_QWS_EBX int frag = FRAGSIZE; soundDevice->setFragSize( frag); soundDevice->getDeviceFragSize(); #endif - ///////////////// + filePara.sd = soundDevice->sd; if ( filePara.sd == -1) { - monitoring=false; stopped=true; update(); - setCaption( tr( "OpieRecord " ) + QString::number(VERSION) ); + setCaption( tr( "OpieRecord " ) /*+ QString::number(VERSION)*/ ); stopped=true; return false; } if(autoMute) doMute(false); return true; } bool QtRec::setUpFile() { //setup file for recording - qDebug("Setting up wavfile"); + // qDebug("Setting up wavfile"); // if(wavFile) delete wavFile; wavFile = new WavFile( this, (const QString &)"", true, filePara.sampleRate, filePara.channels, filePara.resolution, filePara.format); filePara.fd = wavFile->wavHandle(); if(filePara.fd == -1) { return false; } else { filePara.channels=1; } return true; } /// <<<<<<<<<<<<<<<< PLAY >>>>>>>>>>>>>>>>>>> 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"); + // qDebug("new"); total=0; bytesWritten=0; filePara.numberOfRecordedSeconds = 0; } else { paused = false; secCount = (int)filePara.numberOfRecordedSeconds; } playing=true; number=0; QString num; // block=BUFSIZE; - qDebug("Play number of samples %d", filePara.numberSamples); timeSlider->setRange(0, filePara.numberSamples); timeString.sprintf("%.2f", filePara.numberOfRecordedSeconds); timeLabel->setText( timeString+ tr(" seconds")); - if( filePara.format==WAVE_FORMAT_DVI_ADPCM) { - qDebug("WAVE_FORMAT_DVI_ADPCM"); - } else { - qDebug("WAVE_FORMAT_PCM"); - } +// 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); #ifdef DEV_VERSION setCaption( msg); #endif if( filePara.resolution == 16 ) { //AFMT_S16_LE) { - qDebug("16 bit"); + // 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; @@ -1248,65 +1165,65 @@ bool QtRec::doPlay() { 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]; + 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); } } // qDebug("\nstopped or paused %d", total/4); if(!paused && !stopped) { stopped = true; // endPlaying(); endPlaying(); } @@ -1314,104 +1231,104 @@ bool QtRec::doPlay() { } void QtRec::changebitrateCombo(int i) { Config cfg("OpieRec"); cfg.setGroup("Settings"); int bits=0; if(i==0) { bits=16; } else { bits=8; } cfg.writeEntry("bitrate", bits); filePara.resolution=bits; cfg.write(); } void QtRec::changesamplerateCombo(int i) { Config cfg("OpieRec"); cfg.setGroup("Settings"); int rate=0; bool ok; rate = sampleRateComboBox->text(i).toInt(&ok, 10); 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(); } void QtRec::changeDirCombo(int index) { Config cfg("OpieRec"); cfg.setGroup("Settings"); QString sName = directoryComboBox->text(index); StorageInfo storageInfo; const QList<FileSystem> &fs = storageInfo.fileSystems(); QListIterator<FileSystem> it ( fs ); QString storage; for( ; it.current(); ++it ){ if( sName == (*it)->name()+" "+ (*it)->path() || (*it)->name() == sName ) { const QString path = (*it)->path(); recDir = path; cfg.writeEntry("directory", recDir); - qDebug("new rec dir "+recDir); + // qDebug("new rec dir "+recDir); } } cfg.write(); } void QtRec::changeSizeLimitCombo(int) { Config cfg("OpieRec"); cfg.setGroup("Settings"); cfg.writeEntry("sizeLimit", getCurrentSizeLimit() ); cfg.write(); } void QtRec::newSound() { - qDebug("<<<<<<<<<new sound"); + // qDebug("<<<<<<<<<new sound"); if( !rec()) { - qDebug("rec() failed"); + // qDebug("rec() failed"); endRecording(); deleteSound(); } } void QtRec::itClick(QListViewItem *item) { currentFile=item->text(0); setCaption("OpieRecord "+currentFile); } void QtRec::deleteSound() { Config cfg("OpieRec"); cfg.setGroup("Sounds"); if( ListView1->currentItem() == NULL) return; #ifndef DEV_VERSION switch ( QMessageBox::warning(this,tr("Delete"), tr("Do you really want to <font size=+2><B>DELETE</B></font>\nthe selected file?"), tr("Yes"),tr("No"),0,1,1) ) { case 0: #endif { 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()) if( !f.remove()) QMessageBox::message(tr("Error"),tr("Could not remove file.")); @@ -1419,327 +1336,327 @@ void QtRec::deleteSound() { int nFiles = cfg.readNumEntry("NumberofFiles",0); bool found=false; for(int i=0;i<nFiles+1;i++) { // qDebug(cfg.readEntry(QString::number(i))); if( cfg.readEntry( QString::number(i),"").find( file,0,true) != -1) { 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),"")); } if(found) cfg.writeEntry( QString::number(i), cfg.readEntry( QString::number(i+1),"")); } cfg.removeEntry(cfg.readEntry(file)); cfg.removeEntry( file); // cfg.removeEntry( QString::number(nFiles)); cfg.writeEntry("NumberofFiles", nFiles-1); cfg.write(); ListView1->takeItem( ListView1->currentItem() ); // ListView1->takeItem( ListView1->itemAt(nFiles) ); delete ListView1->currentItem(); ListView1->clear(); ListView1->setSelected(ListView1->firstChild(), true); initIconView(); update(); } #ifndef DEV_VERSION }; #endif - setCaption( tr( "OpieRecord " ) + QString::number(VERSION) ); + setCaption( tr( "OpieRecord " ) /*+ QString::number(VERSION)*/ ); } 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: // if(stopped && !recording) // newSound(); // else // stop(); // break; // case Key_F2: { // if( !e->isAutoRepeat()) // rewindPressed(); // } // break; // case Key_F3: { // if( !e->isAutoRepeat()) // FastforwardPressed(); // } // break; ////////////////////////////// Zaurus keys case Key_F9: //activity break; case Key_F10: //contacts break; case Key_F11: //menu break; case Key_F12: //home break; case Key_F13: //mail break; case Key_Space: break; case Key_Delete: break; case Key_Up: // stop(); break; case Key_Down: // newSound(); break; case Key_Left: { - qDebug("rewinding"); + // qDebug("rewinding"); if( !e->isAutoRepeat()) rewindPressed(); } break; case Key_Right: { if( !e->isAutoRepeat()) FastforwardPressed(); } break; } } void QtRec::keyReleaseEvent( QKeyEvent *e) { switch ( e->key() ) { // case Key_F1: // if(stopped && !recording) // newSound(); // else // stop(); // break; // case Key_F2: // rewindReleased(); // break; // case Key_F3: // FastforwardReleased(); // break; ////////////////////////////// Zaurus keys case Key_F9: //activity break; case Key_F10: //contacts break; case Key_F11: //menu break; case Key_F12: //home if(stopped) doPlayBtn(); else stop(); break; case Key_F13: //mail break; case Key_Space: if(stopped && !recording) newSound(); else stop(); break; case Key_Delete: deleteSound(); break; case Key_Up: // stop(); - qDebug("Up"); + // qDebug("Up"); break; case Key_Down: // start(); // qDebug("Down"); // newSound(); break; case Key_Left: - qDebug("Left"); + // qDebug("Left"); rewindReleased(); break; case Key_Right: - qDebug("Right"); + // qDebug("Right"); FastforwardReleased(); break; } } void QtRec::endRecording() { - qDebug("endRecording"); + // qDebug("endRecording"); setRecordButton(false); timeSlider->setValue(0); toBeginningButton->setEnabled(true); toEndButton->setEnabled(true); monitoring=false; killTimers(); if(autoMute) doMute(true); soundDevice->closeDevice( true); recording = false; stopped=true; t->stop(); if( wavFile->track.isOpen()) { wavFile->adjustHeaders( filePara.fd, filePara.numberSamples); // soundDevice->sd=-1; filePara.numberSamples=0; // filePara.sd=-1; wavFile->closeFile(); filePara.fd=0; if(wavFile->isTempFile()) { // move tmp file to regular file QString cmd; cmd.sprintf("mv "+ wavFile->trackName() + " " + wavFile->currentFileName); - qDebug("moving tmp file to "+currentFileName); + // qDebug("moving tmp file to "+currentFileName); system(cmd.latin1()); } - qDebug("Just moved "+wavFile->currentFileName); + // qDebug("Just moved "+wavFile->currentFileName); Config cfg("OpieRec"); cfg.setGroup("Sounds"); int nFiles = cfg.readNumEntry( "NumberofFiles",0); 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( currentFile, wavFile->currentFileName); QString time; time.sprintf("%.2f", filePara.numberOfRecordedSeconds); 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(""); } if(soundDevice) delete soundDevice; initIconView(); selectItemByName(currentFile); } void QtRec::endPlaying() { - qDebug("end playing"); + // qDebug("end playing"); setRecordButton(false); toBeginningButton->setEnabled(true); toEndButton->setEnabled(true); if(autoMute) doMute(true); soundDevice->closeDevice( false); soundDevice->sd=-1; // if(soundDevice) delete soundDevice; - qDebug("file and sound device closed"); + // qDebug("file and sound device closed"); stopped=true; recording=false; playing=false; timeLabel->setText(""); monitoring=false; total = 0; filePara.numberSamples=0; filePara.sd=-1; wavFile->closeFile(); filePara.fd=0; // if(wavFile) delete wavFile; //this crashes - qDebug("track closed"); + // qDebug("track closed"); timeSlider->setValue(0); if(soundDevice) delete soundDevice; } bool QtRec::openPlayFile() { qApp->processEvents(); if( currentFile.isEmpty()) { QMessageBox::message(tr("Opierec"),tr("Please select file to play")); endPlaying(); return false; } QString currentFileName; Config cfg("OpieRec"); cfg.setGroup("Sounds"); 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); + // qDebug("opening for play: "+currentFileName); } } wavFile = new WavFile(this, currentFileName, false); filePara.fd = wavFile->wavHandle(); if(filePara.fd == -1) { // if(!track.open(IO_ReadOnly)) { QString errorMsg=(QString)strerror(errno); 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") +errorMsg+"\n"+currentFile); return false; } 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(); timeSlider->setPageStep(1); monitoring=true; timeSlider->setRange(0, filePara.numberSamples ); filePara.numberOfRecordedSeconds=(float) filePara.numberSamples / (float)filePara.sampleRate * (float)2; } return true; } void QtRec::listPressed( int mouse, QListViewItem *item, const QPoint &, int ) { if(item == NULL ) return; switch (mouse) { case 1: { if( renameBox !=0 ) //tricky cancelRename(); currentFile=item->text(0); setCaption( "OpieRecord "+currentFile); } break; case 2: showListMenu(item); @@ -1792,138 +1709,138 @@ void QtRec::doBeam() { } } } void QtRec::doMenuPlay() { qApp->processEvents(); currentFile = ListView1->currentItem()->text(0); } void QtRec::doRename() { QRect r = ListView1->itemRect( ListView1->currentItem( )); r = QRect( ListView1->viewportToContents( r.topLeft() ), r.size() ); r.setX( ListView1->contentsX() ); if ( r.width() > ListView1->visibleWidth() ) r.setWidth( ListView1->visibleWidth() ); renameBox = new QLineEdit( ListView1->viewport(), "qt_renamebox" ); renameBox->setFrame(true); renameBox->setText( ListView1->currentItem()->text(0) ); renameBox->selectAll(); renameBox->installEventFilter( this ); ListView1->addChild( renameBox, r.x(), r.y() ); renameBox->resize( r.size() ); ListView1->viewport()->setFocusProxy( renameBox ); renameBox->setFocus(); renameBox->show(); } void QtRec::okRename() { - qDebug("okRename"); - qDebug(renameBox->text()); + // qDebug("okRename"); + // qDebug(renameBox->text()); QString filename = renameBox->text(); cancelRename(); if( ListView1->currentItem() == NULL) return; Config cfg("OpieRec"); cfg.setGroup("Sounds"); QString file = ListView1->currentItem()->text(0); - qDebug("filename is " + filename); + // qDebug("filename is " + filename); int nFiles = cfg.readNumEntry("NumberofFiles",0); for(int i=0;i<nFiles+1;i++) { //look for file if( cfg.readEntry( QString::number(i),"").find(file,0,true) != -1) { QString filePath = cfg.readEntry(file,""); cfg.writeEntry( QString::number(i), filename ); cfg.writeEntry( filename, filePath ); cfg.removeEntry(file); cfg.write(); } } ListView1->takeItem( ListView1->currentItem() ); delete ListView1->currentItem(); ListView1->clear(); initIconView(); update(); } void QtRec::cancelRename() { - qDebug("cancel rename"); + // qDebug("cancel rename"); bool resetFocus = ListView1->viewport()->focusProxy() == renameBox; delete renameBox; renameBox = 0; if ( resetFocus ) { ListView1->viewport()->setFocusProxy( ListView1 ); ListView1->setFocus(); } } bool QtRec::eventFilter( QObject * o, QEvent * e ) { if ( o->inherits( "QLineEdit" ) ) { if ( e->type() == QEvent::KeyPress ) { QKeyEvent *ke = (QKeyEvent*)e; if ( ke->key() == Key_Return || ke->key() == Key_Enter ) { okRename(); return true; } else if ( ke->key() == Key_Escape ) { cancelRename(); return true; } } else if ( e->type() == QEvent::FocusOut ) { cancelRename(); return true; } } return QWidget::eventFilter( o, e ); } int QtRec::getCurrentSizeLimit() { return sizeLimitCombo->currentItem() * 5; } void QtRec::timerBreak() { - qDebug("timer break"); + // qDebug("timer break"); stop(); } void QtRec::doVolMuting(bool b) { Config cfg( "qpe" ); cfg. setGroup( "Volume" ); cfg.writeEntry( "Mute",b); cfg.write(); QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << b; } void QtRec::doMicMuting(bool b) { // qDebug("mic mute"); Config cfg( "qpe" ); cfg. setGroup( "Volume" ); cfg.writeEntry( "MicMute",b); cfg.write(); QCopEnvelope( "QPE/System", "micChange(bool)" ) << b; } void QtRec::compressionSelected(bool b) { Config cfg("OpieRec"); cfg.setGroup("Settings"); cfg.writeEntry("wavCompression", b); cfg.writeEntry("bitrate",16); filePara.resolution=16; cfg.write(); if(b) { bitRateComboBox->setEnabled(false); bitRateComboBox->setCurrentItem(0); filePara.resolution=16; } else{ @@ -1932,66 +1849,66 @@ void QtRec::compressionSelected(bool b) { } long QtRec::checkDiskSpace(const QString &path) { struct statfs fs; if ( !statfs( path.latin1(), &fs ) ) { int blkSize = fs.f_bsize; int availBlks = fs.f_bavail; long mult = blkSize / 1024; long div = 1024 / blkSize; if ( !mult ) mult = 1; if ( !div ) div = 1; return availBlks * mult / div; } return -1; } // short f_fstyp; /* File system type */ // long f_bsize; /* Block size */ // long f_frsize; /* Fragment size */ // long f_blocks; /* Total number of blocks*/ // long f_bfree; /* Count of free blocks */ // long f_files; /* Total number of file nodes */ // long f_ffree; /* Count of free file nodes */ // char f_fname[6]; /* Volumename */ // char f_fpack[6]; /* Pack name */ -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); } ///////////////////////////// timerEvent void QtRec::timerEvent( QTimerEvent *e ) { // qDebug( "%d", secCount ); #ifdef DEV_VERSION QString msg; msg.sprintf("%d, %d, %d", filePara.sampleRate, filePara.channels, filePara.resolution); setCaption( msg +" :: "+QString::number(secCount)); #endif 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(); @@ -2198,57 +2115,54 @@ void QtRec::fillDirectoryCombo() { void QtRec::errorStop() { stopped = true; wavFile->closeFile(); killTimers(); } void QtRec::doMute(bool b) { doVolMuting( b); doMicMuting( b); } void QtRec::slotAutoMute(bool b) { autoMute=b; Config cfg("OpieRec"); cfg.setGroup("Settings"); cfg.writeEntry("useAutoMute",b); doMute(b); outMuteCheckBox->setChecked( b); inMuteCheckBox->setChecked( b); } void QtRec::selectItemByName(const QString & name) { QListViewItemIterator it( ListView1 ); for ( ; it.current(); ++it ) if(name == it.current()->text(0)) ListView1->setCurrentItem(it.current()); } long findPeak(long input ) { // halfLife = time in seconds for output to decay to half value after an impulse - static float output = 0.0; - int halfLife = .25; + 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 ) - { + if ( input >= output) { // When we hit a peak, ride the peak to the top. output = input; - } - else - { + } 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 output; + return (long)output; } diff --git a/noncore/multimedia/opierec/qtrec.h b/noncore/multimedia/opierec/qtrec.h index bcf5504..7965c74 100644 --- a/noncore/multimedia/opierec/qtrec.h +++ b/noncore/multimedia/opierec/qtrec.h @@ -1,39 +1,39 @@ /**************************************************************************** ** Created: Thu Jan 17 11:19:45 2002 copyright 2002 by L.J. Potter ljp@llornkcor.com ****************************************************************************/ #ifndef QTREC_H #define QTREC_H -#define VERSION 20021202 +#define VERSION 1.0 #include <qpe/ir.h> #include <iostream.h> #include <qfile.h> #include <qimage.h> #include <qlineedit.h> #include <qpixmap.h> #include <qvariant.h> #include <qwidget.h> #include <stdio.h> #include <stdlib.h> #include "device.h" #include "wavFile.h" class QButtonGroup; class QCheckBox; class QComboBox; class QGridLayout; class QGroupBox; class QHBoxLayout; class QIconView; class QIconViewItem; class QLabel; class QLabel; class QListView; class QListViewItem; class QPushButton; class QSlider; class QTabWidget; class QTimer; |