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 #ifndef SUBSYNTH_WAV_INPUT_STREAM
00032 #define SUBSYNTH_WAV_INPUT_STREAM
00033
00034 #include <iostream>
00035 #include <fstream>
00036 #include <vector>
00037 #include <string>
00038
00039 #include "syn/Util/Endian.h"
00040 #include "syn/Stream/WavHeader.h"
00041 #include "syn/Stream/AudioIStream.h"
00042 #include "syn/Stream/WavHeader.h"
00043
00044 namespace syn
00045 {
00049 class WavAudioIStream : public AudioIStream
00050 {
00051 public:
00052 WavAudioIStream();
00053 virtual ~WavAudioIStream(){}
00054
00058 void setName( const std::string& filename );
00059
00065 virtual bool open( const syn::AudioFormat& fmt, Operation op = COPY );
00066
00067 virtual bool isOpen() const;
00068 virtual bool good() const;
00069 virtual bool bad() const;
00070 virtual bool eof() const;
00071
00077 virtual void read( void* data, unsigned int samples );
00078
00079 virtual int gcount() const;
00080 virtual const AudioFormat& format() const { return mDestFormat; }
00084 bool close();
00085
00091 int numsamps();
00092
00096 void seek( int sampleNum );
00097
00101 int numbytes();
00102
00103 virtual void setAmp( float amplitude ) { mAmplitude = amplitude; }
00104 virtual void setDcOffset( float off ) { mDcOffset = off; }
00105
00106 private:
00110 void seek_data( int numBytes );
00111
00115 syn::AudioFormat mSourceFormat, mDestFormat;
00116 std::vector<unsigned char> actual_data;
00117 std::vector<float> float_data;
00118 mutable std::fstream mFile;
00119 std::string mFilename;
00120 std::streamoff mDataPosition;
00121 int mNumBytes;
00122 int actual_samples_read;
00123 float mAmplitude, mDcOffset;
00124
00126
00127 };
00128 }
00129
00130 #endif