00001
00002
00003
00004
00005
00006
00007 #ifndef __WVPCMUTILS_H
00008 #define __WVPCMUTILS_H
00009
00010 #include "wvencoder.h"
00011 #include "wvfunctorencoder.h"
00012
00013 struct WvPCMSigned16ToNormFloatFunctor
00014 {
00015 float operator()(signed short int pcm) const
00016 {
00017 return float(pcm) / 32768;
00018 }
00019 };
00020 struct WvPCMNormFloatToSigned16Functor
00021 {
00022 signed short int operator()(float pcm) const
00023 {
00024 return (pcm < -1.0f) ? -32768 : (pcm >= 1.0f) ? 32767 :
00025 (signed short int)(pcm * 32768);
00026 }
00027 };
00028 struct WvPCMSigned16ToUnnormFloatFunctor
00029 {
00030 float operator()(signed short int pcm) const
00031 {
00032 return float(pcm);
00033 }
00034 };
00035 struct WvPCMUnnormFloatToSigned16Functor
00036 {
00037 signed short int operator()(float pcm) const
00038 {
00039 return (pcm < -32768.0f) ? -32768 : (pcm >= 32767.0f) ? 32767 :
00040 (signed short int)(pcm);
00041 }
00042 };
00043 struct WvPCMSigned16ToNormDoubleFunctor
00044 {
00045 double operator()(signed short int pcm) const
00046 {
00047 return double(pcm) / 32768;
00048 }
00049 };
00050 struct WvPCMNormDoubleToSigned16Functor
00051 {
00052 signed short int operator()(double pcm) const
00053 {
00054 return (pcm < -1.0) ? -32768 : (pcm >= 1.0f) ? 32767 :
00055 (signed short int)(pcm * 32768);
00056 }
00057 };
00058
00059
00060
00061
00062
00063
00064 class WvPCMNormFloatToSigned16Encoder : public WvFunctorEncoder
00065 <float, signed short int, WvPCMNormFloatToSigned16Functor>
00066 {
00067 public:
00068 WvPCMNormFloatToSigned16Encoder() :
00069 WvFunctorEncoder<IType, OType, FType>(FType()) { }
00070 };
00071
00072
00073
00074
00075
00076
00077 class WvPCMSigned16ToNormFloatEncoder : public WvFunctorEncoder
00078 <signed short int, float, WvPCMSigned16ToNormFloatFunctor>
00079 {
00080 public:
00081 WvPCMSigned16ToNormFloatEncoder() :
00082 WvFunctorEncoder<IType, OType, FType>(FType()) { }
00083 };
00084
00085
00086
00087
00088
00089 class WvPCMUnnormFloatToSigned16Encoder : public WvFunctorEncoder
00090 <float, signed short int, WvPCMUnnormFloatToSigned16Functor>
00091 {
00092 public:
00093 WvPCMUnnormFloatToSigned16Encoder() :
00094 WvFunctorEncoder<IType, OType, FType>(FType()) { }
00095 };
00096
00097
00098
00099
00100
00101
00102 class WvPCMSigned16ToUnnormFloatEncoder : public WvFunctorEncoder
00103 <signed short int, float, WvPCMSigned16ToUnnormFloatFunctor>
00104 {
00105 public:
00106 WvPCMSigned16ToUnnormFloatEncoder() :
00107 WvFunctorEncoder<IType, OType, FType>(FType()) { }
00108 };
00109
00110
00111
00112
00113
00114 class WvPCMNormDoubleToSigned16Encoder : public WvFunctorEncoder
00115 <double, signed short int, WvPCMNormDoubleToSigned16Functor>
00116 {
00117 public:
00118 WvPCMNormDoubleToSigned16Encoder() :
00119 WvFunctorEncoder<IType, OType, FType>(FType()) { }
00120 };
00121
00122
00123
00124
00125
00126
00127 class WvPCMSigned16ToNormDoubleEncoder : public WvFunctorEncoder
00128 <signed short int, double, WvPCMSigned16ToNormDoubleFunctor>
00129 {
00130 public:
00131 WvPCMSigned16ToNormDoubleEncoder() :
00132 WvFunctorEncoder<IType, OType, FType>(FType()) { }
00133 };
00134
00135 #endif // __WVPCMUTILS_H