aboutsummaryrefslogtreecommitdiffstats
path: root/ofxMaxim
diff options
context:
space:
mode:
authormicknoise <mickgrierson@gmail.com>2015-01-08 15:39:51 +0000
committermicknoise <mickgrierson@gmail.com>2015-01-08 15:39:51 +0000
commit6108e512d2a68d6e08e10ea2b6384df56cb7d978 (patch)
tree3dc93fa57235a9f01a6dae56cfa5b3b2a0532bda /ofxMaxim
parent817386afc5d1f9bff89185cb122f151d6c960363 (diff)
parentdffb24497fd85e196a0f57531239b362c1d862ec (diff)
Merge pull request #30 from jakubfiala/master
maxiBark added
Diffstat (limited to 'ofxMaxim')
-rw-r--r--ofxMaxim/ofxMaxim/install.xml2
-rw-r--r--ofxMaxim/ofxMaxim/libs/maxiBark.cpp10
-rw-r--r--ofxMaxim/ofxMaxim/libs/maxiBark.h133
-rw-r--r--ofxMaxim/ofxMaxim/src/ofxMaxim.h1
4 files changed, 146 insertions, 0 deletions
diff --git a/ofxMaxim/ofxMaxim/install.xml b/ofxMaxim/ofxMaxim/install.xml
index 58923be..e42de73 100644
--- a/ofxMaxim/ofxMaxim/install.xml
+++ b/ofxMaxim/ofxMaxim/install.xml
@@ -21,6 +21,8 @@
<file>../../../addons/ofxMaxim/libs/fft.cpp</file>
<file>../../../addons/ofxMaxim/libs/fftOctaveAnalyzer.h</file>
<file>../../../addons/ofxMaxim/libs/fftOctaveAnalyzer.cpp</file>
+ <file>../../../addons/ofxMaxim/libs/maxiBark.cpp</file>
+ <file>../../../addons/ofxMaxim/libs/maxiBark.h</file>
<file>../../../addons/ofxMaxim/libs/maximilian.h</file>
<file>../../../addons/ofxMaxim/libs/maximilian.cpp</file>
</folder>
diff --git a/ofxMaxim/ofxMaxim/libs/maxiBark.cpp b/ofxMaxim/ofxMaxim/libs/maxiBark.cpp
new file mode 100644
index 0000000..634a779
--- /dev/null
+++ b/ofxMaxim/ofxMaxim/libs/maxiBark.cpp
@@ -0,0 +1,10 @@
+/*
+ * maxiBark.cpp
+ * Bark scale loudness
+ *
+ * Created by Jakub on 01/12/2014.
+ * Copyright 2014 Goldsmiths Creative Computing. All rights reserved.
+ *
+ */
+
+#include "maxiBark.h"
diff --git a/ofxMaxim/ofxMaxim/libs/maxiBark.h b/ofxMaxim/ofxMaxim/libs/maxiBark.h
new file mode 100644
index 0000000..dbb4a86
--- /dev/null
+++ b/ofxMaxim/ofxMaxim/libs/maxiBark.h
@@ -0,0 +1,133 @@
+/*
+ * maxiBark.cpp
+ * Bark scale loudness
+ *
+ * Created by Jakub on 01/12/2014.
+ * Copyright 2014 Goldsmiths Creative Computing. All rights reserved.
+ *
+ */
+
+#pragma once
+#pragma pack(16)
+
+#include "maxiFFT.h"
+#include <math.h>
+#include <iostream>
+//#include <algorithm>
+#include <cstdlib>
+#ifdef __APPLE_CC__
+#include <Accelerate/Accelerate.h>
+#endif
+
+using namespace std;
+
+//convert to Bark scale (Zwicker, 1961)
+inline double hzToBark(double hz) {
+ return 13.0*atan(hz/1315.8) + 3.5*atan(pow((hz/7518.0),2));
+}
+
+inline double binToHz(unsigned int bin, unsigned int sR, unsigned int bS) {
+ return bin*sR/bS;
+}
+
+template <class T>
+
+class maxiBarkScaleAnalyser {
+public:
+ int NUM_BARK_BANDS;
+
+ void setup(unsigned int sR, unsigned int bS) {
+ this->sampleRate = sR;
+ this->bufferSize = bS;
+ specSize = bS/2;
+ NUM_BARK_BANDS = 24;
+ for (int i=0; i<specSize; i++) {
+ barkScale[i] = hzToBark(binToHz(i, sR, bS));
+ }
+
+ bbLimits[0] = 0;
+ int currentBandEnd = barkScale[specSize-1]/NUM_BARK_BANDS;
+ int currentBand = 1;
+
+ for(int i = 0; i<specSize; i++){
+ while(barkScale[i] > currentBandEnd) {
+ bbLimits[currentBand] = i;
+ currentBand++;
+ currentBandEnd = currentBand*barkScale[specSize-1]/NUM_BARK_BANDS;
+ }
+ }
+
+ bbLimits[NUM_BARK_BANDS] = specSize-1;
+ };
+
+ double* specificLoudness(float* normalisedSpectrum) {
+ for (int i = 0; i < NUM_BARK_BANDS; i++){
+ double sum = 0;
+ for (int j = bbLimits[i] ; j < bbLimits[i+1] ; j++) {
+
+ sum += normalisedSpectrum[j];
+ }
+ specific[i] = pow(sum,0.23);
+ }
+
+ return specific;
+ };
+
+ double* relativeLoudness(float* normalisedSpectrum) {
+ for (int i = 0; i < NUM_BARK_BANDS; i++){
+ double sum = 0;
+ for (int j = bbLimits[i] ; j < bbLimits[i+1] ; j++) {
+
+ sum += normalisedSpectrum[j];
+ }
+ specific[i] = pow(sum,0.23);
+ }
+
+ double max = 0;
+ for (int i = 0; i < NUM_BARK_BANDS; i++){
+ if (specific[i] > max) max = specific[i];
+ }
+
+ for (int i = 0; i < NUM_BARK_BANDS; i++){
+ relative[i] = specific[i]/max;
+ }
+
+ return relative;
+ };
+
+ double* totalLoudness(float* normalisedSpectrum) {
+ for (int i = 0; i < NUM_BARK_BANDS; i++){
+ double sum = 0;
+ for (int j = bbLimits[i] ; j < bbLimits[i+1] ; j++) {
+
+ sum += normalisedSpectrum[j];
+ }
+ specific[i] = pow(sum,0.23);
+ }
+
+ total[0] = 0;
+
+ for (int i = 0; i < 24; i++){
+ total[0] += specific[i];
+ }
+
+ return total;
+ };
+
+private:
+ int bbLimits[24];
+ unsigned int sampleRate, bufferSize, specSize;
+ double barkScale[2048];
+ double specific[24];
+ double relative[24];
+ double total[1];
+
+};
+
+typedef maxiBarkScaleAnalyser<double> maxiBark;
+
+
+
+
+
+
diff --git a/ofxMaxim/ofxMaxim/src/ofxMaxim.h b/ofxMaxim/ofxMaxim/src/ofxMaxim.h
index b197723..e902f14 100644
--- a/ofxMaxim/ofxMaxim/src/ofxMaxim.h
+++ b/ofxMaxim/ofxMaxim/src/ofxMaxim.h
@@ -37,6 +37,7 @@
#include "maxiFFT.h"
#include "maxiGrains.h"
#include "maxiMFCC.h"
+#include "maxiBark.h"
typedef maxiMix ofxMaxiMix;