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