[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11699] branches/soc-2007-hcube/intern/ tinySND/sndfile: Implemented sndfileWriter.

Csaba Hruska csaba.hruska at gmail.com
Sun Aug 19 17:01:07 CEST 2007


Revision: 11699
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11699
Author:   hcube
Date:     2007-08-19 17:01:06 +0200 (Sun, 19 Aug 2007)

Log Message:
-----------
Implemented sndfileWriter.

Modified Paths:
--------------
    branches/soc-2007-hcube/intern/tinySND/sndfile/sndfileReader.cpp
    branches/soc-2007-hcube/intern/tinySND/sndfile/sndfileWriter.cpp
    branches/soc-2007-hcube/intern/tinySND/sndfile/sndfileWriter.h

Modified: branches/soc-2007-hcube/intern/tinySND/sndfile/sndfileReader.cpp
===================================================================
--- branches/soc-2007-hcube/intern/tinySND/sndfile/sndfileReader.cpp	2007-08-19 12:22:51 UTC (rev 11698)
+++ branches/soc-2007-hcube/intern/tinySND/sndfile/sndfileReader.cpp	2007-08-19 15:01:06 UTC (rev 11699)
@@ -39,7 +39,8 @@
 {
     if( mSndFile != 0 )
     {
-        sf_close( mSndFile );
+		sf_close( mSndFile );
+		mSndFile = 0;
     }
 }
 
@@ -50,7 +51,7 @@
 
 void sndfileReader::seek( int frameNum )
 {
-    assert( mSndFile != 0 );
+	assert( mSndFile != 0 );
     
     if( mIsSeekable )
     {

Modified: branches/soc-2007-hcube/intern/tinySND/sndfile/sndfileWriter.cpp
===================================================================
--- branches/soc-2007-hcube/intern/tinySND/sndfile/sndfileWriter.cpp	2007-08-19 12:22:51 UTC (rev 11698)
+++ branches/soc-2007-hcube/intern/tinySND/sndfile/sndfileWriter.cpp	2007-08-19 15:01:06 UTC (rev 11699)
@@ -1,4 +1,5 @@
 #include <assert.h>
+#include <string.h>
 #include "sndfileWriter.h"
 
 sndfileWriter::sndfileWriter( char *filename )
@@ -9,6 +10,14 @@
 	mUserData1 = 0;
 	mUserData2 = 0;
 	
+	mSampleRate = 44100.0;
+	mSampleFormat = SND_FORMAT_PCM_16;
+	mNumChannels = 1;
+
+	mSndFile = 0;
+	
+	strcpy( mFileName, filename );
+	
 	mBuffer = new float[ SND_MIX_BUFFER_FRAMES ];
 	mBufferSize = SND_MIX_BUFFER_FRAMES;
 }
@@ -21,16 +30,32 @@
 bool sndfileWriter::initialize()
 {
 	assert( mInput != 0 );
+	assert( mSndFile == 0 );
 
-	// !!!! NOT IMPLEMENTED YET !!!!
-	// sndlife can convert audio data, so we let it to do it, we use floats
-	return false;
+	// we use same constants with libsndfile
+	mSF_Info.format = mSampleFormat + SF_FORMAT_WAV;
+	mSF_Info.samplerate = (int)mSampleRate;
+	mSF_Info.channels = mNumChannels;
+	
+	mSndFile = sf_open( mFileName, SFM_WRITE, &mSF_Info );
+	
+	if( mSndFile == 0 )
+	{
+		return false;
+	} 
+    
+	return true;
 }
 
 bool sndfileWriter::finalize()
 {
-	// !!!! NOT IMPLEMENTED YET !!!!
-	return false;
+	assert( mSndFile != 0 );
+
+	sf_write_sync( mSndFile );
+	sf_close( mSndFile );
+	mSndFile = 0;
+
+	return true;
 }
 
 float sndfileWriter::getSampleRate()
@@ -67,7 +92,14 @@
 {
 	assert( mInput != 0 );
 	assert( mBuffer != 0 );
+	assert( mSndFile != 0 );
 	
+ 	// call callback
+	if( mCallback != 0 )
+	{
+		(*mCallback)( framesNum, mUserData1, mUserData2 );
+	}
+ 
 	// resize buffer is necessary
 	if( mBufferSize < framesNum )
 	{
@@ -75,9 +107,16 @@
 		mBufferSize = (framesNum / SND_MIX_BUFFER_FRAMES + 1) * SND_MIX_BUFFER_FRAMES;
 		mBuffer = new float[ mBufferSize ];
 	}
-		
+	
+	int oldFormat = mInput->getSampleFormat();
+
+	// sndlife can convert audio data, so we let it to do it, we use floats
+	mInput->setSampleFormat( SND_FORMAT_FLOAT );
+
 	mInput->fillBuffer( (char*)mBuffer, framesNum );
-	
+
+	mInput->setSampleFormat( oldFormat );
+
 	int count = sf_write_float( mSndFile, mBuffer, framesNum * mNumChannels ) ;
 	
 	assert( count == framesNum * mNumChannels );

Modified: branches/soc-2007-hcube/intern/tinySND/sndfile/sndfileWriter.h
===================================================================
--- branches/soc-2007-hcube/intern/tinySND/sndfile/sndfileWriter.h	2007-08-19 12:22:51 UTC (rev 11698)
+++ branches/soc-2007-hcube/intern/tinySND/sndfile/sndfileWriter.h	2007-08-19 15:01:06 UTC (rev 11699)
@@ -32,6 +32,8 @@
 	int		mNumChannels;
 	int		mSampleFormat;
 	
+	char	mFileName[256];
+	
     SNDFILE	*mSndFile;
     SF_INFO	mSF_Info;
 };





More information about the Bf-blender-cvs mailing list