Diffstat (limited to 'core/multimedia/opieplayer/wavplugin') (more/less context) (show whitespace changes)
5 files changed, 188 insertions, 43 deletions
diff --git a/core/multimedia/opieplayer/wavplugin/Makefile.in b/core/multimedia/opieplayer/wavplugin/Makefile.in index a46b925..bcbe7f2 100644 --- a/core/multimedia/opieplayer/wavplugin/Makefile.in +++ b/core/multimedia/opieplayer/wavplugin/Makefile.in @@ -102,4 +102,3 @@ REQUIRES= wavplugin.o: wavplugin.cpp \ - wavplugin.h \ - ../mediaplayerplugininterface.h + wavplugin.h @@ -107,3 +106,2 @@ wavpluginimpl.o: wavpluginimpl.cpp \ wavplugin.h \ - ../mediaplayerplugininterface.h \ wavpluginimpl.h diff --git a/core/multimedia/opieplayer/wavplugin/wavplugin.cpp b/core/multimedia/opieplayer/wavplugin/wavplugin.cpp index 7f63b3b..0be667f 100644 --- a/core/multimedia/opieplayer/wavplugin/wavplugin.cpp +++ b/core/multimedia/opieplayer/wavplugin/wavplugin.cpp @@ -19,4 +19,2 @@ **********************************************************************/ -// L.J.Potter added changes Fri 02-15-2002 - #include <stdio.h> @@ -29,3 +27,2 @@ - //#define debugMsg(a) qDebug(a) @@ -51,3 +48,3 @@ struct ChunkData { -const int sound_buffer_size = 512; // 4096; // you got to be kidding right? +const int sound_buffer_size = 4096; @@ -65,2 +62,6 @@ public: int samples; + int freq; + int chan; + int sampleRate; + int resolution; @@ -76,4 +77,4 @@ public: { + qDebug("add"); done = 0; - qApp->processEvents(); @@ -90,3 +91,3 @@ public: } - samples_due += chunkdata.samplesPerSec; + samples_due += 44100; while ( count && (samples_due > chunkdata.samplesPerSec) ) { @@ -100,2 +101,3 @@ public: } + return TRUE; @@ -104,2 +106,3 @@ public: bool initialise() { + qDebug("initialize"); if ( input == 0 ) @@ -140,3 +143,8 @@ public: } - } else { + } + + + + + else { // ignored chunk @@ -147,3 +155,3 @@ public: } // while - qDebug("bits %d", chunkdata.wBitsPerSample); + return TRUE; @@ -174,3 +182,3 @@ public: } - if ( chunkdata.wBitsPerSample == 8 ) { + if ( resolution == 8 ) { l = (data[out++] - 128) * 128; @@ -180,6 +188,6 @@ public: } - if ( chunkdata.channels == 1 ) { + if ( chan == 1 ) { r = l; } else { - if ( chunkdata.wBitsPerSample == 8 ) { + if ( resolution == 8 ) { r = (data[out++] - 128) * 128; @@ -193,2 +201,150 @@ public: +////////////////////////////////////////////////////// +int getWavSettings(int fd) +{ //this came from wmrecord + + char t1[4]; + unsigned long l1; + int found; + short fmt; + unsigned short ch, brate; + unsigned long srate; + + + /* First read in the RIFF identifier. If this is missing then the + * file is not a valid WAVE file. + */ + if (read(fd, t1, 4)<4) { + qDebug(" Could not read from sound file.\n"); + return -1; + } + if (strncmp(t1, "RIFF", 4)) { + qDebug(" not a valid WAV file.\n"); + return -1; + } + /* Advance the file pointer to the next relevant field. */ + lseek(fd, 4, SEEK_CUR); + /* Read in the WAVE identifier. */ + if (read(fd, t1, 4)<4) { + qDebug("Could not read from sound file.\n"); + return -1; + } + if (strncmp(t1, "WAVE", 4)) { + qDebug("not a valid WAV file.\n"); + return -1; + } + + /* Search through the file for the format chunk. If the end of the + * file is reached without finding the chunk, then the file is not a + * valid WAVE file. + */ + found = 0; + while (!found) { + if (read(fd, t1, 4)<4) { + qDebug("Could not read from sound file.\n"); + return -1; + } + if (strncmp(t1, "fmt ", 4)) { + /* Determine the length of the chunk found and skip to the next + * chunk. The chunk length is always stored in the four bytes + * following the chunk id. + */ + if (read(fd, &l1, 4)<4) { + qDebug("Could not read from sound file.\n"); + return -1; + } + lseek(fd, l1, SEEK_CUR); + } + else { + /* This is the format chunk, which stores the playback settings + * for the recording. + */ + /* Skip the length field, since we don't really need it. */ + lseek(fd, 4, SEEK_CUR); + /* Read in the format tag. If it has a value of 1, then there is + * no compression and we can attempt to play the file + * back. Otherwise, return. + */ + if (read(fd, &fmt, 2)<2) { + qDebug("Could not read from format chunk.\n"); + return -1; + } + if (fmt != 1) { + qDebug("Wave file contains compressed data." + " Unable to continue.\n"); + return -1; + } + /* Get the stereo mode. */ + if (read(fd, &ch, 2)<2) { + qDebug("Could not read from format chunk.\n"); + return -1; + } + else { + chan = ch; + qDebug("File has %d channels", chan); + } + /* Get the sample rate. */ + if (read(fd, &srate, 4)<4) { + qDebug("Could not read from format chunk.\n"); + return -1; + } + else { + sampleRate = srate; + qDebug("File has samplerate of %d", sampleRate); + } + /* Get the bit rate. This is at the end of the format chunk. */ + lseek(fd, 6, SEEK_CUR); + if (read(fd, &brate, 2)<2) { + qDebug("Could not read from format chunk.\n"); + return -1; + } + else { + resolution = brate; + qDebug("File has bitrate of %d", resolution); + } + + found++; + } + } + + /* Search through the file for the data chunk. If the end of the + * file is reached without finding the chunk, then the file is not a + * valid WAVE file. + */ + found = 0; + while (!found) { + if (read(fd, t1, 4)<4) { + qDebug("Could not read from sound file.\n"); + return -1; + } + if (strncmp(t1, "data", 4)) { + /* Determine the length of the chunk found and skip to the next + * chunk. The chunk length is always stored in the four bytes + * following the chunk id. + */ + if (read(fd, &l1, 4)<4) { + qDebug("Could not read from sound file.\n"); + return -1; + } + lseek(fd, l1, SEEK_CUR); + } + else { + /* This is the data chunk, which stores the recording. */ + /* Get the length field. */ + if (read(fd, &l1, 4)<4) { + qDebug("Could not read from sound file.\n"); + return -1; + } + else { + samples =l1; + qDebug("file has length of %d\nlasting %d seconds",l1, (( l1 / sampleRate) / chan) / 2 ); // ???? + return l1; + } + } + } + + return 0; +} + +////////////////////////////////////////////////// }; @@ -209,3 +365,3 @@ WavPlugin::~WavPlugin() { bool WavPlugin::isFileSupported( const QString& path ) { -// qDebug( "WavPlugin::isFileSupported" ); + debugMsg( "WavPlugin::isFileSupported" ); @@ -228,3 +384,3 @@ bool WavPlugin::isFileSupported( const QString& path ) { bool WavPlugin::open( const QString& path ) { -// qDebug( "WavPlugin::open" ); + qDebug( "WavPlugin::open" ); @@ -242,2 +398,3 @@ bool WavPlugin::open( const QString& path ) { +// d->getWavSettings( d->input.handle()); d->initialise(); @@ -249,3 +406,3 @@ bool WavPlugin::open( const QString& path ) { bool WavPlugin::close() { -// qDebug( "WavPlugin::close" ); + qDebug( "WavPlugin::close" ); @@ -259,3 +416,3 @@ bool WavPlugin::close() { bool WavPlugin::isOpen() { -// qDebug( "WavPlugin::isOpen" ); + qDebug( "WavPlugin::isOpen" ); return ( d->input != 0 ); @@ -265,3 +422,3 @@ bool WavPlugin::isOpen() { int WavPlugin::audioStreams() { -// qDebug( "WavPlugin::audioStreams" ); + qDebug( "WavPlugin::audioStreams" ); return 1; @@ -271,4 +428,4 @@ int WavPlugin::audioStreams() { int WavPlugin::audioChannels( int ) { -// qDebug( "WavPlugin::audioChannels" ); - return d->chunkdata.channels;// 2; // ### Always scale audio to stereo samples + debugMsg( "WavPlugin::audioChannels" ); + return d->chan; } @@ -277,4 +434,4 @@ int WavPlugin::audioChannels( int ) { int WavPlugin::audioFrequency( int ) { -// qDebug( "WavPlugin::audioFrequency %d", d->chunkdata.samplesPerSec ); - return d->chunkdata.samplesPerSec; //44100; // ### Always scale to frequency of 44100 + qDebug( "WavPlugin::audioFrequency" ); + return d->freq; } @@ -283,5 +440,6 @@ int WavPlugin::audioFrequency( int ) { int WavPlugin::audioSamples( int ) { -// qDebug( "WavPlugin::audioSamples" ); - return d->samples / d->chunkdata.channels/2; // ### Scaled samples will be made stereo, - // Therefore if source is mono we will double the number of samples + qDebug( "WavPlugin::audioSamples" ); + return d->samples; +// return d->samples * 2 / d->chunkdata.channels; // ### Scaled samples will be made stereo, +// // Therefore if source is mono we will double the number of samples } @@ -290,3 +448,3 @@ int WavPlugin::audioSamples( int ) { bool WavPlugin::audioSetSample( long, int ) { -// qDebug( "WavPlugin::audioSetSample" ); + qDebug( "WavPlugin::audioSetSample" ); return FALSE; @@ -296,3 +454,3 @@ bool WavPlugin::audioSetSample( long, int ) { long WavPlugin::audioGetSample( int ) { -// qDebug( "WavPlugin::audioGetSample" ); + qDebug( "WavPlugin::audioGetSample" ); return 0; @@ -326,3 +484,3 @@ bool WavPlugin::audioReadStereoSamples( short *output, long samples, long& sampl bool WavPlugin::audioReadSamples( short *output, int channels, long samples, long& samplesMade, int ) { -// qDebug( "WavPlugin::audioReadSamples" ); + qDebug( "WavPlugin::audioReadSamples" ); return d->add( output, samples, samplesMade, channels != 1 ); @@ -331,3 +489,3 @@ bool WavPlugin::audioReadSamples( short *output, int channels, long samples, lon double WavPlugin::getTime() { -// qDebug( "WavPlugin::getTime" ); + qDebug( "WavPlugin::getTime" ); return 0.0; @@ -335,7 +493,2 @@ double WavPlugin::getTime() { -int WavPlugin::audioBitsPerSample( int ) { -// qDebug( "WavPlugin::audioFormat %d", d->chunkdata.wBitsPerSample ); - return d->chunkdata.wBitsPerSample; // -} - diff --git a/core/multimedia/opieplayer/wavplugin/wavplugin.h b/core/multimedia/opieplayer/wavplugin/wavplugin.h index 6afd67e..19d1a8e 100644 --- a/core/multimedia/opieplayer/wavplugin/wavplugin.h +++ b/core/multimedia/opieplayer/wavplugin/wavplugin.h @@ -19,4 +19,2 @@ **********************************************************************/ -// L.J.Potter added changes Fri 02-15-2002 - #ifndef WAV_PLUGIN_H @@ -24,6 +22,5 @@ - #include <qstring.h> #include <qapplication.h> -#include "../mediaplayerplugininterface.h" +#include <qpe/mediaplayerplugininterface.h> @@ -56,3 +53,2 @@ public: int audioFrequency( int stream ); - int audioBitsPerSample( int stream ); int audioSamples( int stream ); diff --git a/core/multimedia/opieplayer/wavplugin/wavpluginimpl.cpp b/core/multimedia/opieplayer/wavplugin/wavpluginimpl.cpp index 1f7b85b..2923180 100644 --- a/core/multimedia/opieplayer/wavplugin/wavpluginimpl.cpp +++ b/core/multimedia/opieplayer/wavplugin/wavpluginimpl.cpp @@ -22,3 +22,2 @@ - WavPluginImpl::WavPluginImpl() diff --git a/core/multimedia/opieplayer/wavplugin/wavpluginimpl.h b/core/multimedia/opieplayer/wavplugin/wavpluginimpl.h index ee32f54..71f5f20 100644 --- a/core/multimedia/opieplayer/wavplugin/wavpluginimpl.h +++ b/core/multimedia/opieplayer/wavplugin/wavpluginimpl.h @@ -22,4 +22,3 @@ - -#include "../mediaplayerplugininterface.h" +#include <qpe/mediaplayerplugininterface.h> |