19#include <juce_graphics/juce_graphics.h>
91 void end(String finalMessage)
125 void set(
int centre,
float percent)
127 int halfSpan = int(
float(centre) * percent);
196 template <
typename Functor>
200 float high = 1.f - border;
201 float min = 10000000000.f, max = -10000000000.f;
203 for (
auto& item : decriptors)
205 float* target = functor(item);
211 if (approximatelyEqual(min, max))
214 for (
auto& item : decriptors)
216 float* target = functor(item);
223 for (
auto& item : decriptors)
225 float* target = functor(item);
226 *target = jmap<float>(*target, min, max, low, high);
239 template <
typename Functor2>
244 float high = 1.f - border;
245 float min = 10000000000.f, max = -10000000000.f;
247 for (
auto& item : decriptors)
249 float* target = functor(item);
255 if (approximatelyEqual(min, max))
258 for (
auto& item : decriptors)
260 float* target = functor(item);
267 for (
auto& item : decriptors)
269 float* target = functor(item);
270 *target = jmap<float>(*target, min, max, high, low);
327 juce::File outputFile = juce::File::getCurrentWorkingDirectory().getChildFile(filename);
328 juce::FileOutputStream outputFileStream(outputFile);
329 if (outputFileStream.openedOk())
332 for (
const auto& row : spectrogram)
334 for (
const auto& value : row)
336 outputFileStream << value <<
" ";
338 outputFileStream <<
'\n';
340 outputFileStream.flush();
344 DBG(
"Error writting");
350 std::ofstream file(filename);
353 for (
const float value : feature)
355 file << std::to_string(value) <<
"\n";
358 DBG(
"Feature written to file: ");
362 DBG(
"Failed to open file: ");
373 float crossCorrelate(
const float* referencePointer,
const float* candidatePointer,
const int testSize);
394 int size() {
return getNumSamples(); }
396 float*
data() {
return getWritePointer(0); }
429 const int useableIndexEnd,
const int startGrainSize);
431 const int useableIndexEnd,
const int startGrainSize);
433 void buildDescriptors(std::vector<AudioDescriptor>& descriptors,
const std::vector<int>& grainsList,
434 const int startGrainAudioIndex,
bool goingBackwards);
465 return m_nnSearch->radiusSearch(x, y, 0.f, search_radius);
477 return m_nnSearch->radiusSearch(x, y, z, search_radius);
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);
525 std::vector<int>
chunk(
const std::vector<float>& bufferVector, std::size_t window_length,
526 std::size_t hop_length);
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);
537 std::vector<std::vector<float>>& timeDomainSlices);
539 std::vector<std::vector<float>>& timeDomainSlices);
541 std::vector<std::vector<float>>& timeDomainSlices);
543 std::vector<std::vector<float>>& timeDomainSlices);
547 std::vector<std::vector<float>>& timeDomainSlices);
549 void applyPCA(std::vector<std::vector<float>>& features,
const std::size_t& n_components);
551 std::vector<AudioDescriptor>& descriptorsTime);
552 void buildKNNIndex(
const std::vector<AudioDescriptor>& descriptorsTime);
554 void sortByZ(
const std::vector<AudioDescriptor>& descriptorsTime);
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
@ Harmonic_PitchEstimation
@ ERBSpCentroid_ERBSpFlatness
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