Chris@0
|
1
|
Chris@0
|
2 #include "LowFreq.h"
|
Chris@0
|
3
|
Chris@0
|
4 static float defaultPShort = 0.1;
|
Chris@0
|
5 static float defaultPLong = 1.0;
|
Chris@0
|
6
|
Chris@0
|
7 LowFreq::LowFreq(float inputSampleRate) :
|
Chris@0
|
8 Plugin(inputSampleRate),
|
Chris@0
|
9 m_pShort(defaultPShort),
|
Chris@0
|
10 m_pLong(defaultPLong)
|
Chris@0
|
11 {
|
Chris@0
|
12 }
|
Chris@0
|
13
|
Chris@0
|
14 LowFreq::~LowFreq()
|
Chris@0
|
15 {
|
Chris@0
|
16 }
|
Chris@0
|
17
|
Chris@0
|
18 string
|
Chris@0
|
19 LowFreq::getIdentifier() const
|
Chris@0
|
20 {
|
Chris@0
|
21 return "lowfreq";
|
Chris@0
|
22 }
|
Chris@0
|
23
|
Chris@0
|
24 string
|
Chris@0
|
25 LowFreq::getName() const
|
Chris@0
|
26 {
|
Chris@0
|
27 return "Low-frequency Spectrogram";
|
Chris@0
|
28 }
|
Chris@0
|
29
|
Chris@0
|
30 string
|
Chris@0
|
31 LowFreq::getDescription() const
|
Chris@0
|
32 {
|
Chris@0
|
33 //!!! Return something helpful here!
|
Chris@0
|
34 return "";
|
Chris@0
|
35 }
|
Chris@0
|
36
|
Chris@0
|
37 string
|
Chris@0
|
38 LowFreq::getMaker() const
|
Chris@0
|
39 {
|
Chris@0
|
40 return "Queen Mary, University of London";
|
Chris@0
|
41 }
|
Chris@0
|
42
|
Chris@0
|
43 int
|
Chris@0
|
44 LowFreq::getPluginVersion() const
|
Chris@0
|
45 {
|
Chris@0
|
46 return 1;
|
Chris@0
|
47 }
|
Chris@0
|
48
|
Chris@0
|
49 string
|
Chris@0
|
50 LowFreq::getCopyright() const
|
Chris@0
|
51 {
|
Chris@0
|
52 return "GPL";
|
Chris@0
|
53 }
|
Chris@0
|
54
|
Chris@0
|
55 LowFreq::InputDomain
|
Chris@0
|
56 LowFreq::getInputDomain() const
|
Chris@0
|
57 {
|
Chris@0
|
58 return TimeDomain;
|
Chris@0
|
59 }
|
Chris@0
|
60
|
Chris@0
|
61 size_t
|
Chris@0
|
62 LowFreq::getPreferredBlockSize() const
|
Chris@0
|
63 {
|
Chris@0
|
64 //!!! calculate from params
|
Chris@0
|
65 return 0;
|
Chris@0
|
66 }
|
Chris@0
|
67
|
Chris@0
|
68 size_t
|
Chris@0
|
69 LowFreq::getPreferredStepSize() const
|
Chris@0
|
70 {
|
Chris@0
|
71 //!!!
|
Chris@0
|
72 return 0;
|
Chris@0
|
73 }
|
Chris@0
|
74
|
Chris@0
|
75 size_t
|
Chris@0
|
76 LowFreq::getMinChannelCount() const
|
Chris@0
|
77 {
|
Chris@0
|
78 return 1;
|
Chris@0
|
79 }
|
Chris@0
|
80
|
Chris@0
|
81 size_t
|
Chris@0
|
82 LowFreq::getMaxChannelCount() const
|
Chris@0
|
83 {
|
Chris@0
|
84 return 1;
|
Chris@0
|
85 }
|
Chris@0
|
86
|
Chris@0
|
87 LowFreq::ParameterList
|
Chris@0
|
88 LowFreq::getParameterDescriptors() const
|
Chris@0
|
89 {
|
Chris@0
|
90 ParameterList list;
|
Chris@0
|
91
|
Chris@0
|
92 ParameterDescriptor d;
|
Chris@0
|
93 d.identifier = "p_short";
|
Chris@0
|
94 d.name = "Shortest Period";
|
Chris@0
|
95 d.description = "Period in seconds of the highest-frequency component to include in the spectrogram. That is, 1/f where f is the highest frequency (in Hz) spanned by the spectrogram.";
|
Chris@0
|
96 d.unit = "s";
|
Chris@0
|
97 d.minValue = 0.01;
|
Chris@0
|
98 d.maxValue = 10;
|
Chris@0
|
99 d.defaultValue = defaultPShort;
|
Chris@0
|
100 d.isQuantized = false;
|
Chris@0
|
101 list.push_back(d);
|
Chris@0
|
102
|
Chris@0
|
103 d.identifier = "p_long";
|
Chris@0
|
104 d.name = "Longest Period";
|
Chris@0
|
105 d.description = "Period in seconds of the lowest-frequency component to include in the spectrogram. That is, 1/f where f is the lowest frequency (in Hz) spanned by the spectrogram.";
|
Chris@0
|
106 d.unit = "s";
|
Chris@0
|
107 d.minValue = 0.01;
|
Chris@0
|
108 d.maxValue = 10;
|
Chris@0
|
109 d.defaultValue = defaultPLong;
|
Chris@0
|
110 d.isQuantized = false;
|
Chris@0
|
111 list.push_back(d);
|
Chris@0
|
112
|
Chris@0
|
113 return list;
|
Chris@0
|
114 }
|
Chris@0
|
115
|
Chris@0
|
116 float
|
Chris@0
|
117 LowFreq::getParameter(string identifier) const
|
Chris@0
|
118 {
|
Chris@0
|
119 if (identifier == "p_short") {
|
Chris@0
|
120 return m_pShort;
|
Chris@0
|
121 } else if (identifier == "p_long") {
|
Chris@0
|
122 return m_pLong;
|
Chris@0
|
123 }
|
Chris@0
|
124 return 0;
|
Chris@0
|
125 }
|
Chris@0
|
126
|
Chris@0
|
127 void
|
Chris@0
|
128 LowFreq::setParameter(string identifier, float value)
|
Chris@0
|
129 {
|
Chris@0
|
130 if (identifier == "p_short") {
|
Chris@0
|
131 m_pShort = value;
|
Chris@0
|
132 } else if (identifier == "p_long") {
|
Chris@0
|
133 m_pLong = value;
|
Chris@0
|
134 }
|
Chris@0
|
135 }
|
Chris@0
|
136
|
Chris@0
|
137 LowFreq::ProgramList
|
Chris@0
|
138 LowFreq::getPrograms() const
|
Chris@0
|
139 {
|
Chris@0
|
140 ProgramList list;
|
Chris@0
|
141 return list;
|
Chris@0
|
142 }
|
Chris@0
|
143
|
Chris@0
|
144 string
|
Chris@0
|
145 LowFreq::getCurrentProgram() const
|
Chris@0
|
146 {
|
Chris@0
|
147 return ""; // no programs
|
Chris@0
|
148 }
|
Chris@0
|
149
|
Chris@0
|
150 void
|
Chris@0
|
151 LowFreq::selectProgram(string name)
|
Chris@0
|
152 {
|
Chris@0
|
153 }
|
Chris@0
|
154
|
Chris@0
|
155 LowFreq::OutputList
|
Chris@0
|
156 LowFreq::getOutputDescriptors() const
|
Chris@0
|
157 {
|
Chris@0
|
158 OutputList list;
|
Chris@0
|
159
|
Chris@0
|
160 OutputDescriptor d;
|
Chris@0
|
161 d.identifier = "spectrogram";
|
Chris@0
|
162 d.name = "Spectrogram";
|
Chris@0
|
163 d.description = "";
|
Chris@0
|
164 d.unit = "";
|
Chris@0
|
165 d.hasFixedBinCount = true;
|
Chris@0
|
166 d.binCount = 1; //!!! calculate
|
Chris@0
|
167 d.hasKnownExtents = false;
|
Chris@0
|
168 d.isQuantized = false;
|
Chris@0
|
169 d.sampleType = OutputDescriptor::OneSamplePerStep;
|
Chris@0
|
170 d.hasDuration = false;
|
Chris@0
|
171 list.push_back(d);
|
Chris@0
|
172
|
Chris@0
|
173 return list;
|
Chris@0
|
174 }
|
Chris@0
|
175
|
Chris@0
|
176 bool
|
Chris@0
|
177 LowFreq::initialise(size_t channels, size_t stepSize, size_t blockSize)
|
Chris@0
|
178 {
|
Chris@0
|
179 if (channels < getMinChannelCount() ||
|
Chris@0
|
180 channels > getMaxChannelCount()) return false;
|
Chris@0
|
181
|
Chris@0
|
182 // Real initialisation work goes here!
|
Chris@0
|
183
|
Chris@0
|
184 return true;
|
Chris@0
|
185 }
|
Chris@0
|
186
|
Chris@0
|
187 void
|
Chris@0
|
188 LowFreq::reset()
|
Chris@0
|
189 {
|
Chris@0
|
190 // Clear buffers, reset stored values, etc
|
Chris@0
|
191 }
|
Chris@0
|
192
|
Chris@0
|
193 LowFreq::FeatureSet
|
Chris@0
|
194 LowFreq::process(const float *const *inputBuffers, Vamp::RealTime timestamp)
|
Chris@0
|
195 {
|
Chris@0
|
196 // Do actual work!
|
Chris@0
|
197 return FeatureSet();
|
Chris@0
|
198 }
|
Chris@0
|
199
|
Chris@0
|
200 LowFreq::FeatureSet
|
Chris@0
|
201 LowFreq::getRemainingFeatures()
|
Chris@0
|
202 {
|
Chris@0
|
203 return FeatureSet();
|
Chris@0
|
204 }
|
Chris@0
|
205
|