Krotos Modules 3
Loading...
Searching...
No Matches
KrotosAudioBufferDSP.h
Go to the documentation of this file.
1/*
2==============================================================================
3
4KrotosAudioBufferDSP.h
5
6Created:
7 13 June 2019 12:22:00am S White
8
9Contributers:
10 Team Krotos
11
12==============================================================================
13*/
14
15#pragma once
16
17// #define WRITE_FILES
18
19#include <juce_graphics/juce_graphics.h>
20#include <krotos_ml/krotos_ml.h>
21
22namespace krotos
23{
24
29 {
30 float tracking;
31 float cycles;
32 float cal0;
33 float cal3;
34 float cal4;
35 float cal5;
36 };
37
42 {
43 float coeff0{0.f};
44 float coeff1{0.f};
45 float coeff2{0.f};
46 float coeff3{0.f};
47 float coeff4{0.f};
48 float coeff5{0.f};
49 float coeff6{0.f};
50 float coeff7{0.f};
51 float tracking{0.f};
52 float selectX{0.f};
53 float selectY{0.f};
54 float selectZ{0.f};
55 float dispAAlpha{0.f};
56 float dispAH{0.f};
57 float dispAA{0.f};
58 };
59
64 {
65
66 public:
67 String& getMessage() { return m_message; }
68
70
71 float getIndicator() { return m_indicator; }
72
73 void setNumStages(int numStages)
74 {
75 m_numStages = numStages;
76 m_increment = 1.f / static_cast<float>(numStages);
77 m_message = "";
78 m_indicator = 0.f;
80 m_isLoading = true;
81 }
82
83 void stage(String message)
84 {
85 m_message = message;
88 m_isLoading = true;
89 }
90
91 void end(String finalMessage)
92 {
93 m_message = finalMessage;
94 m_indicator = 1.f;
95 m_isLoading = false;
96 }
97
98 bool isLoading() { return m_isLoading; }
99
100 private:
103
104 volatile bool m_isLoading{false};
105
106 volatile float m_indicator = 0.f;
107 float m_increment = 0.f;
108 float m_proportionUsage = 0.f;
109 String m_message{"---"};
110 };
111
113 {
114
115 public:
116 int clampToLimits(int val)
117 {
118 if (val > m_maxLimit)
119 val = m_maxLimit;
120 if (val < m_minLimit)
121 val = m_minLimit;
122 return val;
123 }
124
125 void set(int centre, float percent)
126 {
127 int halfSpan = int(float(centre) * percent);
128 min = clampToLimits(centre - halfSpan);
129 max = clampToLimits(centre + halfSpan);
130 }
131
132 void set(GrainRange range)
133 {
134 min = clampToLimits(range.min);
135 max = clampToLimits(range.max);
136 }
137
139 {
140 m_minLimit = limits.min;
141 m_maxLimit = limits.max;
142 }
143
145 {
146 min = m_minLimit;
147 max = m_maxLimit;
148 }
149
150 void setLimits(int newMin, int newMax)
151 {
152 m_minLimit = newMin;
153 m_maxLimit = newMax;
154 }
155
156 bool isWithinRange(int val) { return ((val >= min) && (val <= max)); }
157
158 int min;
159 int max;
160
161 private:
164 };
165
167 {
168 float min;
169 float max;
170 };
171
177 {
178 float frequency{0.0f}; // Instantaneous frequency at this grain
179 int grainIndexByFrequency{0}; // Index to the grain
180 int audioIndex{0}; // Index into the PCM audio buffer
181 float grainSize{0.0f}; // Number of samples in the grain
182 int grainIndexByTime{0}; // Index to the grain
183 float principalX{0.f};
184 float principalY{0.f};
185 float principalZ{0.f};
186 float principalQ{0.f};
187 };
188
196 template <typename Functor>
197 void normaliseAudioDescriptorFeature(std::vector<AudioDescriptor>& decriptors, Functor functor, float border = 0.f)
198 {
199 float low = border;
200 float high = 1.f - border;
201 float min = 10000000000.f, max = -10000000000.f;
202 // Find the min and max
203 for (auto& item : decriptors)
204 {
205 float* target = functor(item);
206 if (*target < min)
207 min = *target;
208 if (*target > max)
209 max = *target;
210 }
211 if (approximatelyEqual(min, max))
212 {
213 // Set values to a constant
214 for (auto& item : decriptors)
215 {
216 float* target = functor(item);
217 *target = 0.5;
218 }
219 }
220 else
221 {
222 // Scale the values
223 for (auto& item : decriptors)
224 {
225 float* target = functor(item);
226 *target = jmap<float>(*target, min, max, low, high);
227 }
228 }
229 }
230
239 template <typename Functor2>
240 void normaliseAndInvertAudioDescriptorFeature(std::vector<AudioDescriptor>& decriptors, Functor2 functor,
241 float border = 0.f)
242 {
243 float low = border;
244 float high = 1.f - border;
245 float min = 10000000000.f, max = -10000000000.f;
246 // Find the min and max
247 for (auto& item : decriptors)
248 {
249 float* target = functor(item);
250 if (*target < min)
251 min = *target;
252 if (*target > max)
253 max = *target;
254 }
255 if (approximatelyEqual(min, max))
256 {
257 // Set values to a constant
258 for (auto& item : decriptors)
259 {
260 float* target = functor(item);
261 *target = 0.5;
262 }
263 }
264 else
265 {
266 // Scale the values
267 for (auto& item : decriptors)
268 {
269 float* target = functor(item);
270 *target = jmap<float>(*target, min, max, high, low);
271 }
272 }
273 }
274
275 class KrotosAudioBufferDSP : public KrotosAudioBuffer, public Thread, public Thread::Listener, public Timer
276 {
277 public:
279
281 {
282 // TODO: Test revealed that the thread was still running if
283 // analysis is continuing when the Kwidget owner has been
284 // destroyed. This fixes it for now at least...
285 stopThread(ANALYSIS_TIMER_PERIOD);
286 };
287
288 void exitSignalSent() override{};
289
290 // Note: these must match Kwidget_Reformer::SegmentationMethods
292 {
294 STFT = 32, // Could be renamed with a global replace later on
295 EnvOnset = 64, // etc ...
296 OverlapWindow = 96,
297 SuperFlux = 128,
299 };
300
301 // Note: these must match Kwidget_Reformer::FeatureExtrMethods
303 {
306 MFCC_PCA = 32, // Could be renamed with a global replace later on
307 Centroid_Level = 64, // etc ...
308 SpCentroid_RMS = 96,
309 SpFlatness_RMS = 128,
310 ERBSpCentroid_RMS = 160,
313 };
314
315 enum class AnalysisScheme
316 {
317 SchemeNone = 0,
318 Vehicle,
321 };
322
323 void generalScheme();
324
325 void writeSpectrogramToFile(const std::vector<std::vector<float>>& spectrogram, const juce::String filename)
326 {
327 juce::File outputFile = juce::File::getCurrentWorkingDirectory().getChildFile(filename);
328 juce::FileOutputStream outputFileStream(outputFile);
329 if (outputFileStream.openedOk())
330 {
331 // Write matrix elements to the file
332 for (const auto& row : spectrogram)
333 {
334 for (const auto& value : row)
335 {
336 outputFileStream << value << " ";
337 }
338 outputFileStream << '\n';
339 }
340 outputFileStream.flush();
341 }
342 else
343 {
344 DBG("Error writting");
345 }
346 }
347
348 void writeFeatureToFile(const std::vector<float>& feature, const std::string& filename)
349 {
350 std::ofstream file(filename);
351 if (file.is_open())
352 {
353 for (const float value : feature)
354 {
355 file << std::to_string(value) << "\n";
356 }
357 file.close();
358 DBG("Feature written to file: ");
359 }
360 else
361 {
362 DBG("Failed to open file: ");
363 }
364 }
365
373 float crossCorrelate(const float* referencePointer, const float* candidatePointer, const int testSize);
374
381 float autoCorrelateCentred(int centerIndex, int testSize);
382
390 int calcFreeGrain(int centerIndex, int previousGrainSize, GrainRange range);
391
393
394 int size() { return getNumSamples(); }
395
396 float* data() { return getWritePointer(0); }
397
399
408 void analyse();
409
410 void analysePhase();
411
413
415
421
423
425
427
428 bool scanForGrainsFreeMarker(std::vector<int>& returnGrains, const int audioIndexStart,
429 const int useableIndexEnd, const int startGrainSize);
430 bool scanBackwardsForGrainsFreeMarker(std::vector<int>& returnGrains, const int audioIndexStart,
431 const int useableIndexEnd, const int startGrainSize);
432
433 void buildDescriptors(std::vector<AudioDescriptor>& descriptors, const std::vector<int>& grainsList,
434 const int startGrainAudioIndex, bool goingBackwards);
435
441 void setAnalysisWavRange(float start, float end)
442 {
443 m_startPos = start;
444 m_endPos = end;
445 }
446
451
452 std::vector<AudioDescriptor>& getGrainDescriptionByTime() { return m_grainDescriptionByTime; }
453
454 std::vector<AudioDescriptor>& getGrainDescriptionByZ() { return m_grainDescriptionByZ; }
455
456 std::size_t getNearestNeighbour2D(float x, float y) { return m_nnSearch->knnQuery(x, y, 0.f); }
457
458 std::vector<std::size_t> getNearestNeighbour2D(float x, float y, std::size_t k)
459 {
460 return m_nnSearch->knnQuery(x, y, 0.f, k);
461 }
462
463 std::vector<std::size_t> getNearestNeighbour2D(float x, float y, float search_radius)
464 {
465 return m_nnSearch->radiusSearch(x, y, 0.f, search_radius);
466 }
467
468 std::size_t getNearestNeighbour3D(float x, float y, float z) { return m_nnSearch->knnQuery(x, y, z); }
469
470 std::vector<std::size_t> getNearestNeighbour3D(float x, float y, float z, std::size_t k)
471 {
472 return m_nnSearch->knnQuery(x, y, z, k);
473 }
474
475 std::vector<std::size_t> getNearestNeighbour3D(float x, float y, float z, float search_radius)
476 {
477 return m_nnSearch->radiusSearch(x, y, z, search_radius);
478 }
479
480 void setTrackingValue(float newValue) { m_trackingValue = newValue; }
481
482 void setTrackingCycles(float newValue) { m_trackingCycles = newValue; }
483
485 AudioDescriptor& audioPercentToDescriptor(float audioPercent);
487
488 inline void clampGrainDescriptionByTimeIndex(size_t& index);
489
490 inline StereoSample getSampleFromGrainPhase(double grainPhase);
491
492 inline double getFrequencyFromGrainPhase(double grainPhase);
493
495
497
499
501
502 void setSegmentationMethod(SegmentationMethod segmentation) { m_segmentationMethod = segmentation; }
503
504 void setFeatureExtrMethod(FeatureExtrMethod featureExtraction) { m_featureMethod = featureExtraction; }
505
507
508 private:
509 const int ANALYSIS_TIMER_PERIOD{250};
510 void timerCallback() override;
511
512 void run() override;
513
515 void cleanupAnalysis();
516
518 std::vector<float> averageBufferToMono();
520 std::vector<std::vector<float>> segmentOnsetSlices(std::vector<int> onsetPositions,
521 std::vector<float> signalBufferMono);
522 std::vector<std::vector<float>> segmentChunks(std::vector<int> onsetPositions,
523 std::vector<float> signalBufferMono, std::size_t window_length);
524
525 std::vector<int> chunk(const std::vector<float>& bufferVector, std::size_t window_length,
526 std::size_t hop_length);
527 std::vector<int> envelopeOnsetDetection(const std::vector<float>& bufferVector, float samplerate);
528 std::vector<int> superFluxOnsetDetection(float samplerate); // TODO See what happens here with
529 // averaging to mono!!!!
530
531 std::vector<AudioDescriptor> getDescriptorsTime(const std::vector<std::vector<float>>& timeDomainSlices,
532 const std::vector<int>& onsetPositions);
533 std::vector<std::vector<float>> mfccFeatureExtraction(std::vector<std::vector<float>>& timeDomainSlices,
534 const std::vector<int>& onsetPositions);
535 std::vector<std::vector<float>> temporalFeatureExtraction(std::vector<std::vector<float>>& timeDomainSlices);
536 std::vector<std::vector<float>> specCntrRMS_FeatureExtraction(
537 std::vector<std::vector<float>>& timeDomainSlices);
538 std::vector<std::vector<float>> specFlatnessRMS_FeatureExtraction(
539 std::vector<std::vector<float>>& timeDomainSlices);
540 std::vector<std::vector<float>> erbSpecCentroidRMS_FeatureExtraction(
541 std::vector<std::vector<float>>& timeDomainSlices);
542 std::vector<std::vector<float>> erbSpecCentroidFlatness_FeatureExtraction(
543 std::vector<std::vector<float>>& timeDomainSlices);
544 std::vector<std::vector<float>> harmonicPitchEstimation(std::vector<std::vector<float>>& timeDomainSlices);
545 // TODO:: Fix pitch tracking !!
546 std::vector<std::vector<float>> pitchPeakRMSFeatureExtraction(
547 std::vector<std::vector<float>>& timeDomainSlices);
548
549 void applyPCA(std::vector<std::vector<float>>& features, const std::size_t& n_components);
550 void setFeaturesAndNormalise(const std::vector<std::vector<float>>& features,
551 std::vector<AudioDescriptor>& descriptorsTime);
552 void buildKNNIndex(const std::vector<AudioDescriptor>& descriptorsTime);
553 void buildKNNIndexWithZ(const std::vector<AudioDescriptor>& descriptorsTime);
554 void sortByZ(const std::vector<AudioDescriptor>& descriptorsTime);
555
558 // none
561
563
564 float m_trackingValue{0.5f};
565 float m_trackingCycles{1.0f};
566
568 volatile std::atomic<bool> m_trackingDataIsValid{false};
569 volatile std::atomic<bool> m_requestDisplayCacheRegeneration{false};
570
571 // Vector containing grain boundary descriptors, sorted in frequency order
572 std::vector<AudioDescriptor> m_grainDescriptionByFrequency;
573
574 // Vector containing grain boundary descriptors, sorted by time (the order they appear in the source wav)
575 std::vector<AudioDescriptor> m_grainDescriptionByTime;
576
577 std::vector<AudioDescriptor> m_grainDescriptionByZ;
578
579 std::unique_ptr<KDTree> m_nnSearch;
580 std::unique_ptr<KDTree> m_grainMapper;
581 std::unique_ptr<PCA> m_principalComponentAnalysis;
582
583 float m_startPos{0.0f};
584 float m_endPos{1.0f};
585
587
588 // Segmentation results
589 std::vector<std::vector<float>> m_timeDomainSlices;
590 std::vector<int> m_onsetPositions;
591 std::vector<AudioDescriptor> m_descriptorsTime;
592 };
593} // namespace krotos
Definition KrotosAudioBufferDSP.h:113
void set(GrainRange range)
Definition KrotosAudioBufferDSP.h:132
void setLimits(int newMin, int newMax)
Definition KrotosAudioBufferDSP.h:150
bool isWithinRange(int val)
Definition KrotosAudioBufferDSP.h:156
int m_minLimit
Definition KrotosAudioBufferDSP.h:162
int max
Definition KrotosAudioBufferDSP.h:159
void setToLimits()
Definition KrotosAudioBufferDSP.h:144
int min
Definition KrotosAudioBufferDSP.h:158
void setLimits(GrainRange limits)
Definition KrotosAudioBufferDSP.h:138
int m_maxLimit
Definition KrotosAudioBufferDSP.h:163
void set(int centre, float percent)
Definition KrotosAudioBufferDSP.h:125
int clampToLimits(int val)
Definition KrotosAudioBufferDSP.h:116
Definition KrotosAudioBufferDSP.h:276
void setAnalysisGrainSizeRange()
Set the frequency range we want to analyse for.
Definition KrotosAudioBufferDSPPhaseDetection.cpp:276
ProgressTracker & getProgressTracker()
Get a reference to this buffer's ProgressTracker.
Definition KrotosAudioBufferDSP.cpp:24
AnalysisCoefficientsPhase m_phaseAnalysisCoefficients
Definition KrotosAudioBufferDSP.h:586
void run() override
Definition KrotosAudioBufferDSP.cpp:71
ProgressTracker m_progressTracker
Definition KrotosAudioBufferDSP.h:562
void buildDescriptors(std::vector< AudioDescriptor > &descriptors, const std::vector< int > &grainsList, const int startGrainAudioIndex, bool goingBackwards)
Definition KrotosAudioBufferDSPPhaseDetection.cpp:248
void timerCallback() override
Definition KrotosAudioBufferDSP.cpp:26
std::vector< std::vector< float > > erbSpecCentroidRMS_FeatureExtraction(std::vector< std::vector< float > > &timeDomainSlices)
Definition KrotosAudioBufferDSP.cpp:475
std::vector< int > chunk(const std::vector< float > &bufferVector, std::size_t window_length, std::size_t hop_length)
Definition KrotosAudioBufferDSP.cpp:167
SegmentationMethod
Definition KrotosAudioBufferDSP.h:292
float m_trackingValue
Definition KrotosAudioBufferDSP.h:564
float m_endPos
Definition KrotosAudioBufferDSP.h:584
std::vector< std::vector< float > > mfccFeatureExtraction(std::vector< std::vector< float > > &timeDomainSlices, const std::vector< int > &onsetPositions)
Definition KrotosAudioBufferDSP.cpp:284
std::unique_ptr< PCA > m_principalComponentAnalysis
Definition KrotosAudioBufferDSP.h:581
const int ANALYSIS_TIMER_PERIOD
Definition KrotosAudioBufferDSP.h:509
FeatureExtrMethod getFeatureExtractionMethod()
Definition KrotosAudioBufferDSP.h:498
volatile std::atomic< bool > m_trackingDataIsValid
Definition KrotosAudioBufferDSP.h:568
std::unique_ptr< KDTree > m_grainMapper
Definition KrotosAudioBufferDSP.h:580
std::unique_ptr< KDTree > m_nnSearch
Definition KrotosAudioBufferDSP.h:579
float crossCorrelate(const float *referencePointer, const float *candidatePointer, const int testSize)
crossCorrelate - Perform a cross-correlation function
Definition KrotosAudioBufferDSPCorrelation.cpp:18
std::size_t getNearestNeighbour2D(float x, float y)
Definition KrotosAudioBufferDSP.h:456
std::vector< int > m_onsetPositions
Definition KrotosAudioBufferDSP.h:590
bool scanBackwardsForGrainsFreeMarker(std::vector< int > &returnGrains, const int audioIndexStart, const int useableIndexEnd, const int startGrainSize)
Definition KrotosAudioBufferDSPPhaseDetection.cpp:224
AnalysisScheme getAnalysisScheme()
Definition KrotosAudioBufferDSP.h:500
SegmentationMethod m_segmentationMethod
Definition KrotosAudioBufferDSP.h:556
bool analysisResultsAreValid()
Definition KrotosAudioBufferDSP.h:422
std::vector< std::vector< float > > pitchPeakRMSFeatureExtraction(std::vector< std::vector< float > > &timeDomainSlices)
Definition KrotosAudioBufferDSP.cpp:582
double getFrequencyFromGrainPhase(double grainPhase)
Definition KrotosAudioBufferDSP.cpp:963
void setFeaturesAndNormalise(const std::vector< std::vector< float > > &features, std::vector< AudioDescriptor > &descriptorsTime)
Definition KrotosAudioBufferDSP.cpp:660
void generalScheme()
Definition KrotosAudioBufferDSP.cpp:737
void setFeatureExtrMethod(FeatureExtrMethod featureExtraction)
Definition KrotosAudioBufferDSP.h:504
std::vector< std::vector< float > > erbSpecCentroidFlatness_FeatureExtraction(std::vector< std::vector< float > > &timeDomainSlices)
Definition KrotosAudioBufferDSP.cpp:529
AnalysisCoefficients & getAnalysisCoefficients()
Definition KrotosAudioBufferDSP.cpp:979
float m_startPos
Definition KrotosAudioBufferDSP.h:583
std::vector< AudioDescriptor > m_descriptorsTime
Definition KrotosAudioBufferDSP.h:591
std::vector< int > envelopeOnsetDetection(const std::vector< float > &bufferVector, float samplerate)
Definition KrotosAudioBufferDSP.cpp:188
std::vector< AudioDescriptor > getDescriptorsTime(const std::vector< std::vector< float > > &timeDomainSlices, const std::vector< int > &onsetPositions)
Definition KrotosAudioBufferDSP.cpp:263
void validate()
Definition KrotosAudioBufferDSP.h:416
std::vector< std::size_t > getNearestNeighbour2D(float x, float y, std::size_t k)
Definition KrotosAudioBufferDSP.h:458
volatile std::atomic< bool > m_requestDisplayCacheRegeneration
Definition KrotosAudioBufferDSP.h:569
std::vector< std::size_t > getNearestNeighbour3D(float x, float y, float z, float search_radius)
Definition KrotosAudioBufferDSP.h:475
int calcFreeGrain(int centerIndex, int previousGrainSize, GrainRange range)
calcFreeGrain - find the next grain size
Definition KrotosAudioBufferDSPPhaseDetection.cpp:13
void triggerDisplayCacheRegeneration()
Definition KrotosAudioBufferDSP.h:424
void buildKNNIndex(const std::vector< AudioDescriptor > &descriptorsTime)
Definition KrotosAudioBufferDSP.cpp:684
std::vector< std::vector< float > > specCntrRMS_FeatureExtraction(std::vector< std::vector< float > > &timeDomainSlices)
Definition KrotosAudioBufferDSP.cpp:353
void setTrackingCycles(float newValue)
Definition KrotosAudioBufferDSP.h:482
std::vector< std::vector< float > > m_timeDomainSlices
Definition KrotosAudioBufferDSP.h:589
void analyse()
analyse Analyses the audio waveform stored in the buffer according to the selected scheme This method...
Definition KrotosAudioBufferDSP.cpp:35
void invalidate()
Definition KrotosAudioBufferDSP.h:414
~KrotosAudioBufferDSP()
Definition KrotosAudioBufferDSP.h:280
void writeFeatureToFile(const std::vector< float > &feature, const std::string &filename)
Definition KrotosAudioBufferDSP.h:348
AnalysisScheme m_analysisScheme
Definition KrotosAudioBufferDSP.h:559
bool shouldRegenerateDisplayCache()
Definition KrotosAudioBufferDSP.cpp:28
AudioDescriptor & audioIndexToDescriptor(int audioIndex)
Definition KrotosAudioBufferDSP.cpp:895
std::vector< int > superFluxOnsetDetection(float samplerate)
Definition KrotosAudioBufferDSP.cpp:225
void setTrackingValue(float newValue)
Definition KrotosAudioBufferDSP.h:480
void setAnalysisScheme(AnalysisScheme scheme)
Definition KrotosAudioBufferDSP.h:506
int size()
Definition KrotosAudioBufferDSP.h:394
std::vector< AudioDescriptor > m_grainDescriptionByFrequency
Definition KrotosAudioBufferDSP.h:572
KrotosAudioBufferDSP()
Definition KrotosAudioBufferDSP.cpp:18
std::size_t getNearestNeighbour3D(float x, float y, float z)
Definition KrotosAudioBufferDSP.h:468
std::vector< std::vector< float > > specFlatnessRMS_FeatureExtraction(std::vector< std::vector< float > > &timeDomainSlices)
Definition KrotosAudioBufferDSP.cpp:414
std::vector< std::vector< float > > temporalFeatureExtraction(std::vector< std::vector< float > > &timeDomainSlices)
Definition KrotosAudioBufferDSP.cpp:330
FeatureExtrMethod
Definition KrotosAudioBufferDSP.h:303
void buildKNNIndexWithZ(const std::vector< AudioDescriptor > &descriptorsTime)
Definition KrotosAudioBufferDSP.cpp:694
AnalysisCoefficients m_AnalysisCoefficients
Definition KrotosAudioBufferDSP.h:560
void cleanupAnalysis()
Definition KrotosAudioBufferDSP.cpp:721
void setAnalysisWavRange(float start, float end)
setAnalysisWavRange - define a subset of the audio range for analysis
Definition KrotosAudioBufferDSP.h:441
std::vector< AudioDescriptor > m_grainDescriptionByTime
Definition KrotosAudioBufferDSP.h:575
std::vector< std::size_t > getNearestNeighbour2D(float x, float y, float search_radius)
Definition KrotosAudioBufferDSP.h:463
std::vector< AudioDescriptor > & getGrainDescriptionByZ()
Definition KrotosAudioBufferDSP.h:454
AudioDescriptor & audioFrequencyToDescriptor(float frequency)
Definition KrotosAudioBufferDSP.cpp:919
void writeSpectrogramToFile(const std::vector< std::vector< float > > &spectrogram, const juce::String filename)
Definition KrotosAudioBufferDSP.h:325
StereoSample getSampleFromGrainPhase(double grainPhase)
Definition KrotosAudioBufferDSP.cpp:949
std::vector< AudioDescriptor > & getGrainDescriptionByTime()
Definition KrotosAudioBufferDSP.h:452
AudioDescriptor & audioPercentToDescriptor(float audioPercent)
Definition KrotosAudioBufferDSP.cpp:974
std::vector< std::vector< float > > segmentChunks(std::vector< int > onsetPositions, std::vector< float > signalBufferMono, std::size_t window_length)
Definition KrotosAudioBufferDSP.cpp:148
SegmentationMethod getSegmentationMethod() const
Definition KrotosAudioBufferDSP.h:496
void setPhaseAnalysisCoefficients(AnalysisCoefficientsPhase coeff)
Definition KrotosAudioBufferDSP.h:392
GrainRange m_analysisGrainSizeRange
Definition KrotosAudioBufferDSP.h:567
void applyPCA(std::vector< std::vector< float > > &features, const std::size_t &n_components)
Definition KrotosAudioBufferDSP.cpp:645
FeatureExtrMethod m_featureMethod
Definition KrotosAudioBufferDSP.h:557
std::vector< std::vector< float > > harmonicPitchEstimation(std::vector< std::vector< float > > &timeDomainSlices)
Definition KrotosAudioBufferDSP.cpp:613
bool scanForGrainsFreeMarker(std::vector< int > &returnGrains, const int audioIndexStart, const int useableIndexEnd, const int startGrainSize)
Definition KrotosAudioBufferDSPPhaseDetection.cpp:205
void clampGrainDescriptionByTimeIndex(size_t &index)
Definition KrotosAudioBufferDSP.cpp:943
float m_trackingCycles
Definition KrotosAudioBufferDSP.h:565
std::vector< float > averageBufferToMono()
Definition KrotosAudioBufferDSP.cpp:102
void setSegmentationMethod(SegmentationMethod segmentation)
Definition KrotosAudioBufferDSP.h:502
std::vector< std::vector< float > > segmentOnsetSlices(std::vector< int > onsetPositions, std::vector< float > signalBufferMono)
Definition KrotosAudioBufferDSP.cpp:124
void analysePhase()
Definition KrotosAudioBufferDSPPhaseDetection.cpp:298
void sortByZ(const std::vector< AudioDescriptor > &descriptorsTime)
Definition KrotosAudioBufferDSP.cpp:704
std::vector< std::size_t > getNearestNeighbour3D(float x, float y, float z, std::size_t k)
Definition KrotosAudioBufferDSP.h:470
float autoCorrelateCentred(int centerIndex, int testSize)
autoCorrelateCentred - Autocorrelate both sides of supplied index
Definition KrotosAudioBufferDSPCorrelation.cpp:52
void setDefaultPhaseAnalysisCoefficients()
Definition KrotosAudioBufferDSPPhaseDetection.cpp:286
float * data()
Definition KrotosAudioBufferDSP.h:396
std::vector< AudioDescriptor > m_grainDescriptionByZ
Definition KrotosAudioBufferDSP.h:577
void exitSignalSent() override
Definition KrotosAudioBufferDSP.h:288
AnalysisScheme
Definition KrotosAudioBufferDSP.h:316
Definition KrotosAudioBuffer.h:111
ProgressTracker - a class to help with display of a progresas bar during audio analysis.
Definition KrotosAudioBufferDSP.h:64
String m_message
Definition KrotosAudioBufferDSP.h:109
int m_numStages
Definition KrotosAudioBufferDSP.h:101
void setNumStages(int numStages)
Definition KrotosAudioBufferDSP.h:73
float m_increment
Definition KrotosAudioBufferDSP.h:107
float getIndicator()
Definition KrotosAudioBufferDSP.h:71
volatile float m_indicator
Definition KrotosAudioBufferDSP.h:106
void end(String finalMessage)
Definition KrotosAudioBufferDSP.h:91
void stage(String message)
Definition KrotosAudioBufferDSP.h:83
bool isLoading()
Definition KrotosAudioBufferDSP.h:98
int m_currentStage
Definition KrotosAudioBufferDSP.h:102
float getFilledIndicator()
Definition KrotosAudioBufferDSP.h:69
float m_proportionUsage
Definition KrotosAudioBufferDSP.h:108
volatile bool m_isLoading
Definition KrotosAudioBufferDSP.h:104
String & getMessage()
Definition KrotosAudioBufferDSP.h:67
Definition KrotosAudioBuffer.h:16
Definition AirAbsorptionFilter.cpp:2
void normaliseAudioDescriptorFeature(std::vector< AudioDescriptor > &decriptors, Functor functor, float border=0.f)
Normalise a chosen field within a vector of AudioDescriptors.
Definition KrotosAudioBufferDSP.h:197
void normaliseAndInvertAudioDescriptorFeature(std::vector< AudioDescriptor > &decriptors, Functor2 functor, float border=0.f)
Normalise then invert a chosen field within a vector of AudioDescriptors.
Definition KrotosAudioBufferDSP.h:240
AnalysisCoefficients - A class containing attributes used during analysis of audio.
Definition KrotosAudioBufferDSP.h:42
float coeff6
Definition KrotosAudioBufferDSP.h:49
float coeff0
Definition KrotosAudioBufferDSP.h:43
float dispAH
Definition KrotosAudioBufferDSP.h:56
float coeff5
Definition KrotosAudioBufferDSP.h:48
float tracking
Definition KrotosAudioBufferDSP.h:51
float selectZ
Definition KrotosAudioBufferDSP.h:54
float coeff1
Definition KrotosAudioBufferDSP.h:44
float coeff7
Definition KrotosAudioBufferDSP.h:50
float selectX
Definition KrotosAudioBufferDSP.h:52
float dispAAlpha
Definition KrotosAudioBufferDSP.h:55
float dispAA
Definition KrotosAudioBufferDSP.h:57
float selectY
Definition KrotosAudioBufferDSP.h:53
float coeff3
Definition KrotosAudioBufferDSP.h:46
float coeff2
Definition KrotosAudioBufferDSP.h:45
float coeff4
Definition KrotosAudioBufferDSP.h:47
AnalysisCoefficientsPhase - A class containing attributes used during phase analysis of audio.
Definition KrotosAudioBufferDSP.h:29
float cycles
Definition KrotosAudioBufferDSP.h:31
float cal5
Definition KrotosAudioBufferDSP.h:35
float cal0
Definition KrotosAudioBufferDSP.h:32
float cal4
Definition KrotosAudioBufferDSP.h:34
float tracking
Definition KrotosAudioBufferDSP.h:30
float cal3
Definition KrotosAudioBufferDSP.h:33
A class to contains any attributes we want to store for the described audio.
Definition KrotosAudioBufferDSP.h:177
float principalQ
Definition KrotosAudioBufferDSP.h:186
int grainIndexByTime
Definition KrotosAudioBufferDSP.h:182
float principalZ
Definition KrotosAudioBufferDSP.h:185
int audioIndex
Definition KrotosAudioBufferDSP.h:180
float principalX
Definition KrotosAudioBufferDSP.h:183
int grainIndexByFrequency
Definition KrotosAudioBufferDSP.h:179
float principalY
Definition KrotosAudioBufferDSP.h:184
float frequency
Definition KrotosAudioBufferDSP.h:178
float grainSize
Definition KrotosAudioBufferDSP.h:181
Definition KrotosAudioBufferDSP.h:167
float min
Definition KrotosAudioBufferDSP.h:168
float max
Definition KrotosAudioBufferDSP.h:169