-rw-r--r-- | noncore/multimedia/opierec/qtrec.cpp | 178 |
1 files changed, 91 insertions, 87 deletions
diff --git a/noncore/multimedia/opierec/qtrec.cpp b/noncore/multimedia/opierec/qtrec.cpp index 2187d5a..6eb6524 100644 --- a/noncore/multimedia/opierec/qtrec.cpp +++ b/noncore/multimedia/opierec/qtrec.cpp @@ -96,190 +96,193 @@ typedef struct { int SecondsToRecord; // number of seconds that should be recorded 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, playing; bool stopped; QLabel *timeLabel; QSlider *timeSlider; int sd; Waveform* waveform; Device *soundDevice; #ifdef THREADED void quickRec() #else - void QtRec::quickRec() + void QtRec::quickRec() #endif { - + 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; bytesWritten = 0; number = 0; QString num; int level = 0; int threshold = 0; // int bits = filePara.resolution; -// odebug << "bits " << bits << "" << oendl; +// odebug << "bits " << bits << "" << oendl; if( filePara.resolution == 16 ) { //AFMT_S16_LE) -// odebug << "AFMT_S16_LE size " << filePara.SecondsToRecord << "" << oendl; -// odebug << "samples to record " << filePara.samplesToRecord << "" << oendl; -// odebug << "" << filePara.sd << "" << oendl; +// odebug << "AFMT_S16_LE size " << filePara.SecondsToRecord << "" << oendl; +// odebug << "samples to record " << filePara.samplesToRecord << "" << oendl; +// odebug << "" << filePara.sd << "" << oendl; level = 7; threshold = 0; if( filePara.format == WAVE_FORMAT_DVI_ADPCM) { -// odebug << "start recording WAVE_FORMAT_DVI_ADPCM" << oendl; - // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_DVI_ADPCM >>>>>>>>>>>>>>>>>>>>>> +// odebug << "start recording WAVE_FORMAT_DVI_ADPCM" << oendl; +// <<<<<<<<<<<<<<<<<<<<<<<<<<< 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) { -// odebug << "quickRec:: stopped" << oendl; +// odebug << "quickRec:: stopped" << oendl; break; } // number=::read( filePara.sd, sbuf, BUFSIZE); number = soundDevice ->devRead( filePara.sd, sbuf, BUFSIZE); if(number <= 0) { perror("recording error "); - odebug << "" << filePara.fileName << " " << number << "" << oendl; + odebug << "" << filePara.fileName << " " << number << "" << oendl; stopped = true; return; } //if(stereo == 2) { // adpcm_coder( sbuf2, abuf, number/2, &encoder_state); adpcm_coder( sbuf, abuf, number/2, &encoder_state); bytesWritten = ::write( filePara.fd , (short *)abuf, number/4); - waveform->newSamples( (const short *)abuf, bytesWritten ); + waveform->newSamples( sbuf, number ); total += bytesWritten; filePara.numberSamples = total; timeSlider->setValue( total); - filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate * (float)2 / filePara.channels; + filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate * (float)2 + / filePara.channels; qApp->processEvents(); if( total >= filePara.samplesToRecord) { stopped = true; break; } } } else { // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_PCM >>>>>>>>>>>>>>>>>>>>>> - odebug << "start recording WAVE_FORMAT_PCM" << oendl; + odebug << "start recording WAVE_FORMAT_PCM" << oendl; short inbuffer[ BUFSIZE ], outbuffer[ BUFSIZE ]; memset( inbuffer, 0, BUFSIZE); memset( outbuffer, 0, BUFSIZE); for(;;) { if ( stopped) { - odebug << "quickRec:: stopped" << oendl; + odebug << "quickRec:: stopped" << oendl; stopped = true; break; // stop if playing was set to false return; } number = soundDevice->devRead( filePara.sd, (short *)inbuffer, BUFSIZE); - waveform->newSamples( inbuffer, number ); if( number <= 0) { perror( "recording error "); - odebug << filePara.fileName << oendl; + odebug << filePara.fileName << oendl; stopped = true; return; } bytesWritten = ::write( filePara.fd , inbuffer, number); + waveform->newSamples( inbuffer, number ); if( bytesWritten < 0) { perror("File writing error "); stopped = true; return; } total += bytesWritten; filePara.numberSamples = total; if( filePara.SecondsToRecord != 0) timeSlider->setValue( total); // printf("Writing number %d, bytes %d,total %d\r",number, bytesWritten , total); // fflush(stdout); - filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate / (float)2/filePara.channels; + filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate + / (float)2/filePara.channels; qApp->processEvents(); if( total >= filePara.samplesToRecord) { stopped = true; 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) { - odebug << "quickRec:: stopped" << oendl; + odebug << "quickRec:: stopped" << oendl; break; // stop if playing was set to false } - + number = ::read( filePara.sd, unsigned_inbuffer, BUFSIZE); bytesWritten = ::write( filePara.fd , unsigned_inbuffer, number); + waveform->newSamples( (const short *) unsigned_inbuffer, number ); if(bytesWritten < 0) { stopped = true; - QMessageBox::message("Note","There was a problem\nwriting to the file"); + QMessageBox::message("Note","<p>There was a problem writing to the file</p>"); perror("File writing error "); return; } 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; qApp->processEvents(); if( total >= filePara.samplesToRecord) { stopped = true; break; } } //end main loop } } /// END quickRec() #ifdef THREADED @@ -292,115 +295,115 @@ void playIt() int number = 0; 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 ); + waveform->newSamples( (const short *)sbuf, number *4); // 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 ); + waveform->newSamples( inbuffer, number); //-------------->>>> 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) { - owarn << "Jane! Stop this crazy thing!" << oendl; + owarn << "Jane! Stop this crazy thing!" << oendl; stopped = true; // playing = false; break; } } - printf("\nplaying number %d, bytes %d, total %d\r",number, bytesWritten, total); - fflush(stdout); +// 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")); @@ -411,93 +414,94 @@ void playIt() stopped = true; break; } // printf("Writing number %d, bytes %d, total %d, numberSamples %d\r",number, bytesWritten , total, filePara.numberSamples); // fflush(stdout); } } } QtRec::QtRec( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { if ( !name ) setName( "OpieRec" ); init(); initConfig(); initConnections(); renameBox = 0; // open sound device to get volumes Config hwcfg("OpieRec"); hwcfg.setGroup("Hardware"); - + soundDevice = new Device( this, hwcfg.readEntry( "Audio",DSPSTROUT), hwcfg.readEntry( "Mixer",DSPSTRMIXEROUT), false); // soundDevice = new Device( this, hwcfg.readEntry( "Audio","hw:0"), hwcfg.readEntry( "Mixer","hw:0"), 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; +// if( soundDevice) delete soundDevice; initIconView(); if( autoMute) doMute( true); ListView1->setFocus(); playing = false; } QtRec::~QtRec() { +// if( soundDevice) delete soundDevice; } void QtRec::cleanUp() { if( !stopped) { stopped = true; endRecording(); } ListView1->clear(); if( autoMute) doMute(false); - if( wavFile) delete wavFile; +// if( wavFile) delete wavFile; // if(soundDevice) delete soundDevice; } 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); @@ -696,49 +700,49 @@ void QtRec::init() { fillDirectoryCombo(); TabWidget->insertTab( tab_3, tr( "Options" ) ); TabWidget->insertTab( tab_5, tr( "Volume" ) ); waveform = new Waveform( this, "waveform" ); // waveform->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)3, waveform->sizePolicy().hasHeightForWidth() ) ); waveform->setMinimumSize( QSize( 0, 50 ) ); layout->addMultiCellWidget( waveform, 8, 8, 0, 7 ); waveform->setBackgroundColor ( black ); } 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); -// odebug << "init number of files " << nFiles << "" << oendl; +// odebug << "init number of files " << nFiles << "" << oendl; for(int i=1;i<= nFiles;i++) { QListViewItem * item; QString fileS, mediaLocation, fileDate, filePath; temp.sprintf( "%d",i); temp = cfg.readEntry( temp,""); //reads currentFile filePath = cfg.readEntry( temp,""); //currentFileName 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); } } } @@ -757,49 +761,49 @@ void QtRec::initConnections() { 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))); } void QtRec::initConfig() { int index, fred, i; Config cfg("OpieRec"); @@ -838,49 +842,49 @@ void QtRec::initConfig() { } else { filePara.channels = 1; } 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() { - owarn << "STOP" << oendl; + owarn << "STOP" << oendl; setRecordButton(false); if( !recording) endPlaying(); else endRecording(); timeSlider->setValue(0); } 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) { @@ -900,381 +904,381 @@ void QtRec::start() { //play bool QtRec::rec() { //record QString timeString; timeString.sprintf("%.0f", 0.0); timeLabel->setText( timeString+ " seconds"); if(!stopped) { monitoring = true; return false; } else { secCount = 1; playLabel2->setText(tr("Stop")); monitoring = false; setRecordButton( true); if( setupAudio( true)) if(setUpFile()) { 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); -// odebug << "sample rate is " << filePara.sampleRate << "" << oendl; +// odebug << "sample rate is " << filePara.sampleRate << "" << oendl; filePara.SecondsToRecord = getCurrentSizeLimit(); -// odebug << "size limit " << filePara.SecondsToRecord << " sec" << oendl; +// odebug << "size limit " << filePara.SecondsToRecord << " sec" << oendl; int diskSize = checkDiskSpace( (const QString &) wavFile->trackName()); if( filePara.SecondsToRecord == 0) { fileSize = diskSize; } else if( filePara.format == WAVE_FORMAT_PCM) { -// odebug << "WAVE_FORMAT_PCM" << oendl; +// odebug << "WAVE_FORMAT_PCM" << oendl; fileSize = (filePara.SecondsToRecord ) * filePara.channels * filePara.sampleRate * ( filePara.resolution / 8) + 1000; } else { -// odebug << "WAVE_FORMAT_DVI_ADPCM" << oendl; +// odebug << "WAVE_FORMAT_DVI_ADPCM" << oendl; 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 { - odebug << "Setting timeslider " << filePara.samplesToRecord << "" << oendl; + odebug << "Setting timeslider " << filePara.samplesToRecord << "" << oendl; // 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(); - odebug << "Start recording thread" << oendl; + odebug << "Start recording thread" << oendl; stopped = false; #ifdef THREADED pthread_t thread1; pthread_create( &thread1, NULL, (void * (*)(void *))quickRec, NULL/* &*/); #endif toBeginningButton->setEnabled( false); toEndButton->setEnabled( false); startTimer(1000); #ifndef THREADED quickRec(); #endif } } //end setUpFile } //end setupAudio 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 == 1) { //control page fillDirectoryCombo(); // soundDevice->getOutVol(); // soundDevice->getInVol(); } if( index==2) { //help page } - + qApp->processEvents(); update(); } } void QtRec::getOutVol( ) { filePara.outVol = soundDevice->getOutVolume(); -// odebug << "out vol " << filePara.outVol << "" << oendl; +// odebug << "out vol " << filePara.outVol << "" << oendl; OutputSlider->setValue( -filePara.outVol); } void QtRec::getInVol() { filePara.inVol = soundDevice->getInVolume(); -// odebug << "in vol " << filePara.inVol << "" << oendl; +// odebug << "in vol " << filePara.inVol << "" << oendl; 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; QString dspString, mixerString; filePara.resolution = bitRateComboBox->currentText().toInt( &ok,10); //16 if( !b) { // we want to play #ifdef PDAUDIO //ALSA if( filePara.resolution == 16 || compressionCheckBox->isChecked() ) { sampleformat = SND_PCM_FORMAT_S16; filePara.resolution = 16; } else if( filePara.resolution == 24 || compressionCheckBox->isChecked() ) { sampleformat = SND_PCM_FORMAT_S24; filePara.resolution = 24; } else if( filePara.resolution == 32 || compressionCheckBox->isChecked() ) { sampleformat = SND_PCM_FORMAT_S32; filePara.resolution = 32; } else { sampleformat = SND_PCM_FORMAT_U8; filePara.resolution = 8; } #else // we want to play if( filePara.resolution == 16 || compressionCheckBox->isChecked() ) { sampleformat = AFMT_S16_LE; filePara.resolution = 16; } else { sampleformat = AFMT_U8; filePara.resolution = 8; } #endif - + stereo = filePara.channels; flags = O_WRONLY; Config hwcfg("OpieRec"); hwcfg.setGroup("Hardware"); dspString = hwcfg.readEntry( "Audio", DSPSTROUT); mixerString = hwcfg.readEntry( "Mixer", DSPSTRMIXEROUT); recording = false; } else { // we want to record #ifdef PDAUDIO //ALSA if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "16") sampleformat = SND_PCM_FORMAT_S16; else if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "24") sampleformat = SND_PCM_FORMAT_S24; else if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "32") sampleformat = SND_PCM_FORMAT_S32; else sampleformat = SND_PCM_FORMAT_U8; #else if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "16") sampleformat = AFMT_S16_LE; else sampleformat = AFMT_U8; if( !compressionCheckBox->isChecked()) { filePara.format = WAVE_FORMAT_PCM; -// odebug << "WAVE_FORMAT_PCM" << oendl; +// odebug << "WAVE_FORMAT_PCM" << oendl; } else { filePara.format = WAVE_FORMAT_DVI_ADPCM; sampleformat = AFMT_S16_LE; -// odebug << "WAVE_FORMAT_DVI_ADPCM" << oendl; +// odebug << "WAVE_FORMAT_DVI_ADPCM" << oendl; } #endif - + stereo = filePara.channels; // filePara.sampleRate = sampleRateComboBox->currentText().toInt( &ok,10);//44100; flags= O_RDWR; // flags= O_RDONLY; Config hwcfg("OpieRec"); hwcfg.setGroup("Hardware"); dspString = hwcfg.readEntry( "Audio", DSPSTRIN); mixerString = hwcfg.readEntry( "Mixer", DSPSTRMIXERIN); recording = true; } // if(soundDevice) delete soundDevice; - odebug << "<<<<<<<<<<<<<<<<<<<open dsp " << filePara.sampleRate << " " << filePara.channels << " " << sampleformat << "" << oendl; - owarn << "change waveform settings" << oendl; + odebug << "<<<<<<<<<<<<<<<<<<<open dsp " << filePara.sampleRate << " " << filePara.channels << " " << sampleformat << "" << oendl; + owarn << "change waveform settings" << oendl; waveform->changeSettings( filePara.sampleRate, filePara.channels ); soundDevice = new Device( this, dspString, mixerString, b); // soundDevice->openDsp(); soundDevice->reset(); - odebug << "device has been made " << soundDevice->sd << "" << oendl; + odebug << "device has been made " << soundDevice->sd << "" << oendl; ////////////////// <<<<<<<<<<<<>>>>>>>>>>>> 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) ); return false; } if(autoMute) doMute(false); return true; } bool QtRec::setUpFile() { //setup file for recording -// odebug << "Setting up wavfile" << oendl; +// odebug << "Setting up wavfile" << oendl; // 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() { if( !paused) { total = 0; filePara.numberOfRecordedSeconds = 0; } else { paused = false; secCount = (int)filePara.numberOfRecordedSeconds; } playing = true; stopped = false; recording = false; QString num; - odebug << "Play number of samples " << filePara.numberSamples << "" << oendl; + odebug << "Play number of samples " << filePara.numberSamples << "" << oendl; // timeSlider->setRange( 0, filePara.numberSamples); timeString.sprintf("%f", filePara.numberOfRecordedSeconds); timeLabel->setText( timeString+ tr(" seconds")); QString msg; msg.sprintf("%d, %d, %d", filePara.sampleRate, filePara.channels, filePara.resolution); #ifdef DEV_VERSION setCaption( msg); #endif startTimer( 1000); #ifdef THREADED pthread_t thread2; pthread_create( &thread2, NULL, (void * (*)(void *))playIt, NULL/* &*/); #endif - + toBeginningButton->setEnabled( false); toEndButton->setEnabled( false); #ifndef THREADED playIt(); #endif return true; } void QtRec::changebitrateCombo(int i) { Config cfg("OpieRec"); cfg.setGroup("Settings"); int bits = 0; if( i == 1) { bits = 16; } else if( i == 2) { bits = 24; } else if( i == 3) { bits = 32; } 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; - odebug << "Change sample rate " << rate << "" << oendl; + odebug << "Change sample rate " << rate << "" << oendl; 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); - odebug << "new rec dir "+recDir << oendl; + odebug << "new rec dir "+recDir << oendl; } } cfg.write(); } void QtRec::changeSizeLimitCombo(int) { Config cfg("OpieRec"); cfg.setGroup("Settings"); cfg.writeEntry("sizeLimit", getCurrentSizeLimit() ); cfg.write(); } void QtRec::newSound() { if( !rec()) { endRecording(); deleteSound(); } } void QtRec::itClick(QListViewItem *item) { currentFile = item->text(0); setCaption("OpieRecord "+currentFile); } @@ -1352,49 +1356,49 @@ void QtRec::keyPressEvent( QKeyEvent *e) { // 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: { - odebug << "rewinding" << oendl; + odebug << "rewinding" << oendl; 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: @@ -1406,210 +1410,210 @@ void QtRec::keyReleaseEvent( QKeyEvent *e) { 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(); - odebug << "Up" << oendl; + odebug << "Up" << oendl; break; case Key_Down: // start(); - // odebug << "Down" << oendl; + // odebug << "Down" << oendl; // newSound(); break; case Key_Left: - odebug << "Left" << oendl; + odebug << "Left" << oendl; rewindReleased(); break; case Key_Right: - odebug << "Right" << oendl; + odebug << "Right" << oendl; FastforwardReleased(); break; } } void QtRec::endRecording() { monitoring = false; recording = false; stopped = true; waveform->reset(); setRecordButton( false); toBeginningButton->setEnabled( true); toEndButton->setEnabled( true); killTimers(); if(autoMute) doMute( true); soundDevice->closeDevice( true); 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); -// odebug << "moving tmp file to "+currentFileName << oendl; +// odebug << "moving tmp file to "+currentFileName << oendl; system( cmd.latin1()); } - - odebug << "Just moved " + wavFile->currentFileName << oendl; + + odebug << "Just moved " + wavFile->currentFileName << oendl; 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 ); -// odebug << "writing config numberOfRecordedSeconds "+time << oendl; +// odebug << "writing config numberOfRecordedSeconds "+time << oendl; cfg.write(); - odebug << "finished recording" << oendl; + odebug << "finished recording" << oendl; timeLabel->setText(""); } - if(soundDevice) delete soundDevice; +// if(soundDevice) delete soundDevice; timeSlider->setValue(0); initIconView(); selectItemByName( currentFile); } void QtRec::endPlaying() { monitoring = false; recording = false; playing = false; stopped = true; waveform->reset(); // errorStop(); -// odebug << "end playing" << oendl; +// odebug << "end playing" << oendl; setRecordButton( false); toBeginningButton->setEnabled( true); toEndButton->setEnabled( true); if(autoMute) doMute( true); soundDevice->closeDevice( false); soundDevice->sd = -1; // if(soundDevice) delete soundDevice; -// odebug << "file and sound device closed" << oendl; +// odebug << "file and sound device closed" << oendl; timeLabel->setText(""); total = 0; filePara.numberSamples = 0; filePara.sd = -1; // wavFile->closeFile(); filePara.fd = 0; // if(wavFile) delete wavFile; //this crashes -// odebug << "track closed" << oendl; +// odebug << "track closed" << oendl; killTimers(); - owarn << "reset slider" << oendl; + owarn << "reset slider" << oendl; timeSlider->setValue(0); - if(soundDevice) delete soundDevice; +// 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, "" ); - odebug << "opening for play: " + currentFileName << oendl; + odebug << "opening for play: " + currentFileName << oendl; } } 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) ); 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(); filePara.sampleRate = wavFile->getSampleRate(); filePara.resolution = wavFile->getResolution(); filePara.channels = wavFile->getChannels(); timeSlider->setPageStep(1); monitoring = true; - odebug << "file " << filePara.fd << ", samples " << filePara.numberSamples << " " << filePara.sampleRate << "" << oendl; + odebug << "file " << filePara.fd << ", samples " << filePara.numberSamples << " " << filePara.sampleRate << "" << oendl; int sec = (int) (( filePara.numberSamples / filePara.sampleRate) / filePara.channels) / ( filePara.channels*( filePara.resolution/8)); - owarn << "seconds " << sec << "" << oendl; + owarn << "seconds " << sec << "" << oendl; timeSlider->setRange(0, filePara.numberSamples ); } 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); ListView1->clearSelection(); break; }; @@ -1668,61 +1672,61 @@ void QtRec::doMenuPlay() { 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() { - odebug << renameBox->text() << oendl; + odebug << renameBox->text() << oendl; QString filename = renameBox->text(); cancelRename(); if( ListView1->currentItem() == NULL) return; Config cfg("OpieRec"); cfg.setGroup("Sounds"); QString file = ListView1->currentItem()->text(0); - odebug << "filename is " + filename << oendl; + odebug << "filename is " + filename << oendl; 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() { bool resetFocus = ListView1->viewport()->focusProxy() == renameBox; @@ -1751,214 +1755,214 @@ bool QtRec::eventFilter( QObject * o, QEvent * e ) { return true; } } return QWidget::eventFilter( o, e ); } int QtRec::getCurrentSizeLimit() { return sizeLimitCombo->currentItem() * 5; } void QtRec::timerBreak() { endPlaying(); } 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) { - // odebug << "mic mute" << oendl; + // odebug << "mic mute" << oendl; 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); + bitRateComboBox->setCurrentItem( 1); filePara.resolution = 16; } else{ bitRateComboBox->setEnabled( true); } } 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 & ) { - odebug << "Voicerecord received message "+msg << oendl; + odebug << "Voicerecord received message "+msg << oendl; } ///////////////////////////// timerEvent void QtRec::timerEvent( QTimerEvent * ) { // 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(); } - - odebug << "" << secCount << "" << oendl; + + odebug << "" << secCount << "" << oendl; QString timeString; #ifdef DEV_VERSION QString msg; msg.sprintf("%d, %d, %d", filePara.sampleRate, filePara.channels, filePara.resolution); setCaption( msg +" :: "+QString::number(secCount)); #endif timeString.sprintf("%d", secCount); timeLabel->setText( timeString + " seconds"); secCount++; } void QtRec::changeTimeSlider(int index) { if( ListView1->currentItem() == 0 || !wavFile->track.isOpen()) return; - // odebug << "Slider moved to " << index << "" << oendl; + // odebug << "Slider moved to " << index << "" << oendl; paused = true; stopped = true; sliderPos=index; QString timeString; filePara.numberOfRecordedSeconds = (float)sliderPos / (float)filePara.sampleRate * (float)2; timeString.sprintf( "%.2f", filePara.numberOfRecordedSeconds); secCount = (int)filePara.numberOfRecordedSeconds; timeLabel->setText( timeString + tr(" seconds")); } void QtRec::timeSliderPressed() { if( ListView1->currentItem() == 0) return; - // odebug << "slider pressed" << oendl; + // odebug << "slider pressed" << oendl; paused = true; stopped = true; } void QtRec::timeSliderReleased() { if( ListView1->currentItem() == 0) return; sliderPos = timeSlider->value(); - // odebug << "slider released " << sliderPos << "" << oendl; + // odebug << "slider released " << sliderPos << "" << oendl; stopped = false; int newPos = lseek( filePara.fd, sliderPos, SEEK_SET); total = newPos*4; filePara.numberOfRecordedSeconds = (float)sliderPos / (float)filePara.sampleRate * (float)2; doPlay(); } void QtRec::rewindPressed() { if( ListView1->currentItem() == 0) return; if( !wavFile->track.isOpen()) { if( !openPlayFile() ) return; else if( !setupAudio( false)) return; } else { killTimers(); paused = true; stopped = true; rewindTimer->start( 50, false); } } void QtRec::rewindTimerTimeout() { int sliderValue = timeSlider->value(); sliderValue = sliderValue - ( filePara.numberSamples / 100); // if(toBeginningButton->isDown()) timeSlider->setValue( sliderValue ) ; - // odebug << "" << sliderValue << "" << oendl; + // odebug << "" << sliderValue << "" << oendl; QString timeString; filePara.numberOfRecordedSeconds = (float)sliderValue / (float)filePara.sampleRate * (float)2; timeString.sprintf( "%.2f", filePara.numberOfRecordedSeconds); timeLabel->setText( timeString+ tr(" seconds")); } void QtRec::rewindReleased() { rewindTimer->stop(); if( wavFile->track.isOpen()) { sliderPos=timeSlider->value(); stopped = false; int newPos = lseek( filePara.fd, sliderPos, SEEK_SET); total = newPos * 4; - // odebug << "rewind released " << total << "" << oendl; + // odebug << "rewind released " << total << "" << oendl; startTimer( 1000); doPlay(); } } void QtRec::FastforwardPressed() { if( ListView1->currentItem() == 0) return; if( !wavFile->track.isOpen()) if( !openPlayFile() ) return; else if( !setupAudio( false)) return; killTimers(); paused = true; stopped = true; forwardTimer->start(50, false); } void QtRec::forwardTimerTimeout() { int sliderValue = timeSlider->value(); sliderValue = sliderValue + ( filePara.numberSamples / 100); @@ -1980,49 +1984,49 @@ 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); doPlay(); } } QString QtRec::getStorage(const QString &fileName) { StorageInfo storageInfo; const QList<FileSystem> &fs = storageInfo.fileSystems(); QListIterator<FileSystem> it ( fs ); QString storage; 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 options = (*it)->options(); // if( name.find( tr("Internal"),0,true) == -1) { // storageComboBox->insertItem( name +" -> "+disk); - // odebug << name << oendl; + // odebug << name << oendl; } return storage; // struct mntent *me; // // if(fileName == "/etc/mtab") { // FILE *mntfp = setmntent( fileName.latin1(), "r" ); // if ( mntfp ) { // while ( (me = getmntent( mntfp )) != 0 ) { // QString filesystemType = me->mnt_type; // } // } // endmntent( mntfp ); } void QtRec::setRecordButton(bool b) { if(b) { //about to record or play Rec_PushButton->setDown( true); QPixmap image3( ( const char** ) image3_data ); Stop_PushButton->setPixmap( image3 ); if(Stop_PushButton->isDown()) Stop_PushButton->setDown( true); playLabel2->setText( tr("Stop") ); @@ -2103,29 +2107,29 @@ void QtRec::selectItemByName(const QString & name) { // // 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; // } 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(); } - + |