wvpcmutils.h

00001 /* -*- Mode: C++ -*-
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 1997-2002 Net Integration Technologies, Inc.
00004  *
00005  * Provides some support for working with PCM audio.
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 
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 
00077 class WvPCMSigned16ToNormFloatEncoder : public WvFunctorEncoder
00078     <signed short int, float, WvPCMSigned16ToNormFloatFunctor>
00079 {
00080 public:
00081     WvPCMSigned16ToNormFloatEncoder() :
00082         WvFunctorEncoder<IType, OType, FType>(FType()) { }
00083 };
00084 
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 
00102 class WvPCMSigned16ToUnnormFloatEncoder : public WvFunctorEncoder
00103     <signed short int, float, WvPCMSigned16ToUnnormFloatFunctor>
00104 {
00105 public:
00106     WvPCMSigned16ToUnnormFloatEncoder() :
00107         WvFunctorEncoder<IType, OType, FType>(FType()) { }
00108 };
00109 
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 
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

Generated on Mon Feb 5 10:54:29 2007 for WvStreams by  doxygen 1.5.1