Mercurial > hg > aimc
comparison src/Modules/Output/Graphics/Scale/Scale.cc @ 229:ddf35dd82d63
- A few changes to get graphics working. In progress.
author | tom@acousticscale.org |
---|---|
date | Sat, 16 Oct 2010 22:27:03 +0000 |
parents | 82e0dc3dfd16 |
children | 2aa72aa8a0d4 |
comparison
equal
deleted
inserted
replaced
228:82e0dc3dfd16 | 229:ddf35dd82d63 |
---|---|
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 "Support/util.h" | 13 #include "Modules/Output/Graphics/Scale/Scale.h" |
14 #include "Modules/Scale/Scale.h" | 14 #include "Modules/Output/Graphics/Scale/ScaleLinear.h" |
15 #include "Modules/Scale/ScaleLinear.h" | 15 #include "Modules/Output/Graphics/Scale/ScaleERB.h" |
16 #include "Modules/Scale/ScaleERB.h" | 16 #include "Modules/Output/Graphics/Scale/ScaleLog.h" |
17 #include "Modules/Scale/ScaleLog.h" | 17 #include "Modules/Output/Graphics/Scale/ScaleLogScaled.h" |
18 #include "Modules/Scale/ScaleLogScaled.h" | |
19 | 18 |
20 Scale *Scale::Create(ScaleType iType, unsigned int min, unsigned int max, float density) | 19 Scale *Scale::Create(ScaleType iType, |
21 { | 20 unsigned int min, |
21 unsigned int max, | |
22 float density) { | |
22 switch(iType) { | 23 switch(iType) { |
23 case SCALE_LINEAR: | 24 case SCALE_LINEAR: |
24 return static_cast<Scale*>(new ScaleLinear(min, max, density)); | 25 return static_cast<Scale*>(new ScaleLinear(min, max, density)); |
25 case SCALE_ERB: | 26 case SCALE_ERB: |
26 return static_cast<Scale*>(new ScaleERB(min, max, density)); | 27 return static_cast<Scale*>(new ScaleERB(min, max, density)); |
35 // Unreachable code | 36 // Unreachable code |
36 aimASSERT(0); | 37 aimASSERT(0); |
37 return NULL; | 38 return NULL; |
38 } | 39 } |
39 | 40 |
40 Scale *Scale::Create(ScaleType iType) | 41 Scale *Scale::Create(ScaleType iType) { |
41 { | |
42 return Create(iType, 0, 0, 0); | 42 return Create(iType, 0, 0, 0); |
43 } | 43 } |
44 | 44 |
45 Scale *Scale::Clone() | 45 Scale *Scale::Clone() { |
46 { | |
47 Scale *pScale = Create(m_iType, m_iMin, m_iMax, m_fDensity); | 46 Scale *pScale = Create(m_iType, m_iMin, m_iMax, m_fDensity); |
48 aimASSERT(pScale); | 47 AIM_ASSERT(pScale); |
49 pScale->m_fScaledCurHalfSum = m_fScaledCurHalfSum; | 48 pScale->m_fScaledCurHalfSum = m_fScaledCurHalfSum; |
50 pScale->m_fScaledCurDiff = m_fScaledCurDiff; | 49 pScale->m_fScaledCurDiff = m_fScaledCurDiff; |
51 return pScale; | 50 return pScale; |
52 } | 51 } |
53 | 52 |
54 float Scale::FromLinearScaled(float fVal) | 53 float Scale::FromLinearScaled(float fVal) { |
55 { | |
56 /*! This function returns | 54 /*! This function returns |
57 * ( FromLinear(fVal) - (fMinScaled+fMaxScaled)/2 ) / (fMaxScaled-fMinScaled) | 55 * ( FromLinear(fVal) - (fMinScaled+fMaxScaled)/2 ) / (fMaxScaled-fMinScaled) |
58 */ | 56 */ |
59 float fValScaled = FromLinear(fVal); | 57 float fValScaled = FromLinear(fVal); |
60 return (fValScaled - m_fScaledCurHalfSum) / m_fScaledCurDiff; | 58 return (fValScaled - m_fScaledCurHalfSum) / m_fScaledCurDiff; |
61 } | 59 } |
62 void Scale::FromLinearScaledExtrema(float fMin, float fMax) | 60 |
63 { | 61 void Scale::FromLinearScaledExtrema(float fMin, float fMax) { |
64 float fMinScaled = FromLinear(fMin); | 62 float fMinScaled = FromLinear(fMin); |
65 float fMaxScaled = FromLinear(fMax); | 63 float fMaxScaled = FromLinear(fMax); |
66 m_fScaledCurHalfSum = (fMinScaled+fMaxScaled)/2; | 64 m_fScaledCurHalfSum = (fMinScaled+fMaxScaled)/2; |
67 m_fScaledCurDiff = fMaxScaled-fMinScaled; | 65 m_fScaledCurDiff = fMaxScaled-fMinScaled; |
68 m_fMin = fMin; | 66 m_fMin = fMin; |
69 m_fMax = fMax; | 67 m_fMax = fMax; |
70 } | 68 } |
71 void Scale::FromLinearScaledExtrema(Scale *pScale) | 69 |
72 { | 70 void Scale::FromLinearScaledExtrema(Scale *pScale) { |
73 aimASSERT(pScale); | 71 aimASSERT(pScale); |
74 FromLinearScaledExtrema(pScale->m_fMin, pScale->m_fMax); | 72 FromLinearScaledExtrema(pScale->m_fMin, pScale->m_fMax); |
75 } | 73 } |
76 | |
77 SignalBank* Scale::CreateSignalBank(unsigned int iChannels, unsigned int iBufferlength, unsigned int iSamplerate) | |
78 { | |
79 SignalBank *pBank; | |
80 double intpart, fracpart; | |
81 fracpart = modf((m_iMax-m_iMin)*m_fDensity, &intpart); | |
82 unsigned int nBankChan = (unsigned int) intpart; | |
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; | |
98 } | |
99 | |
100 | |
101 | |
102 SignalBank* Scale::CreateSignalBank(Signal* pSig) { | |
103 aimASSERT(pSig); | |
104 return CreateSignalBank(pSig->getAudioChannels(), pSig->getBufferlength(), pSig->getSamplerate()); | |
105 } | |
106 |