00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _V_SCALES_H_
00019 #define _V_SCALES_H_
00020
00021 #include <math.h>
00022 #include "os.h"
00023
00024
00025 #define VORBIS_IEEE_FLOAT32 1
00026 #ifdef VORBIS_IEEE_FLOAT32
00027
00028 static float unitnorm(float x){
00029 union {
00030 ogg_uint32_t i;
00031 float f;
00032 } ix;
00033 ix.f = x;
00034 ix.i = (ix.i & 0x80000000U) | (0x3f800000U);
00035 return ix.f;
00036 }
00037
00038
00039 static float todB(const float *x){
00040 union {
00041 ogg_uint32_t i;
00042 float f;
00043 } ix;
00044 ix.f = *x;
00045 ix.i = ix.i&0x7fffffff;
00046 return (float)(ix.i * 7.17711438e-7f -764.6161886f);
00047 }
00048
00049 #define todB_nn(x) todB(x)
00050
00051 #else
00052
00053 static float unitnorm(float x){
00054 if(x<0)return(-1.f);
00055 return(1.f);
00056 }
00057
00058 #define todB(x) (*(x)==0?-400.f:log(*(x)**(x))*4.34294480f)
00059 #define todB_nn(x) (*(x)==0.f?-400.f:log(*(x))*8.6858896f)
00060
00061 #endif
00062
00063 #define fromdB(x) (exp((x)*.11512925f))
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074 #define toBARK(n) (13.1f*atan(.00074f*(n))+2.24f*atan((n)*(n)*1.85e-8f)+1e-4f*(n))
00075 #define fromBARK(z) (102.f*(z)-2.f*pow(z,2.f)+.4f*pow(z,3.f)+pow(1.46f,z)-1.f)
00076 #define toMEL(n) (log(1.f+(n)*.001f)*1442.695f)
00077 #define fromMEL(m) (1000.f*exp((m)/1442.695f)-1000.f)
00078
00079
00080
00081
00082 #define toOC(n) (log(n)*1.442695f-5.965784f)
00083 #define fromOC(o) (exp(((o)+5.965784f)*.693147f))
00084
00085 #endif
00086