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