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