Mercurial > hg > aimc
comparison src/Modules/Output/Graphics/Scale/Scale.cc @ 227:73c6d61440ad
- First add of a lot of graphics code from the old version. Not working yet, not even compiling yet.
author | tomwalters |
---|---|
date | Fri, 15 Oct 2010 05:40:53 +0000 |
parents | 9d880fb93c39 |
children | 82e0dc3dfd16 |
comparison
equal
deleted
inserted
replaced
226:eaeba1fd41e6 | 227:73c6d61440ad |
---|---|
7 * \version \$Id: Scale.cpp 459 2007-11-08 11:50:04Z tom $ | 7 * \version \$Id: Scale.cpp 459 2007-11-08 11:50:04Z tom $ |
8 */ | 8 */ |
9 /* (c) 2006, University of Cambridge, Medical Research Council | 9 /* (c) 2006, University of Cambridge, Medical Research Council |
10 * http://www.pdn.cam.ac.uk/groups/cnbh/aimmanual | 10 * http://www.pdn.cam.ac.uk/groups/cnbh/aimmanual |
11 */ | 11 */ |
12 #include "Support/Common.h" | 12 #include "Support/common.h" |
13 #include "Modules/Output/Graphics/Scale/Scale.h" | 13 #include "Support/util.h" |
14 #include "Modules/Output/Graphics/Scale/ScaleLinear.h" | 14 #include "Modules/Scale/Scale.h" |
15 #include "Modules/Output/Graphics/Scale/ScaleERB.h" | 15 #include "Modules/Scale/ScaleLinear.h" |
16 #include "Modules/Output/Graphics/Scale/ScaleLog.h" | 16 #include "Modules/Scale/ScaleERB.h" |
17 #include "Modules/Output/Graphics/Scale/ScaleLogScaled.h" | 17 #include "Modules/Scale/ScaleLog.h" |
18 #include "Modules/Scale/ScaleLogScaled.h" | |
18 | 19 |
19 namespace aimc { | 20 Scale *Scale::Create(ScaleType iType, unsigned int min, unsigned int max, float density) |
20 | 21 { |
21 Scale *Scale::Create(ScaleType iType, | 22 switch(iType) { |
22 unsigned int min, | 23 case SCALE_LINEAR: |
23 unsigned int max, | 24 return static_cast<Scale*>(new ScaleLinear(min, max, density)); |
24 float density) { | 25 case SCALE_ERB: |
25 switch(iType) { | 26 return static_cast<Scale*>(new ScaleERB(min, max, density)); |
26 case SCALE_LINEAR: | 27 case SCALE_LOG: |
27 return static_cast<Scale*>(new ScaleLinear(min, max, density)); | 28 return static_cast<Scale*>(new ScaleLog(min, max, density)); |
28 case SCALE_ERB: | 29 case SCALE_LOGSCALED: |
29 return static_cast<Scale*>(new ScaleERB(min, max, density)); | 30 return static_cast<Scale*>(new ScaleLogScaled(min, max, density)); |
30 case SCALE_LOG: | 31 default: |
31 return static_cast<Scale*>(new ScaleLog(min, max, density)); | 32 aimASSERT(0); |
32 case SCALE_LOGSCALED: | 33 break; |
33 return static_cast<Scale*>(new ScaleLogScaled(min, max, density)); | 34 } |
34 default: | 35 // Unreachable code |
35 AIM_ASSERT(0); | 36 aimASSERT(0); |
36 break; | 37 return NULL; |
37 } | |
38 // Unreachable code | |
39 AIM_ASSERT(0); | |
40 return NULL; | |
41 } | 38 } |
42 | 39 |
43 Scale *Scale::Create(ScaleType iType) { | 40 Scale *Scale::Create(ScaleType iType) |
44 return Create(iType, 0, 0, 0); | 41 { |
42 return Create(iType, 0, 0, 0); | |
45 } | 43 } |
46 | 44 |
47 Scale *Scale::Clone() { | 45 Scale *Scale::Clone() |
48 Scale *pScale = Create(m_iType, m_iMin, m_iMax, m_fDensity); | 46 { |
49 AIM_ASSERT(pScale); | 47 Scale *pScale = Create(m_iType, m_iMin, m_iMax, m_fDensity); |
50 pScale->m_fScaledCurHalfSum = m_fScaledCurHalfSum; | 48 aimASSERT(pScale); |
51 pScale->m_fScaledCurDiff = m_fScaledCurDiff; | 49 pScale->m_fScaledCurHalfSum = m_fScaledCurHalfSum; |
52 return pScale; | 50 pScale->m_fScaledCurDiff = m_fScaledCurDiff; |
51 return pScale; | |
53 } | 52 } |
54 | 53 |
55 float Scale::FromLinearScaled(float fVal) { | 54 float Scale::FromLinearScaled(float fVal) |
56 /*! This function returns | 55 { |
57 * ( FromLinear(fVal) - (fMinScaled+fMaxScaled)/2 ) / (fMaxScaled-fMinScaled) | 56 /*! This function returns |
58 */ | 57 * ( FromLinear(fVal) - (fMinScaled+fMaxScaled)/2 ) / (fMaxScaled-fMinScaled) |
59 float fValScaled = FromLinear(fVal); | 58 */ |
60 return (fValScaled - m_fScaledCurHalfSum) / m_fScaledCurDiff; | 59 float fValScaled = FromLinear(fVal); |
60 return (fValScaled - m_fScaledCurHalfSum) / m_fScaledCurDiff; | |
61 } | |
62 void Scale::FromLinearScaledExtrema(float fMin, float fMax) | |
63 { | |
64 float fMinScaled = FromLinear(fMin); | |
65 float fMaxScaled = FromLinear(fMax); | |
66 m_fScaledCurHalfSum = (fMinScaled+fMaxScaled)/2; | |
67 m_fScaledCurDiff = fMaxScaled-fMinScaled; | |
68 m_fMin = fMin; | |
69 m_fMax = fMax; | |
70 } | |
71 void Scale::FromLinearScaledExtrema(Scale *pScale) | |
72 { | |
73 aimASSERT(pScale); | |
74 FromLinearScaledExtrema(pScale->m_fMin, pScale->m_fMax); | |
61 } | 75 } |
62 | 76 |
63 void Scale::FromLinearScaledExtrema(float fMin, float fMax) { | 77 SignalBank* Scale::CreateSignalBank(unsigned int iChannels, unsigned int iBufferlength, unsigned int iSamplerate) |
64 float fMinScaled = FromLinear(fMin); | 78 { |
65 float fMaxScaled = FromLinear(fMax); | 79 SignalBank *pBank; |
66 m_fScaledCurHalfSum = (fMinScaled+fMaxScaled)/2; | 80 double intpart, fracpart; |
67 m_fScaledCurDiff = fMaxScaled-fMinScaled; | 81 fracpart = modf((m_iMax-m_iMin)*m_fDensity, &intpart); |
68 m_fMin = fMin; | 82 unsigned int nBankChan = (unsigned int) intpart; |
69 m_fMax = fMax; | 83 if (fracpart >= 0.5f) |
84 nBankChan++; | |
85 | |
86 pBank = new SignalBank(iChannels, iBufferlength, iSamplerate, nBankChan); | |
87 aimASSERT(pBank); | |
88 | |
89 float scaleDelta = ( FromLinear(m_iMax) - FromLinear(m_iMin) ) / (nBankChan-1); | |
90 float scaleCur = FromLinear(m_iMin); | |
91 | |
92 for (unsigned int i=0; i<nBankChan; i++) { | |
93 pBank->setCentreFrequency(i, ToLinear(scaleCur)); | |
94 scaleCur+=scaleDelta; | |
95 } | |
96 | |
97 return pBank; | |
70 } | 98 } |
71 | 99 |
72 void Scale::FromLinearScaledExtrema(Scale *pScale) { | 100 |
73 AIM_ASSERT(pScale); | 101 |
74 FromLinearScaledExtrema(pScale->m_fMin, pScale->m_fMax); | 102 SignalBank* Scale::CreateSignalBank(Signal* pSig) { |
103 aimASSERT(pSig); | |
104 return CreateSignalBank(pSig->getAudioChannels(), pSig->getBufferlength(), pSig->getSamplerate()); | |
75 } | 105 } |
76 } // namespace aimc | 106 |