00001 #ifndef __SAMP_HPP__
00002 #define __SAMP_HPP__
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 __cplusplus
00033 #error Must use C++ compiler
00034 #endif
00035
00036
00037
00038 #include "fblock.hpp"
00039
00040
00041
00042 enum {
00043 SAMPTYPE_PCM8U=1,
00044 SAMPTYPE_PCM16,
00045 SAMPTYPE_PCM32,
00046 SAMPTYPE_FLOAT32,
00047 SAMPTYPE_FLOAT64,
00048 };
00049
00050 #define SAMPTYPE_STR_PCM8U "PCM8U"
00051 #define SAMPTYPE_STR_PCM16 "PCM16"
00052 #define SAMPTYPE_STR_PCM32 "PCM32"
00053 #define SAMPTYPE_STR_FLOAT32 "Float32"
00054 #define SAMPTYPE_STR_FLOAT64 "Float64"
00055
00056 #define SAMP_ENDIAN_MACHINE 0
00057 #define SAMP_ENDIAN_LITTLE 1
00058 #define SAMP_ENDIAN_BIG -1
00059
00060
00061
00062 class Samp: public FBlock {
00063 private:
00064 INT tSamp;
00065 UINT sSize;
00066 VOID *ptr;
00067 LONG nptr;
00068 LONG pptr;
00069 INT tptr;
00070 INT endian;
00071 UINT nchan;
00072 UINT sSizeCh;
00073
00074 public:
00075 Samp( VOID );
00076
00077 VOID attach( FILE* fBin, INT sampType, UINT nChan=1, LONG N=-1 );
00078 VOID setendian( INT endi ) { endian=endi; } ;
00079 INT getendian( VOID ) { return endian; };
00080 INT getSampType( VOID ) const { return tSamp; }
00081 static UINT getSampTypeSize( INT sampType );
00082 UINT getNChan( VOID ) const { return nchan; }
00083
00084 VOID setPos( LONG pos ) { FBlock::setPos(pos*sSizeCh); }
00085 LONG getPos( VOID ) const { return FBlock::getPos()/sSizeCh; }
00086 LONG getN( VOID ) const { return FBlock::getN()/sSizeCh; }
00087 VOID setPosNoCh( LONG pos ) { FBlock::setPos(pos*sSize); }
00088 LONG getPosNoCh( VOID ) const { return FBlock::getPos()/sSize; }
00089 LONG getNNoCh( VOID ) const { return FBlock::getN()/sSize; }
00090
00091 UINT getNoCh( INT16& sample );
00092 UINT setNoCh( INT16 sample );
00093 UINT insNoCh( INT16 sample );
00094 UINT getNoCh( DOUBLE& sample );
00095 UINT setNoCh( DOUBLE sample );
00096 UINT insNoCh( DOUBLE sample );
00097 UINT delNoCh( VOID ) { return FBlock::del(sSize)/sSize; }
00098 UINT getBlkNoCh( INT16* block, UINT len );
00099 UINT setBlkNoCh( const INT16* block, UINT len );
00100 UINT insBlkNoCh( const INT16* block, UINT len );
00101 UINT getBlkNoCh( DOUBLE* block, UINT len );
00102 UINT setBlkNoCh( const DOUBLE* block, UINT len );
00103 UINT insBlkNoCh( const DOUBLE* block, UINT len );
00104 UINT delBlkNoCh( UINT len ) { return FBlock::del(len*sSize)/sSize; }
00105
00106 UINT getCh( INT16& sample, UINT ch );
00107 UINT setCh( INT16 sample, UINT ch );
00108 UINT insCh( INT16 sample, UINT ch );
00109 UINT getCh( DOUBLE& sample, UINT ch );
00110 UINT setCh( DOUBLE sample, UINT ch );
00111 UINT insCh( DOUBLE sample, UINT ch );
00112 UINT delCh( UINT ch ) { (void)ch; return delBlkNoCh(nchan); }
00113 UINT getBlkCh( INT16* block, UINT len, UINT ch );
00114 UINT setBlkCh( const INT16* block, UINT len, UINT ch );
00115 UINT insBlkCh( const INT16* block, UINT len, UINT ch );
00116 UINT getBlkCh( DOUBLE* block, UINT len, UINT ch );
00117 UINT setBlkCh( const DOUBLE* block, UINT len, UINT ch );
00118 UINT insBlkCh( const DOUBLE* block, UINT len, UINT ch );
00119 UINT delBlkCh( UINT len, UINT ch ) { (void)ch; return delBlkNoCh(nchan*len); }
00120
00121 UINT getChAll( INT16* sampr ) { return getBlkNoCh(sampr,nchan); }
00122 UINT setChAll( const INT16* sampr ) { return setBlkNoCh(sampr,nchan); }
00123 UINT insChAll( const INT16* sampr ) { return insBlkNoCh(sampr,nchan); }
00124 UINT getChAll( DOUBLE* sampr ) { return getBlkNoCh(sampr,nchan); }
00125 UINT setChAll( const DOUBLE* sampr ) { return setBlkNoCh(sampr,nchan); }
00126 UINT insChAll( const DOUBLE* sampr ) { return insBlkNoCh(sampr,nchan); }
00127 UINT delChAll( VOID ) { return delBlkNoCh(nchan); }
00128 UINT getBlkChAll( INT16* block, UINT len ) { return getBlkNoCh(block,nchan*len); }
00129 UINT setBlkChAll( const INT16* block, UINT len ) { return setBlkNoCh(block,nchan*len); }
00130 UINT insBlkChAll( const INT16* block, UINT len ) { return insBlkNoCh(block,nchan*len); }
00131 UINT getBlkChAll( DOUBLE* block, UINT len ) { return getBlkNoCh(block,nchan*len); }
00132 UINT setBlkChAll( const DOUBLE* block, UINT len ) { return setBlkNoCh(block,nchan*len); }
00133 UINT insBlkChAll( const DOUBLE* block, UINT len ) { return insBlkNoCh(block,nchan*len); }
00134 UINT delBlkChAll( UINT len ) { return delBlkNoCh(nchan*len); }
00135
00136 UINT getChRange( INT16* sampr, UINT ch1, UINT ch2 );
00137 UINT setChRange( const INT16* sampr, UINT ch1, UINT ch2 );
00138 UINT insChRange( const INT16* sampr, UINT ch1, UINT ch2 );
00139 UINT getChRange( DOUBLE* sampr, UINT ch1, UINT ch2 );
00140 UINT setChRange( const DOUBLE* sampr, UINT ch1, UINT ch2 );
00141 UINT insChRange( const DOUBLE* sampr, UINT ch1, UINT ch2 );
00142 UINT delChRange( UINT ch1, UINT ch2 ) { (void)ch1; (void)ch2; return delBlkNoCh(nchan); }
00143 UINT getBlkChRange( INT16* block, UINT len, UINT ch1, UINT ch2 );
00144 UINT setBlkChRange( const INT16* block, UINT len, UINT ch1, UINT ch2 );
00145 UINT insBlkChRange( const INT16* block, UINT len, UINT ch1, UINT ch2 );
00146 UINT getBlkChRange( DOUBLE* block, UINT len, UINT ch1, UINT ch2 );
00147 UINT setBlkChRange( const DOUBLE* block, UINT len, UINT ch1, UINT ch2 );
00148 UINT insBlkChRange( const DOUBLE* block, UINT len, UINT ch1, UINT ch2 );
00149 UINT delBlkChRange( UINT len, UINT ch1, UINT ch2 ) { (void)ch1; (void)ch2; return delBlkNoCh(nchan*len); }
00150
00151
00152 UINT get( INT16& sample ) { return getCh(sample,0); }
00153 UINT set( INT16 sample ) { return setCh(sample,0); }
00154 UINT ins( INT16 sample ) { return insCh(sample,0); }
00155 UINT get( DOUBLE& sample ) { return getCh(sample,0); }
00156 UINT set( DOUBLE sample ) { return setCh(sample,0); }
00157 UINT ins( DOUBLE sample ) { return insCh(sample,0); }
00158 UINT del( VOID ) { return delCh(0); }
00159 UINT getBlk( INT16* block, UINT len ) { return getBlkCh(block,len,0); }
00160 UINT setBlk( const INT16* block, UINT len ) { return setBlkCh(block,len,0); }
00161 UINT insBlk( const INT16* block, UINT len ) { return insBlkCh(block,len,0); }
00162 UINT getBlk( DOUBLE* block, UINT len ) { return getBlkCh(block,len,0); }
00163 UINT setBlk( const DOUBLE* block, UINT len ) { return setBlkCh(block,len,0); }
00164 UINT insBlk( const DOUBLE* block, UINT len ) { return insBlkCh(block,len,0); }
00165 UINT delBlk( UINT len ) { return delBlkCh(len,0); }
00166
00167 INT16 *get_i16( UINT len, BOOL reloadall=FALSE );
00168 DOUBLE *get_d( UINT len, BOOL reloadall=FALSE );
00169 INT16 *getChAll_i16( UINT len, BOOL reloadall=FALSE );
00170 DOUBLE *getChAll_d( UINT len, BOOL reloadall=FALSE );
00171
00172 VOID toggleRW( VOID ) { FBlock::toggleRW(); }
00173
00174 BOOL OK( VOID ) const;
00175
00176 ~Samp( VOID );
00177 };
00178
00179
00180
00181 INT SampType_a2i( const CHAR* sampType, BOOL errexit=TRUE );
00182 const CHAR* SampType_i2a( INT sampType, BOOL errexit=TRUE );
00183
00184
00185
00186 #endif