Revision: 15815
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15815
Author:   scourage
Date:     2008-07-27 19:59:20 +0200 (Sun, 27 Jul 2008)

Log Message:
-----------
halfway done wave reader

Modified Paths:
--------------
    branches/sound-branch/extern/tinySND/core/SND_WavReader.cpp

Modified: branches/sound-branch/extern/tinySND/core/SND_WavReader.cpp
===================================================================
--- branches/sound-branch/extern/tinySND/core/SND_WavReader.cpp 2008-07-27 
17:50:52 UTC (rev 15814)
+++ branches/sound-branch/extern/tinySND/core/SND_WavReader.cpp 2008-07-27 
17:59:20 UTC (rev 15815)
@@ -1,5 +1,4 @@
 #include <stdint.h> 
-#include <string.h> 
 #include <stdio.h>
 #include "SND_WavReader.h"
 
@@ -39,6 +38,24 @@
 sample 1 for channel 0
 sample 1 for channel 1
 */
+
+typedef struct 
+{
+   char typeStr[4];
+   int32_t      fileLength;
+   char subTypeStr[4];
+   char formatStr[4];
+   int32_t     lengthFmtData;
+   int16_t  format;
+   int16_t  numChannels;
+   int32_t  sampleRate;
+   int32_t  bytesPerSecond;
+   int16_t blockAlign;
+   int16_t bitsPerSample;
+   char dataBlockStr[4];
+   int32_t lengthData;
+} riffHeader;
+
 SND_WavReader::SND_WavReader( char *filename )
 {
        mIsSupported = false;
@@ -159,21 +176,77 @@
                fclose(f);
                return;
        }
+   
+   mData = new char[dataLen];
+   if( fread(mData, 1, dataLen, f)!=dataLen)
+   {
+      fclose(f);
+      return;
+   }
+   
        mNumFrames = dataLen/mBitRate/8/mNumChannels;
        mDuration = float(mNumFrames)/float(mSampleRate);
        mIsSeekable = true;
-
-       //mIsSupported = true;
+       mIsSupported = true;
+   
+   fclose(f);
 }
 
 SND_WavReader::SND_WavReader( char *data, int size )
 {
-       // !!!! NOT IMPLEMENTED YET !!!!
+   char* buffer=data;
+   riffHeader* header;
+   if(size<44) {
+      printf("SND_WavReader-incorrect header size"); 
+      return;
+   }
+  
+   //line up header on data
+   header=(riffHeader*)data;
+   buffer=data+sizeof(riffHeader);
+   
+   if(strncmp(header->typeStr, "RIFF", 4) != 0 ) {
+      printf("SND_WavReader-Not a RIFF file"); 
+      return;
+   }
+   
+   if( strncmp(header->subTypeStr, "WAVE", 4) != 0 ){
+      printf("SND_WavReader-Not a WAVE file"); 
+      return;
+   }
+   
+   if( strncmp(header->formatStr, "fmt ", 4) != 0 ){
+      printf("SND_WavReader-No format tag"); 
+      return;
+   }
+   
+   if(header->format!=1){
+      printf("SND_WaveReader-Only PCM Data supported");
+      return;
+   }
+
+   if( strncmp(header->dataBlockStr, "data", 4) != 0 ){
+      printf("SND_WaveReader-No data tag");
+      return;
+   }
+   
+   memcpy(mData, buffer, header->dataLength);
+   
+   //TODO get data
+   
+   mNumChannels = header->numChannels;
+   mSampleRate=header->sampleRate;
+   mBitRate=header->bitsPerSample;
+       mNumFrames = header->dataLength/mBitRate/8/mNumChannels;
+       mDuration = float(mNumFrames)/float(mSampleRate);
+       mIsSeekable = true;
+       mIsSupported = true;
 }
 
 SND_WavReader::~SND_WavReader()
 {
-       // !!!! NOT IMPLEMENTED YET !!!!
+       if(mData!=NULL)
+      delete [] mData;
 }
 
 bool SND_WavReader::initialize(void)
@@ -183,11 +256,18 @@
 
 void SND_WavReader::seek( int frameNum )
 {
-       // !!!! NOT IMPLEMENTED YET !!!!
+       assert( mData != 0 );
+       assert( mIsSeekable );
+   
+   
 }
 
 void SND_WavReader::fillBuffer( float *buffer, int framesNum )
 {
-       // !!!! NOT IMPLEMENTED YET !!!!
+       assert( mData != 0 );
+       assert( buffer != 0 );
+   
+   //determine amount of data to write 
+   
 }
 


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to