[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