author | llornkcor <llornkcor> | 2005-03-12 01:54:52 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2005-03-12 01:54:52 (UTC) |
commit | 84af289057291a49a52a60b390bc5320c02b5a55 (patch) (side-by-side diff) | |
tree | 523f2d36240efd4f500bfbc35996771bebd7360d | |
parent | 6b67c3b2685b2d3f1bc7a787216aa769d4ea257a (diff) | |
download | opie-84af289057291a49a52a60b390bc5320c02b5a55.zip opie-84af289057291a49a52a60b390bc5320c02b5a55.tar.gz opie-84af289057291a49a52a60b390bc5320c02b5a55.tar.bz2 |
fix irregularity with adpcm and bits
-rw-r--r-- | noncore/multimedia/opierec/device.cpp | 16 | ||||
-rw-r--r-- | noncore/multimedia/opierec/opierec.pro | 1 | ||||
-rw-r--r-- | noncore/multimedia/opierec/qtrec.cpp | 123 | ||||
-rw-r--r-- | noncore/multimedia/opierec/wavFile.cpp | 62 |
4 files changed, 105 insertions, 97 deletions
diff --git a/noncore/multimedia/opierec/device.cpp b/noncore/multimedia/opierec/device.cpp index e7e0f4b..a76665e 100644 --- a/noncore/multimedia/opierec/device.cpp +++ b/noncore/multimedia/opierec/device.cpp @@ -58,10 +58,11 @@ Device::Device( QObject * parent, bool record ) devRate = -1; if( !record){ //playing - owarn << "setting up DSP for playing" << oendl; - flags = O_WRONLY; + owarn << "New Sound device DSP for playing" << oendl; + flags = O_RDWR; +// flags = O_WRONLY; } else { //recording - owarn << "setting up DSP for recording" << oendl; + owarn << "New Sound device DSP for recording" << oendl; flags = O_RDWR; // flags = O_RDONLY; selectMicInput(); @@ -69,6 +70,7 @@ Device::Device( QObject * parent, bool record ) } bool Device::openDsp() { + qWarning("Device::openDsp()"); if( openDevice( flags) == -1) { perror("<<<<<<<<<<<<<<ioctl(\"Open device\")"); return false; @@ -77,10 +79,10 @@ bool Device::openDsp() { } int Device::openDevice( int flags) { - owarn << "Opening"<< dspstr; + owarn << "Opening sound device:"<< DSPSTROUT << oendl; - if (( sd = ::open( DSPSTROUT, flags)) == -1) { - perror("open(\"/dev/dsp\")"); + if (( sd = ::open( DSPSTROUT, O_RDWR)) == -1) { + perror("open(\"/dev/dsp\")\n"); QString errorMsg="Could not open audio device\n /dev/dsp\n" +(QString)strerror(errno); qDebug( "XXXXXXXXXXXXXXXXXXXXXXX "+errorMsg ); @@ -90,6 +92,7 @@ int Device::openDevice( int flags) { if(ioctl(sd,SNDCTL_DSP_RESET,0)<0){ perror("ioctl RESET"); } + qWarning("opened!"); return sd; } @@ -150,6 +153,7 @@ bool Device::selectMicInput() { } bool Device::closeDevice( bool) { + if(sd) ::close( sd); //close sound device return true; } diff --git a/noncore/multimedia/opierec/opierec.pro b/noncore/multimedia/opierec/opierec.pro index 6a5838a..6008bf7 100644 --- a/noncore/multimedia/opierec/opierec.pro +++ b/noncore/multimedia/opierec/opierec.pro @@ -31,6 +31,7 @@ contains(CONFIG, pdaudio) { INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe -lopiecore2 -lpthread + DEFINES += THREADED TARGET = opierec include( $(OPIEDIR)/include.pro ) } diff --git a/noncore/multimedia/opierec/qtrec.cpp b/noncore/multimedia/opierec/qtrec.cpp index e827083..9b761aa 100644 --- a/noncore/multimedia/opierec/qtrec.cpp +++ b/noncore/multimedia/opierec/qtrec.cpp @@ -117,18 +117,18 @@ void quickRec() QString num; int level = 0; int threshold = 0; - int bits = filePara.resolution; - odebug << "bits " << bits << "" << oendl; + int bits = filePara.resolution; + 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; + odebug << "start recording WAVE_FORMAT_DVI_ADPCM" << oendl; // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_DVI_ADPCM >>>>>>>>>>>>>>>>>>>>>> char abuf[ BUFSIZE/2 ]; short sbuf[ BUFSIZE ]; @@ -156,7 +156,7 @@ void quickRec() // adpcm_coder( sbuf2, abuf, number/2, &encoder_state); adpcm_coder( sbuf, abuf, number/2, &encoder_state); - bytesWritten = ::write( filePara.fd , (short *)abuf, number/4); + bytesWritten = ::write( filePara.fd , abuf, number/4); waveform->newSamples( sbuf, number ); @@ -164,10 +164,10 @@ void quickRec() filePara.numberSamples = total; timeSlider->setValue( total); - printf("%d, bytes %d,total %d\r", number, bytesWritten, total); - fflush(stdout); + printf("%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) { @@ -214,8 +214,8 @@ void quickRec() if( filePara.SecondsToRecord != 0) timeSlider->setValue( total); - printf("%d, bytes %d,total %d\r",number, bytesWritten , total); - fflush(stdout); + printf("%d, bytes %d,total %d\r",number, bytesWritten , total); + fflush(stdout); filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate / (float)2/filePara.channels; @@ -301,8 +301,10 @@ void playIt() // 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 *4); + bytesWritten = write ( soundDevice->sd , sbuf, number * 4); + + waveform->newSamples( sbuf, number ); + // if(filePara.channels==1) // total += bytesWritten/2; //mono // else @@ -342,7 +344,7 @@ void playIt() // // 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); + bytesWritten = ::write( soundDevice->sd, inbuffer, number); waveform->newSamples( inbuffer, number); //-------------->>>> out to device // total+=bytesWritten; @@ -432,7 +434,7 @@ QtRec::QtRec( QWidget* parent, const char* name, WFlags fl ) soundDevice = 0; wavFile = 0; // if( soundDevice) delete soundDevice; - QTimer::singleShot(100,this, SLOT(initIconView())); + QTimer::singleShot(100,this, SLOT(initIconView())); if( autoMute) doMute( true); @@ -788,8 +790,8 @@ void QtRec::initConfig() { compressionCheckBox->setChecked( cfg.readBoolEntry("wavCompression",1)); if( compressionCheckBox->isChecked()) { + bitRateComboBox->setCurrentItem(1); bitRateComboBox->setEnabled(false); - bitRateComboBox->setCurrentItem(0); filePara.resolution=16; } @@ -1048,7 +1050,7 @@ bool QtRec::setupAudio( bool b) { } // if(soundDevice) delete soundDevice; - odebug << "<<<<<<<<<<<<<<<<<<<open dsp " << filePara.sampleRate << " " << filePara.channels << " " << sampleformat << "" << oendl; + owarn << "<<<<<<<<<<<<<<<<<<<open dsp " << filePara.sampleRate << " " << filePara.channels << " " << sampleformat << "" << oendl; // owarn << "change waveform settings" << oendl; waveform->changeSettings( filePara.sampleRate, filePara.channels ); @@ -1230,38 +1232,38 @@ void QtRec::deleteSound() { // case 0: // #endif // { - QString file = ListView1->currentItem()->text(0); - QString fileName; - fileName = cfg.readEntry( file, ""); - QFile f( fileName); - if( f.exists()) - if( !f.remove()) - QMessageBox::message( tr("Error"), tr("Could not remove file.")); - - int nFiles = cfg.readNumEntry( "NumberofFiles",0); - bool found = false; - for(int i=0;i<nFiles+1;i++) { - - if( cfg.readEntry( QString::number(i),"").find( file,0,true) != -1) { - found = true; - 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.writeEntry( "NumberofFiles", nFiles-1); - cfg.write(); - - ListView1->takeItem( ListView1->currentItem() ); - delete ListView1->currentItem(); - - ListView1->clear(); - ListView1->setSelected( ListView1->firstChild(), true); - initIconView(); - update(); + QString file = ListView1->currentItem()->text(0); + QString fileName; + fileName = cfg.readEntry( file, ""); + QFile f( fileName); + if( f.exists()) + if( !f.remove()) + QMessageBox::message( tr("Error"), tr("Could not remove file.")); + + int nFiles = cfg.readNumEntry( "NumberofFiles",0); + bool found = false; + for(int i=0;i<nFiles+1;i++) { + + if( cfg.readEntry( QString::number(i),"").find( file,0,true) != -1) { + found = true; + 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.writeEntry( "NumberofFiles", nFiles-1); + cfg.write(); + + ListView1->takeItem( ListView1->currentItem() ); + delete ListView1->currentItem(); + + ListView1->clear(); + ListView1->setSelected( ListView1->firstChild(), true); + initIconView(); + update(); setCaption( tr( "OpieRecord " )); } @@ -1409,7 +1411,7 @@ void QtRec::endRecording() { // 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()); } @@ -1429,7 +1431,7 @@ void QtRec::endRecording() { 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; @@ -1483,10 +1485,10 @@ void QtRec::endPlaying() { } bool QtRec::openPlayFile() { - + qWarning("opening file"); qApp->processEvents(); if( currentFile.isEmpty()) { - QMessageBox::message(tr("Opierec"),tr("Please select file to play")); + QMessageBox::message(tr("Opierec"),tr("Please select file to play")); endPlaying(); return false; } @@ -1726,8 +1728,9 @@ void QtRec::compressionSelected(bool b) { cfg.write(); if(b) { - bitRateComboBox->setEnabled( false); + qWarning("set adpcm"); bitRateComboBox->setCurrentItem( 1); + bitRateComboBox->setEnabled( false); filePara.resolution = 16; } else{ bitRateComboBox->setEnabled( true); @@ -1801,7 +1804,7 @@ void QtRec::timerEvent( QTimerEvent * ) { 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; @@ -1816,7 +1819,7 @@ void QtRec::changeTimeSlider(int index) { void QtRec::timeSliderPressed() { if( ListView1->currentItem() == 0) return; - odebug << "slider pressed" << oendl; + odebug << "slider pressed" << oendl; paused = true; stopped = true; } @@ -1825,7 +1828,7 @@ 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; @@ -1855,7 +1858,7 @@ void QtRec::rewindTimerTimeout() { 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); @@ -1869,7 +1872,7 @@ void QtRec::rewindReleased() { 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(); } diff --git a/noncore/multimedia/opierec/wavFile.cpp b/noncore/multimedia/opierec/wavFile.cpp index 80453e1..b53c416 100644 --- a/noncore/multimedia/opierec/wavFile.cpp +++ b/noncore/multimedia/opierec/wavFile.cpp @@ -27,7 +27,7 @@ WavFile::WavFile( QObject * parent,const QString &fileName, bool makeNwFile, int int channels, int resolution, int format ) : QObject( parent) { -//odebug << "new wave file" << oendl; + owarn << "new wave file: " << fileName << oendl; bool b = makeNwFile; wavSampleRate=sampleRate; wavFormat=format; @@ -109,20 +109,20 @@ void WavFile::closeFile() { } int WavFile::openFile(const QString ¤tFileName) { -// odebug << "open play file "+currentFileName << oendl; + qWarning("open play file "+currentFileName);; closeFile(); - track.setName(currentFileName); - - if(!track.open(IO_ReadOnly)) { - QString errorMsg=(QString)strerror(errno); - odebug << "<<<<<<<<<<< "+errorMsg+currentFileName << oendl; - QMessageBox::message("Note", "Error opening file.\n" +errorMsg); - return -1; - } else { - parseWavHeader( track.handle()); - } - return track.handle(); + track.setName(currentFileName); + + if(!track.open(IO_ReadOnly)) { + QString errorMsg=(QString)strerror(errno); + odebug << "<<<<<<<<<<< "+errorMsg+currentFileName << oendl; + QMessageBox::message("Note", "Error opening file.\n" +errorMsg); + return -1; + } else { + parseWavHeader( track.handle()); + } + return track.handle(); } bool WavFile::setWavHeader(int fd, wavhdr *hdr) { @@ -152,7 +152,7 @@ bool WavFile::setWavHeader(int fd, wavhdr *hdr) { strncpy((*hdr).dataID, "data", 4); write( fd,hdr, sizeof(*hdr)); - odebug << "writing header: bitrate " << wavResolution << ", samplerate " << wavSampleRate << ", channels " << wavChannels << oendl; + owarn << "writing header: bitrate " << wavResolution << ", samplerate " << wavSampleRate << ", channels " << wavChannels << oendl; return true; } @@ -162,12 +162,12 @@ bool WavFile::adjustHeaders(int fd, int total) { write( fd, &i, sizeof(i)); lseek( fd, 40, SEEK_SET); write( fd, &total, sizeof(total)); - odebug << "adjusting header " << total << "" << oendl; + owarn << "adjusting header " << total << "" << oendl; return true; } int WavFile::parseWavHeader(int fd) { - odebug << "Parsing wav header" << oendl; + owarn << "Parsing wav header" << oendl; char string[4]; int found; short fmt; @@ -175,71 +175,71 @@ int WavFile::parseWavHeader(int fd) { unsigned long samplerrate, longdata; if (read(fd, string, 4) < 4) { - odebug << " Could not read from sound file." << oendl; + owarn << " Could not read from sound file." << oendl; return -1; } if (strncmp(string, "RIFF", 4)) { - odebug << " not a valid WAV file." << oendl; + owarn << " not a valid WAV file." << oendl; return -1; } lseek(fd, 4, SEEK_CUR); if (read(fd, string, 4) < 4) { - odebug << "Could not read from sound file." << oendl; + owarn << "Could not read from sound file." << oendl; return -1; } if (strncmp(string, "WAVE", 4)) { - odebug << "not a valid WAV file." << oendl; + owarn << "not a valid WAV file." << oendl; return -1; } found = 0; while (!found) { if (read(fd, string, 4) < 4) { - odebug << "Could not read from sound file." << oendl; + owarn << "Could not read from sound file." << oendl; return -1; } if (strncmp(string, "fmt ", 4)) { if (read(fd, &longdata, 4) < 4) { - odebug << "Could not read from sound file." << oendl; + owarn << "Could not read from sound file." << oendl; return -1; } lseek(fd, longdata, SEEK_CUR); } else { lseek(fd, 4, SEEK_CUR); if (read(fd, &fmt, 2) < 2) { - odebug << "Could not read format chunk." << oendl; + owarn << "Could not read format chunk." << oendl; return -1; } if (fmt != WAVE_FORMAT_PCM && fmt != WAVE_FORMAT_DVI_ADPCM) { - odebug << "Wave file contains unknown format. Unable to continue." << oendl; + owarn << "Wave file contains unknown format. Unable to continue." << oendl; return -1; } wavFormat = fmt; // compressionFormat=fmt; - odebug << "compressionFormat is " << fmt << "" << oendl; + owarn << "compressionFormat is " << fmt << "" << oendl; if (read(fd, &ch, 2) < 2) { - odebug << "Could not read format chunk." << oendl; + owarn << "Could not read format chunk." << oendl; return -1; } else { wavChannels = ch; - odebug << "File has " << ch << " channels" << oendl; + owarn << "File has " << ch << " channels" << oendl; } if (read(fd, &samplerrate, 4) < 4) { - odebug << "Could not read from format chunk." << oendl; + owarn << "Could not read from format chunk." << oendl; return -1; } else { wavSampleRate = samplerrate; // sampleRate = samplerrate; - odebug << "File has samplerate of " << (int) samplerrate << "" << oendl; + owarn << "File has samplerate of " << (int) samplerrate << "" << oendl; } lseek(fd, 6, SEEK_CUR); if (read(fd, &bitrate, 2) < 2) { - odebug << "Could not read format chunk." << oendl; + owarn << "Could not read format chunk." << oendl; return -1; } else { wavResolution=bitrate; // resolution = bitrate; - odebug << "File has bitrate of " << bitrate << "" << oendl; + owarn << "File has bitrate of " << bitrate << "" << oendl; } found++; } |