AAX SDK  2.4.1
Avid Audio Extensions Development Kit
AAX_CommonConversions.h
Go to the documentation of this file.
1 /*================================================================================================*/
2 /*
3  *
4  * Copyright 2014-2015 by Avid Technology, Inc.
5  * All rights reserved.
6  *
7  * CONFIDENTIAL: This document contains confidential information. Do not
8  * read or examine this document unless you are an Avid Technology employee
9  * or have signed a non-disclosure agreement with Avid Technology which protects
10  * the confidentiality of this document. DO NOT DISCLOSE ANY INFORMATION
11  * CONTAINED IN THIS DOCUMENT TO ANY THIRD-PARTY WITHOUT THE PRIOR WRITTEN CONSENT
12  * OF Avid Technology, INC.
13  *
14  */
15 
20 /*================================================================================================*/
21 
22 
23 #ifndef AAX_COMMONCONVERIONS_H
24 #define AAX_COMMONCONVERIONS_H
25 
26 #include <math.h>
27 #include "AAX.h"
28 
29 
30 const int32_t k32BitPosMax = 0x7FFFFFFF;
31 const int32_t k32BitAbsMax = 0x80000000;
32 const int32_t k32BitNegMax = 0x80000000;
33 
34 const int32_t k56kFracPosMax = 0x007FFFFF; // Positive Max Value
35 const int32_t k56kFracAbsMax = 0x00800000; // Absolute Max Value. Essentially negative one without the sign extension.
36 const int32_t k56kFracHalf = 0x00400000;
37 const int32_t k56kFracNegOne = 0xFF800000; //Note sign extension!!!
38 const int32_t k56kFracNegMax = k56kFracNegOne; //Note sign extension!!!
39 const int32_t k56kFracZero = 0x00000000;
40 
41 const double kOneOver56kFracAbsMax = 1.0/double(k56kFracAbsMax);
42 const double k56kFloatPosMax = double(k56kFracPosMax)/double(k56kFracAbsMax); //56k Max value represented in floating point format.
43 const double k56kFloatNegMax = -1.0; //56k Min value represented in floating point format.
44 const double kNeg144DB = -144.0;
45 const double kNeg144Gain = 6.3095734448019324943436013662234e-8; //pow(10.0, kNeg144DB / 20.0);
46 
52 inline double GainToDB(double aGain)
53 {
54  if (aGain == 0.0)
55  return kNeg144DB;
56  else
57  {
58  double dB;
59 
60  dB = log10(aGain) * 20.0;
61 
62  if (dB < kNeg144DB)
63  dB = kNeg144DB;
64  return (dB); // convert factor to dB
65  }
66 }
67 
73 inline double DBToGain(double dB)
74 {
75  return pow(10.0, dB / 20.0);
76 }
77 
83 inline double LongToDouble (int32_t aLong)
84 {
85  if (aLong > k56kFracPosMax)
86  aLong = k56kFracPosMax;
87  else if (aLong < k56kFracNegMax)
88  aLong = k56kFracNegMax;
89  return (double(aLong) * kOneOver56kFracAbsMax);
90 }
91 
94 int32_t DoubleToLong (double aDouble);
95 
98 inline int32_t DoubleToDSPCoef(double d, double max = k56kFloatPosMax, double min = k56kFloatNegMax)
99 {
100  if(d >= max) // k56kFloatPosMax unless specified by the caller
101  {
102  return k56kFracPosMax;
103  };
104  if(d < min) // k56kFloatNegMax unless specified by the caller
105  {
106  return k56kFracNegMax;
107  }
108  return static_cast<int32_t>(d*k56kFracAbsMax);
109 }
110 
113 inline double DSPCoefToDouble(int32_t c, int32_t max = k56kFracPosMax, int32_t min = k56kFracNegMax)
114 {
115  if (c > max) // k56kFracPosMax unless specified by the caller
116  c = k56kFracPosMax;
117  else if (c < min) // k56kFracNegMax unless specified by the caller
118  c = k56kFracNegMax;
119  return (double(c) * kOneOver56kFracAbsMax);
120 }
121 
124 inline double ThirtyTwoBitDSPCoefToDouble(int32_t c)
125 {
127 }
128 
131 inline int32_t DoubleTo32BitDSPCoefRnd(double d)
132 {
134 }
135 
136 int32_t DoubleTo32BitDSPCoef(double d);
137 int32_t DoubleToDSPCoefRnd(double d, double max, double min);
138 
139 #endif // AAX_COMMONCONVERIONS_H
Various utility definitions for AAX.
int32_t DoubleToDSPCoef(double d, double max=k56kFloatPosMax, double min=k56kFloatNegMax)
Convert Double to DSPCoef.
Definition: AAX_CommonConversions.h:98
const int32_t k32BitAbsMax
Definition: AAX_CommonConversions.h:31
const double kNeg144Gain
Definition: AAX_CommonConversions.h:45
const double kNeg144DB
Definition: AAX_CommonConversions.h:44
const int32_t k56kFracNegMax
Definition: AAX_CommonConversions.h:38
int32_t DoubleToDSPCoefRnd(double d, double max, double min)
const int32_t k32BitNegMax
Definition: AAX_CommonConversions.h:32
double LongToDouble(int32_t aLong)
Convert Long to Double.
Definition: AAX_CommonConversions.h:83
const int32_t k56kFracHalf
Definition: AAX_CommonConversions.h:36
double ThirtyTwoBitDSPCoefToDouble(int32_t c)
ThirtyTwoBitDSPCoefToDouble.
Definition: AAX_CommonConversions.h:124
double DBToGain(double dB)
Convert dB to Gain.
Definition: AAX_CommonConversions.h:73
int32_t DoubleToLong(double aDouble)
convert floating point equivalent back to int32_t
const double kOneOver56kFracAbsMax
Definition: AAX_CommonConversions.h:41
double DSPCoefToDouble(int32_t c, int32_t max=k56kFracPosMax, int32_t min=k56kFracNegMax)
Convert DSPCoef to Double.
Definition: AAX_CommonConversions.h:113
const int32_t k32BitPosMax
Definition: AAX_CommonConversions.h:30
double GainToDB(double aGain)
Convert Gain to dB.
Definition: AAX_CommonConversions.h:52
const int32_t k56kFracPosMax
Definition: AAX_CommonConversions.h:34
int32_t DoubleTo32BitDSPCoefRnd(double d)
DoubleTo32BitDSPCoefRnd.
Definition: AAX_CommonConversions.h:131
const double k56kFloatPosMax
Definition: AAX_CommonConversions.h:42
int32_t DoubleTo32BitDSPCoef(double d)
const int32_t k56kFracAbsMax
Definition: AAX_CommonConversions.h:35
const double k56kFloatNegMax
Definition: AAX_CommonConversions.h:43
const int32_t k56kFracZero
Definition: AAX_CommonConversions.h:39
const int32_t k56kFracNegOne
Definition: AAX_CommonConversions.h:37