summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2003-05-26 03:13:01 (UTC)
committer llornkcor <llornkcor>2003-05-26 03:13:01 (UTC)
commit830bab619ea396c018ccd29b20ce81cb47e113e1 (patch) (side-by-side diff)
tree41acd0f61f309992e5cd8faa4995cafff099fea1
parenteaa924af86511fd43fc9eac5438e73972f82158b (diff)
downloadopie-830bab619ea396c018ccd29b20ce81cb47e113e1.zip
opie-830bab619ea396c018ccd29b20ce81cb47e113e1.tar.gz
opie-830bab619ea396c018ccd29b20ce81cb47e113e1.tar.bz2
remove extra includes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opierec/device.cpp6
-rw-r--r--noncore/multimedia/opierec/helpwindow.cpp23
-rw-r--r--noncore/multimedia/opierec/opierec.control2
-rw-r--r--noncore/multimedia/opierec/qtrec.cpp16
-rw-r--r--noncore/multimedia/opierec/wavFile.cpp2
5 files changed, 1 insertions, 48 deletions
diff --git a/noncore/multimedia/opierec/device.cpp b/noncore/multimedia/opierec/device.cpp
index c2029b7..f9a80c5 100644
--- a/noncore/multimedia/opierec/device.cpp
+++ b/noncore/multimedia/opierec/device.cpp
@@ -1,206 +1,200 @@
// device.cpp
#include "device.h"
-#include "qtrec.h"
-#include <qpe/qpeapplication.h>
#include <qpe/config.h>
#include <qpe/qcopenvelope_qws.h>
-#include <qslider.h>
-#include <qmessagebox.h>
-#include <qfile.h>
-#include <qtextstream.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/soundcard.h>
#include <unistd.h>
#include<sys/wait.h>
// #include <sys/stat.h>
// #include <sys/time.h>
// #include <sys/types.h>
#include <unistd.h>
#include <errno.h>
//extern QtRec *qperec;
Device::Device( QObject * parent, const char * dsp, const char * mixr, bool record )
: QObject( parent)
{
dspstr = (char *)dsp;
mixstr = (char *)mixr;
devForm=-1;
devCh=-1;
devRate=-1;
if( !record){ //playing
qDebug("setting up DSP for playing");
flags = O_WRONLY;
} else { //recording
qDebug("setting up DSP for recording");
flags = O_RDWR;
// flags = O_RDONLY;
selectMicInput();
}
}
bool Device::openDsp() {
if( openDevice( flags) == -1) {
perror("<<<<<<<<<<<<<<ioctl(\"Open device\")");
return false;
}
return true;
}
int Device::getOutVolume( ) {
unsigned int volume;
int mixerHandle = open( mixstr, O_RDWR );
if ( mixerHandle >= 0 ) {
if(ioctl( mixerHandle, MIXER_READ(SOUND_MIXER_VOLUME), &volume )==-1)
perror("<<<<<<<<<<<<<<ioctl(\"MIXER_READ\")");
::close( mixerHandle );
} else
perror("open(\"/dev/mixer\")");
printf("<<<<<<<<<<<<<<<<<<<<output volume %d\n",volume);
Config cfg("qpe");
cfg.setGroup("Volume");
return cfg.readNumEntry("VolumePercent");
}
int Device::getInVolume() {
unsigned int volume=0;
int mixerHandle = ::open( mixstr, O_RDWR );
if ( mixerHandle >= 0 ) {
if(ioctl( mixerHandle, MIXER_READ(SOUND_MIXER_MIC), &volume )==-1)
perror("<<<<<<<<<<<<<<<ioctl(\"MIXER_READ\")");
::close( mixerHandle );
} else
perror("open(\"/dev/mixer\")");
printf("<<<<<<<<<<<<<<input volume %d\n", volume );
Config cfg("qpe");
cfg.setGroup("Volume");
return cfg.readNumEntry("Mic");
}
void Device::changedOutVolume(int vol) {
int level = (vol << 8) + vol;
int fd = 0;
if ((fd = open("/dev/mixer", O_RDWR))>=0) {
if(ioctl(fd, MIXER_WRITE(SOUND_MIXER_VOLUME), &level) == -1)
perror("ioctl(\"MIXER_IN_WRITE\")");
Config cfg("qpe");
cfg.setGroup("Volume");
cfg.writeEntry("VolumePercent", QString::number( vol ));
QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << false;
}
::close(fd);
}
void Device::changedInVolume(int vol ) {
int level = (vol << 8) + vol;
int fd = 0;
if ((fd = open("/dev/mixer", O_RDWR))>=0) {
if(ioctl(fd, MIXER_WRITE(SOUND_MIXER_MIC), &level) == -1)
perror("ioctl(\"MIXER_IN_WRITE\")");
Config cfg("qpe");
cfg.setGroup("Volume");
cfg.writeEntry("Mic", QString::number(vol ));
QCopEnvelope( "QPE/System", "micChange(bool)" ) << false;
}
::close(fd);
}
bool Device::selectMicInput() {
/*
int md=0;
int info=MIXER_WRITE(SOUND_MIXER_MIC);
md = ::open( "/dev/mixer", O_RDWR );
if ( md == -1)
perror("open(\"/dev/mixer\")");
else {
if( ioctl( md, SOUND_MIXER_WRITE_RECSRC, &info) == -1)
perror("ioctl(\"SOUND_MIXER_WRITE_RECSRC\")");
::close(md);
return false;
}
::close(md);
*/
return true;
}
int Device::openDevice( int flags) {
/* pid_t pid;
int status;
int pipefd[2];
char message[20];
if (pipe(pipefd) == -1){
perror ("Error creating pipe");
exit(1);
}
switch (pid = fork()) {
case -1:
perror("The fork failed!");
break;
case 0: {
*/
if (( sd = ::open( dspstr, flags)) == -1) {
perror("open(\"/dev/dsp\")");
QString errorMsg="Could not open audio device\n /dev/dsp\n"
+(QString)strerror(errno);
qDebug(errorMsg);
return -1;
}
int mixerHandle=0;
/* Set the input dsp device and its input gain the weird Zaurus way */
if (( mixerHandle = open("/dev/mixer1",O_RDWR))<0) {
perror("open(\"/dev/mixer1\")");
}
if(ioctl(sd,SNDCTL_DSP_RESET,0)<0){
perror("ioctl RESET");
}
// sprintf(message, "%d", sd);
/* QFile f1("/pid");
f1.open(IO_WriteOnly );
f1.writeBlock(message, strlen(message));
f1.close();
*/
/* close(pipefd[0]);
write(pipefd[1], message, sizeof(message));
close(pipefd[1]);
// qDebug("%d",soundDevice->sd );
_exit(0);
}
default:
// pid greater than zero is parent getting the child's pid
printf("Child's pid is %d\n",pid);
QString s;
close(pipefd[1]);
read(pipefd[0], message, sizeof(message));
s = message;
close(pipefd[0]);
// while(wait(NULL)!=pid)
// ;
printf("child %ld terminated normally, return status is zero\n", (long) pid);
*/
// filePara.sd=(long) pid;
/* QFile f2("/pid");
f2.open(IO_ReadOnly);
QTextStream t(&f2);
// for(int f=0; f < t.atEnd() ;f++) {
s = t.readLine();
// }
*/
// bool ok;
// sd = s.toInt(&ok, 10);
diff --git a/noncore/multimedia/opierec/helpwindow.cpp b/noncore/multimedia/opierec/helpwindow.cpp
index 0c4ac78..1ab6510 100644
--- a/noncore/multimedia/opierec/helpwindow.cpp
+++ b/noncore/multimedia/opierec/helpwindow.cpp
@@ -1,219 +1,196 @@
/****************************************************************************
** $Id$
**
** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
**
** This file is part of an example program for Qt. This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/
#include "helpwindow.h"
-#include <qstatusbar.h>
-#include <qstringlist.h>
#include <qlayout.h>
-#include <qpe/qpemenubar.h>
#include <qpe/qpetoolbar.h>
#include <qpe/resource.h>
#include <qaction.h>
-#include <qpixmap.h>
-#include <qpopupmenu.h>
#include <qmenubar.h>
-#include <qtoolbutton.h>
-#include <qiconset.h>
-#include <qfile.h>
-#include <qtextstream.h>
-#include <qstylesheet.h>
-#include <qmessagebox.h>
-#include <qfiledialog.h>
-#include <qapplication.h>
-#include <qcombobox.h>
-#include <qevent.h>
-#include <qlineedit.h>
-#include <qobjectlist.h>
-#include <qfileinfo.h>
-#include <qfile.h>
-#include <qdatastream.h>
-#include <qprinter.h>
-#include <qsimplerichtext.h>
-#include <qpaintdevicemetrics.h>
#include <ctype.h>
HelpWindow::HelpWindow( const QString& home_, const QString& _path, QWidget* parent, const char *name )
: QMainWindow( parent, name, WDestructiveClose ), pathCombo( 0 ), selectedURL()
{
QGridLayout *layout = new QGridLayout( this );
layout->setSpacing( 2);
layout->setMargin( 2);
qDebug(_path);
browser = new QTextBrowser( this );
QStringList Strlist;
Strlist.append( home_);
browser->mimeSourceFactory()->setFilePath( Strlist );
browser->setFrameStyle( QFrame::Panel | QFrame::Sunken );
connect( browser, SIGNAL( textChanged() ), this, SLOT( textChanged() ) );
if ( !home_.isEmpty() )
browser->setSource( home_ );
QPEToolBar *toolbar = new QPEToolBar( this );
QAction *a = new QAction( tr( "Backward" ), Resource::loadPixmap( "back" ), QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ), browser, SLOT( backward() ) );
a->addTo( toolbar );
a = new QAction( tr( "Forward" ), Resource::loadPixmap( "forward" ), QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ), browser, SLOT( forward() ) );
a->addTo( toolbar );
layout->addMultiCellWidget( toolbar, 0, 0, 0, 0);
layout->addMultiCellWidget( browser, 1, 2, 0, 2);
browser->setFocus();
}
void HelpWindow::setBackwardAvailable( bool b)
{
menuBar()->setItemEnabled( backwardId, b);
}
void HelpWindow::setForwardAvailable( bool b)
{
menuBar()->setItemEnabled( forwardId, b);
}
void HelpWindow::textChanged()
{
if ( browser->documentTitle().isNull() ) {
setCaption( "QpeRec - Helpviewer - " + browser->context() );
selectedURL = browser->context();
}
else {
setCaption( "QpeRec - Helpviewer - " + browser->documentTitle() ) ;
selectedURL = browser->documentTitle();
}
// if ( !selectedURL.isEmpty() && pathCombo ) {
// bool exists = FALSE;
// int i;
// for ( i = 0; i < pathCombo->count(); ++i ) {
// if ( pathCombo->text( i ) == selectedURL ) {
// exists = TRUE;
// break;
// }
// }
// if ( !exists ) {
// pathCombo->insertItem( selectedURL, 0 );
// pathCombo->setCurrentItem( 0 );
// mHistory[ hist->insertItem( selectedURL ) ] = selectedURL;
// } else
// pathCombo->setCurrentItem( i );
// selectedURL = QString::null;
// }
}
HelpWindow::~HelpWindow()
{
history.clear();
QMap<int, QString>::Iterator it = mHistory.begin();
for ( ; it != mHistory.end(); ++it )
history.append( *it );
QFile f( QDir::currentDirPath() + "/.history" );
f.open( IO_WriteOnly );
QDataStream s( &f );
s << history;
f.close();
bookmarks.clear();
QMap<int, QString>::Iterator it2 = mBookmarks.begin();
for ( ; it2 != mBookmarks.end(); ++it2 )
bookmarks.append( *it2 );
QFile f2( QDir::currentDirPath() + "/.bookmarks" );
f2.open( IO_WriteOnly );
QDataStream s2( &f2 );
s2 << bookmarks;
f2.close();
}
void HelpWindow::openFile()
{
#ifndef QT_NO_FILEDIALOG
#endif
}
void HelpWindow::newWindow()
{
( new HelpWindow(browser->source(), "qbrowser") )->show();
}
void HelpWindow::print()
{
#ifndef QT_NO_PRINTER
#endif
}
void HelpWindow::pathSelected( const QString &_path )
{
browser->setSource( _path );
QMap<int, QString>::Iterator it = mHistory.begin();
bool exists = FALSE;
for ( ; it != mHistory.end(); ++it ) {
if ( *it == _path ) {
exists = TRUE;
break;
}
}
if ( !exists )
mHistory[ hist->insertItem( _path ) ] = _path;
}
void HelpWindow::readHistory()
{
if ( QFile::exists( QDir::currentDirPath() + "/.history" ) ) {
QFile f( QDir::currentDirPath() + "/.history" );
f.open( IO_ReadOnly );
QDataStream s( &f );
s >> history;
f.close();
while ( history.count() > 20 )
history.remove( history.begin() );
}
}
void HelpWindow::readBookmarks()
{
if ( QFile::exists( QDir::currentDirPath() + "/.bookmarks" ) ) {
QFile f( QDir::currentDirPath() + "/.bookmarks" );
f.open( IO_ReadOnly );
QDataStream s( &f );
s >> bookmarks;
f.close();
}
}
void HelpWindow::histChosen( int i )
{
if ( mHistory.contains( i ) )
browser->setSource( mHistory[ i ] );
}
void HelpWindow::bookmChosen( int i )
{
if ( mBookmarks.contains( i ) )
browser->setSource( mBookmarks[ i ] );
}
void HelpWindow::addBookmark()
{
mBookmarks[ bookm->insertItem( caption() ) ] = caption();
}
diff --git a/noncore/multimedia/opierec/opierec.control b/noncore/multimedia/opierec/opierec.control
index e8396ae..455691f 100644
--- a/noncore/multimedia/opierec/opierec.control
+++ b/noncore/multimedia/opierec/opierec.control
@@ -1,10 +1,10 @@
-Package: opierec
+Package: opie-rec
Files: bin/opierec pics/opierec apps/Applications/opierec.desktop
Priority: optional
Section: multimedia/applications
Maintainer: L.J. Potter <ljp@llornkcor.com>
Architecture: arm
Version: 1.5-2
Depends: opie ($QPE_VERSION)
Description: audio sampling recorder
A simple audio recording/playing application.
diff --git a/noncore/multimedia/opierec/qtrec.cpp b/noncore/multimedia/opierec/qtrec.cpp
index 28f6546..0307d99 100644
--- a/noncore/multimedia/opierec/qtrec.cpp
+++ b/noncore/multimedia/opierec/qtrec.cpp
@@ -1,251 +1,235 @@
/****************************************************************************
// qtrec.cpp
Created: Thu Jan 17 11:19:58 2002
copyright 2002 by L.J. Potter <ljp@llornkcor.com>
****************************************************************************/
#define DEV_VERSION
#include "pixmaps.h"
#include "qtrec.h"
-#include "helpwindow.h"
-#include "device.h"
-#include "wavFile.h"
#include <pthread.h>
extern "C" {
#include "adpcm.h"
}
#include <sys/soundcard.h>
// #if defined (QTOPIA_INTERNAL_FSLP)
// #include <qpe/lnkproperties.h>
// #endif
-#include <qpe/applnk.h>
#include <qpe/config.h>
-#include <qpe/ir.h>
#include <qpe/qcopenvelope_qws.h>
#include <qpe/qpeapplication.h>
#include <qpe/resource.h>
#include <qpe/storage.h>
-#include <qlineedit.h>
-#include <qbuttongroup.h>
#include <qcheckbox.h>
#include <qcombobox.h>
-#include <qcursor.h>
//#include <qdatetime.h>
#include <qdir.h>
-#include <qfile.h>
-#include <qtextstream.h>
#include <qgroupbox.h>
-#include <qiconview.h>
-#include <qimage.h>
#include <qlabel.h>
#include <qlayout.h>
-#include <qlineedit.h>
#include <qlistview.h>
#include <qmessagebox.h>
-#include <qpixmap.h>
#include <qpopupmenu.h>
#include <qpushbutton.h>
-#include <qregexp.h>
#include <qslider.h>
#include <qtabwidget.h>
#include <qtimer.h>
-#include <qvariant.h>
#include <errno.h>
#include <fcntl.h>
#include <math.h>
#include <mntent.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/soundcard.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/vfs.h>
#include <unistd.h>
#include<sys/wait.h>
#include <sys/signal.h>
//#define ZAURUS 0
struct adpcm_state encoder_state;
struct adpcm_state decoder_state;
long findPeak(long input );
//char deviceRates[];
typedef struct {
int sampleRate;
/* int fragSize; */
/* int blockSize; */
int resolution; //bitrate
int channels; //number of channels
int fd; //file descriptor
int sd; //sound device descriptor
int numberSamples; //total number of samples
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;
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
audio_buf_info inInfo;
ioctl( filePara.fd, SNDCTL_DSP_GETISPACE, &inInfo);
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 >>>>>>>>>>>>>>>>>>>>>>
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);
// errorStop();
recording=stopped=false;
// 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");
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);
diff --git a/noncore/multimedia/opierec/wavFile.cpp b/noncore/multimedia/opierec/wavFile.cpp
index 0bb5736..7bfffb6 100644
--- a/noncore/multimedia/opierec/wavFile.cpp
+++ b/noncore/multimedia/opierec/wavFile.cpp
@@ -1,198 +1,196 @@
//wavFile.cpp
#include "wavFile.h"
#include "qtrec.h"
-#include <qdatetime.h>
-#include <qstring.h>
#include <qmessagebox.h>
#include <qdir.h>
#include <qpe/timestring.h>
#include <qpe/config.h>
#include <errno.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/vfs.h>
#include <fcntl.h>
#include <math.h>
#include <mntent.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
WavFile::WavFile( QObject * parent,const QString &fileName, bool makeNwFile, int sampleRate,
int channels, int resolution, int format )
: QObject( parent)
{
qDebug("new wave file");
bool b = makeNwFile;
wavSampleRate=sampleRate;
wavFormat=format;
wavChannels=channels;
wavResolution=resolution;
useTmpFile=false;
if( b) {
newFile();
} else {
openFile(fileName);
}
}
bool WavFile::newFile() {
qDebug("Set up new file");
Config cfg("OpieRec");
cfg.setGroup("Settings");
currentFileName=cfg.readEntry("directory",QDir::homeDirPath());
QString date;
date = TimeString::dateString( QDateTime::currentDateTime(),false,true);
date.replace(QRegExp("'"),"");
date.replace(QRegExp(" "),"_");
date.replace(QRegExp(":"),".");
date.replace(QRegExp(","),"");
QString currentFile=date;
if(currentFileName.right(1).find("/",0,true) == -1)
currentFileName += "/" + date;
else
currentFileName += date;
currentFileName+=".wav";
qDebug("set up file for recording: "+currentFileName);
char *pointer;
if( currentFileName.find("/mnt",0,true) == -1
&& currentFileName.find("/tmp",0,true) == -1 ) {
// if destination file is most likely in flash (assuming jffs2)
// we have to write to a different filesystem first
useTmpFile = true;
pointer=tmpnam(NULL);
qDebug("Opening tmp file %s",pointer);
track.setName( pointer);
} else { //just use regular file.. no moving
useTmpFile = false;
track.setName( currentFileName);
}
if(!track.open( IO_ReadWrite | IO_Truncate)) {
QString errorMsg=(QString)strerror(errno);
qDebug(errorMsg);
QMessageBox::message("Note", "Error opening file.\n" +errorMsg);
return false;
} else {
setWavHeader( track.handle() , &hdr);
}
return true;
}
WavFile::~WavFile() {
closeFile();
}
void WavFile::closeFile() {
if(track.isOpen())
track.close();
}
int WavFile::openFile(const QString &currentFileName) {
qDebug("open play file "+currentFileName);
closeFile();
track.setName(currentFileName);
if(!track.open(IO_ReadOnly)) {
QString errorMsg=(QString)strerror(errno);
qDebug("<<<<<<<<<<< "+errorMsg+currentFileName);
QMessageBox::message("Note", "Error opening file.\n" +errorMsg);
return -1;
} else {
parseWavHeader( track.handle());
}
return track.handle();
}
bool WavFile::setWavHeader(int fd, wavhdr *hdr) {
strncpy((*hdr).riffID, "RIFF", 4); // RIFF
strncpy((*hdr).wavID, "WAVE", 4); //WAVE
strncpy((*hdr).fmtID, "fmt ", 4); // fmt
(*hdr).fmtLen = 16; // format length = 16
if( wavFormat == WAVE_FORMAT_PCM) {
(*hdr).fmtTag = 1; // PCM
qDebug("set header WAVE_FORMAT_PCM");
}
else {
(*hdr).fmtTag = WAVE_FORMAT_DVI_ADPCM; //intel ADPCM
qDebug("set header WAVE_FORMAT_DVI_ADPCM");
}
// (*hdr).nChannels = 1;//filePara.channels;// ? 2 : 1*/; // channels
(*hdr).nChannels = wavChannels;// ? 2 : 1*/; // channels
(*hdr).sampleRate = wavSampleRate; //samples per second
(*hdr).avgBytesPerSec = (wavSampleRate)*( wavChannels*(wavResolution/8)); // bytes per second
(*hdr).nBlockAlign = wavChannels*( wavResolution/8); //block align
(*hdr).bitsPerSample = wavResolution; //bits per sample 8, or 16
strncpy((*hdr).dataID, "data", 4);
write( fd,hdr, sizeof(*hdr));
qDebug("writing header: bitrate%d, samplerate %d, channels %d",
wavResolution, wavSampleRate, wavChannels);
return true;
}
bool WavFile::adjustHeaders(int fd, int total) {
lseek(fd, 4, SEEK_SET);
int i = total + 36;
write( fd, &i, sizeof(i));
lseek( fd, 40, SEEK_SET);
write( fd, &total, sizeof(total));
qDebug("adjusting header %d", total);
return true;
}
int WavFile::parseWavHeader(int fd) {
qDebug("Parsing wav header");
char string[4];
int found;
short fmt;
unsigned short ch, bitrate;
unsigned long samplerrate, longdata;
if (read(fd, string, 4) < 4) {
qDebug(" Could not read from sound file.\n");
return -1;
}
if (strncmp(string, "RIFF", 4)) {
qDebug(" not a valid WAV file.\n");
return -1;
}
lseek(fd, 4, SEEK_CUR);
if (read(fd, string, 4) < 4) {
qDebug("Could not read from sound file.\n");
return -1;
}
if (strncmp(string, "WAVE", 4)) {
qDebug("not a valid WAV file.\n");
return -1;
}
found = 0;
while (!found) {
if (read(fd, string, 4) < 4) {
qDebug("Could not read from sound file.\n");
return -1;
}
if (strncmp(string, "fmt ", 4)) {
if (read(fd, &longdata, 4) < 4) {
qDebug("Could not read from sound file.\n");