00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef SUBSYNTH_WAV_AUDIO_OSTREAM
00033 #define SUBSYNTH_WAV_AUDIO_OSTREAM
00034
00035 #include <iostream>
00036 #include "syn/Stream/WavHeader.h"
00037 #include "syn/Stream/AudioOStream.h"
00038
00039 namespace syn
00040 {
00045 class WavAudioOStream : public AudioOStream
00046 {
00047 public:
00048 WavAudioOStream() : mIsOpen( false ), mName( "default.wav" ), mPcount( 0 )
00049 {
00050 }
00051
00052 virtual ~WavAudioOStream(){}
00053
00055 void setName( const std::string& name )
00056 {
00057 if (name != mName && mIsOpen == true)
00058 {
00059 this->close();
00060 mName = name;
00061 this->open( mFmt );
00062 }
00063 else
00064 {
00065 mName = name;
00066 }
00067 }
00068
00072 bool open( const syn::AudioFormat& fmt )
00073 {
00074 mFileOStream.open( mName.c_str(), std::ios::in );
00075 mFileOStream.write( wav_header, sizeof( WavHeader ) );
00076 if (mFileOStream.good())
00077 {
00078 mIsOpen = true;
00079 mFmt = fmt;
00080 return true;
00081 }
00082
00083 return false;
00084 }
00085
00087 virtual bool isOpen() = 0;
00088
00090 bool canAcceptMoreData()
00091 {
00092 if (mIsOpen == false)
00093 return false;
00094 return true;
00095 }
00096
00100 bool write( char* data, int samples )
00101 {
00102 if (mIsOpen == false)
00103 return false;
00104 mPcount = samples;
00105 mFileOStream.write( data, numBytes );
00106
00107 return true;
00108 }
00109
00111 virtual int pcount() const { return mPcount; }
00112
00114 bool close()
00115 {
00116 if (mIsOpen == false)
00117 return false;
00118
00119 mFileOStream.close();
00120
00121 mIsOpen = false;
00122 return true;
00123 }
00124
00125 private:
00126 int mPcount;
00127 std::fstream mFileOStream;
00128 bool mIsOpen;
00129 syn::AudioFormat mFmt;
00130
00132
00133 };
00134
00135 }
00136
00137
00138 #endif