[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15815] branches/sound-branch/extern/ tinySND/core/SND_WavReader.cpp: halfway done wave reader

Robert Holcomb bob_holcomb at hotmail.com
Sun Jul 27 19:59:31 CEST 2008


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 
+   
 }
 





More information about the Bf-blender-cvs mailing list