changeset 59:b13d82111c8f tony

merge
author matthiasm
date Thu, 06 Mar 2014 16:48:27 +0000
parents b39d6745c596 (current diff) 27682ab6070c (diff)
children 60eb8771d340
files
diffstat 5 files changed, 229 insertions(+), 185 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile.linux64	Thu Mar 06 16:47:52 2014 +0000
+++ b/Makefile.linux64	Thu Mar 06 16:48:27 2014 +0000
@@ -1,11 +1,11 @@
 
-CFLAGS := -Wall -O3 -fPIC -I../vamp-plugin-sdk/
+CFLAGS := -Wall -O3 -fPIC -I../vamp-plugin-sdk/ -I../../vamp-plugin-sdk/
 #CFLAGS := -g -fPIC -I../vamp-plugin-sdk
 
 CXXFLAGS := $(CFLAGS)
 
-PLUGIN_LDFLAGS := -shared -Wl,-Bstatic -L../vamp-plugin-sdk -lvamp-sdk -Wl,-Bdynamic -Wl,--version-script=vamp-plugin.map
-TEST_LDFLAGS := -Wl,-Bstatic -L../vamp-plugin-sdk -lvamp-sdk -Wl,-Bdynamic -lboost_unit_test_framework
+PLUGIN_LDFLAGS := -shared -Wl,-Bstatic -L../vamp-plugin-sdk -L../../vamp-plugin-sdk -lvamp-sdk -Wl,-Bdynamic -Wl,--version-script=vamp-plugin.map
+TEST_LDFLAGS := -Wl,-Bstatic -L../vamp-plugin-sdk -L../../vamp-plugin-sdk -lvamp-sdk -Wl,-Bdynamic -lboost_unit_test_framework
 
 PLUGIN_EXT := .so
 
--- a/Makefile.osx	Thu Mar 06 16:47:52 2014 +0000
+++ b/Makefile.osx	Thu Mar 06 16:48:27 2014 +0000
@@ -1,8 +1,8 @@
 ARCHFLAGS := -arch x86_64 -mmacosx-version-min=10.7
-CFLAGS := $(ARCHFLAGS) -O3 -I../vamp-plugin-sdk -I/usr/local/boost -Wall -fPIC 
+CFLAGS := $(ARCHFLAGS) -O3 -I../vamp-plugin-sdk -I../../vamp-plugin-sdk -I/usr/local/boost -Wall -fPIC 
 CXXFLAGS := $(CFLAGS)
 
-LDFLAGS := -L../vamp-plugin-sdk -lvamp-sdk $(ARCHFLAGS) 
+LDFLAGS := -L../vamp-plugin-sdk -L../../vamp-plugin-sdk -lvamp-sdk $(ARCHFLAGS) 
 PLUGIN_LDFLAGS := -dynamiclib $(LDFLAGS) -exported_symbols_list vamp-plugin.list
 TEST_LDFLAGS := $(LDFLAGS) -lboost_unit_test_framework
 PLUGIN_EXT := .dylib
--- a/Yin.cpp	Thu Mar 06 16:47:52 2014 +0000
+++ b/Yin.cpp	Thu Mar 06 16:48:27 2014 +0000
@@ -1,181 +1,181 @@
-/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
-
-/*
-    pYIN - A fundamental frequency estimator for monophonic audio
-    Centre for Digital Music, Queen Mary, University of London.
-    
-    This program is free software; you can redistribute it and/or
-    modify it under the terms of the GNU General Public License as
-    published by the Free Software Foundation; either version 2 of the
-    License, or (at your option) any later version.  See the file
-    COPYING included with this distribution for more information.
-*/
-
-#include "Yin.h"
-
-#include "vamp-sdk/FFT.h"
-#include "MeanFilter.h"
-#include "YinUtil.h"
-
-#include <vector>
-#include <cstdlib>
-#include <cstdio>
-#include <cmath>
-#include <complex>
-
-using std::vector;
-
-Yin::Yin(size_t frameSize, size_t inputSampleRate, double thresh) : 
-    m_frameSize(frameSize),
-    m_inputSampleRate(inputSampleRate),
-    m_thresh(thresh),
-    m_threshDistr(2),
-    m_yinBufferSize(frameSize/2)
-{
-    if (frameSize & (frameSize-1)) {
-        throw "N must be a power of two";
-    }
-}
-
-Yin::~Yin() 
-{
-}
-
-Yin::YinOutput
-Yin::process(const double *in) const {
-    
-    double* yinBuffer = new double[m_yinBufferSize];
-
-    // calculate aperiodicity function for all periods
-    YinUtil::fastDifference(in, yinBuffer, m_yinBufferSize);    
-    YinUtil::cumulativeDifference(yinBuffer, m_yinBufferSize);
-
-    int tau = 0;
-    tau = YinUtil::absoluteThreshold(yinBuffer, m_yinBufferSize, m_thresh);
-        
-    double interpolatedTau;
-    double aperiodicity;
-    double f0;
-    
-    if (tau!=0 && tau!=m_yinBufferSize-1)
-    {
-        interpolatedTau = YinUtil::parabolicInterpolation(yinBuffer, abs(tau), m_yinBufferSize);
-        f0 = m_inputSampleRate * (1.0 / interpolatedTau);
-    } else {
-        interpolatedTau = 0;
-        f0 = 0;
-    }
-    double rms = std::sqrt(YinUtil::sumSquare(in, 0, m_yinBufferSize)/m_yinBufferSize);
-    aperiodicity = yinBuffer[abs(tau)];
-    // std::cerr << aperiodicity << std::endl;
-    if (tau < 0) f0 = -f0;
-
-    Yin::YinOutput yo(f0, 1-aperiodicity, rms);
-    for (size_t iBuf = 0; iBuf < m_yinBufferSize; ++iBuf)
-    {
-        yo.salience.push_back(yinBuffer[iBuf] < 1 ? 1-yinBuffer[iBuf] : 0); // why are the values sometimes < 0 if I don't check?
-    }
-    
-    delete [] yinBuffer;
-    return yo;
-}
-
-Yin::YinOutput
-Yin::processProbabilisticYin(const double *in) const {
-
-    double* yinBuffer = new double[m_yinBufferSize];
-
-    // calculate aperiodicity function for all periods
-    YinUtil::fastDifference(in, yinBuffer, m_yinBufferSize);    
-    YinUtil::cumulativeDifference(yinBuffer, m_yinBufferSize);
-
-    vector<double> peakProbability = YinUtil::yinProb(yinBuffer, m_threshDistr, m_yinBufferSize);
-        
-    // basic yin output
-    Yin::YinOutput yo(0,0,0);
-    for (size_t iBuf = 1; iBuf < m_yinBufferSize-1; ++iBuf)
-    {
-        if (peakProbability[iBuf] > 0)
-        {
-            double currentF0 = 
-                m_inputSampleRate * (1.0 /
-                YinUtil::parabolicInterpolation(yinBuffer, iBuf, m_yinBufferSize));
-            yo.freqProb.push_back(pair<double, double>(currentF0, peakProbability[iBuf]));
-        }
-    }
-    
-    // add salience
-    for (size_t iBuf = 0; iBuf < m_yinBufferSize; ++iBuf) {
-        yo.salience.push_back(peakProbability[iBuf]);
-    }
-
-    // std::cerr << yo.freqProb.size() << std::endl;
-    
-    delete [] yinBuffer;
-    return yo;
-}
-
-
-int
-Yin::setThreshold(double parameter)
-{
-    m_thresh = static_cast<float>(parameter);
-    return 0;
-}
-
-int
-Yin::setThresholdDistr(float parameter)
-{
-    m_threshDistr = static_cast<size_t>(parameter);
-    return 0;
-}
-
-int
-Yin::setFrameSize(size_t parameter)
-{
-    m_frameSize = parameter;
-    m_yinBufferSize = m_frameSize/2;
-    return 0;
-}
-
-// int
-// Yin::setRemoveUnvoiced(bool parameter)
-// {
-//     m_removeUnvoiced = parameter;
-//     return 0;
-// }
-
-float
-Yin::constrainedMinPick(const double *in, const float minFreq, const int maxFreq) const {
-    
-    double* yinBuffer = new double[m_yinBufferSize];
-
-    // calculate aperiodicity function for all periods
-    YinUtil::fastDifference(in, yinBuffer, m_yinBufferSize);    
-    YinUtil::cumulativeDifference(yinBuffer, m_yinBufferSize);
-    
-    int minPeriod = m_inputSampleRate / maxFreq;
-    int maxPeriod = m_inputSampleRate / minFreq;
-    
-    if (minPeriod < 0 || maxPeriod > m_yinBufferSize || minPeriod > maxPeriod) {
-        delete [] yinBuffer;
-        return 0.f;
-    }
-    
-    float bestVal = 1000;
-    int   bestTau = 0;
-    for (int tau = minPeriod; tau <= maxPeriod; ++tau)
-    {
-        if (yinBuffer[tau] < bestVal) 
-        {
-            bestVal = yinBuffer[tau];
-            bestTau = tau;
-        }
-    }
-    
-    float interpolatedTau =
-        YinUtil::parabolicInterpolation(yinBuffer, bestTau, m_yinBufferSize);
-    
-    delete [] yinBuffer;
-    return m_inputSampleRate * (1.0 / interpolatedTau);
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
+
+/*
+    pYIN - A fundamental frequency estimator for monophonic audio
+    Centre for Digital Music, Queen Mary, University of London.
+    
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License as
+    published by the Free Software Foundation; either version 2 of the
+    License, or (at your option) any later version.  See the file
+    COPYING included with this distribution for more information.
+*/
+
+#include "Yin.h"
+
+#include "vamp-sdk/FFT.h"
+#include "MeanFilter.h"
+#include "YinUtil.h"
+
+#include <vector>
+#include <cstdlib>
+#include <cstdio>
+#include <cmath>
+#include <complex>
+
+using std::vector;
+
+Yin::Yin(size_t frameSize, size_t inputSampleRate, double thresh) : 
+    m_frameSize(frameSize),
+    m_inputSampleRate(inputSampleRate),
+    m_thresh(thresh),
+    m_threshDistr(2),
+    m_yinBufferSize(frameSize/2)
+{
+    if (frameSize & (frameSize-1)) {
+      //  throw "N must be a power of two";
+    }
+}
+
+Yin::~Yin() 
+{
+}
+
+Yin::YinOutput
+Yin::process(const double *in) const {
+    
+    double* yinBuffer = new double[m_yinBufferSize];
+
+    // calculate aperiodicity function for all periods
+    YinUtil::fastDifference(in, yinBuffer, m_yinBufferSize);    
+    YinUtil::cumulativeDifference(yinBuffer, m_yinBufferSize);
+
+    int tau = 0;
+    tau = YinUtil::absoluteThreshold(yinBuffer, m_yinBufferSize, m_thresh);
+        
+    double interpolatedTau;
+    double aperiodicity;
+    double f0;
+    
+    if (tau!=0 && tau!=m_yinBufferSize-1)
+    {
+        interpolatedTau = YinUtil::parabolicInterpolation(yinBuffer, abs(tau), m_yinBufferSize);
+        f0 = m_inputSampleRate * (1.0 / interpolatedTau);
+    } else {
+        interpolatedTau = 0;
+        f0 = 0;
+    }
+    double rms = std::sqrt(YinUtil::sumSquare(in, 0, m_yinBufferSize)/m_yinBufferSize);
+    aperiodicity = yinBuffer[abs(tau)];
+    // std::cerr << aperiodicity << std::endl;
+    if (tau < 0) f0 = -f0;
+
+    Yin::YinOutput yo(f0, 1-aperiodicity, rms);
+    for (size_t iBuf = 0; iBuf < m_yinBufferSize; ++iBuf)
+    {
+        yo.salience.push_back(yinBuffer[iBuf] < 1 ? 1-yinBuffer[iBuf] : 0); // why are the values sometimes < 0 if I don't check?
+    }
+    
+    delete [] yinBuffer;
+    return yo;
+}
+
+Yin::YinOutput
+Yin::processProbabilisticYin(const double *in) const {
+
+    double* yinBuffer = new double[m_yinBufferSize];
+
+    // calculate aperiodicity function for all periods
+    YinUtil::fastDifference(in, yinBuffer, m_yinBufferSize);    
+    YinUtil::cumulativeDifference(yinBuffer, m_yinBufferSize);
+
+    vector<double> peakProbability = YinUtil::yinProb(yinBuffer, m_threshDistr, m_yinBufferSize);
+        
+    // basic yin output
+    Yin::YinOutput yo(0,0,0);
+    for (size_t iBuf = 1; iBuf < m_yinBufferSize-1; ++iBuf)
+    {
+        if (peakProbability[iBuf] > 0)
+        {
+            double currentF0 = 
+                m_inputSampleRate * (1.0 /
+                YinUtil::parabolicInterpolation(yinBuffer, iBuf, m_yinBufferSize));
+            yo.freqProb.push_back(pair<double, double>(currentF0, peakProbability[iBuf]));
+        }
+    }
+    
+    // add salience
+    for (size_t iBuf = 0; iBuf < m_yinBufferSize; ++iBuf) {
+        yo.salience.push_back(peakProbability[iBuf]);
+    }
+
+    // std::cerr << yo.freqProb.size() << std::endl;
+    
+    delete [] yinBuffer;
+    return yo;
+}
+
+
+int
+Yin::setThreshold(double parameter)
+{
+    m_thresh = static_cast<float>(parameter);
+    return 0;
+}
+
+int
+Yin::setThresholdDistr(float parameter)
+{
+    m_threshDistr = static_cast<size_t>(parameter);
+    return 0;
+}
+
+int
+Yin::setFrameSize(size_t parameter)
+{
+    m_frameSize = parameter;
+    m_yinBufferSize = m_frameSize/2;
+    return 0;
+}
+
+// int
+// Yin::setRemoveUnvoiced(bool parameter)
+// {
+//     m_removeUnvoiced = parameter;
+//     return 0;
+// }
+
+float
+Yin::constrainedMinPick(const double *in, const float minFreq, const int maxFreq) const {
+    
+    double* yinBuffer = new double[m_yinBufferSize];
+
+    // calculate aperiodicity function for all periods
+    YinUtil::fastDifference(in, yinBuffer, m_yinBufferSize);    
+    YinUtil::cumulativeDifference(yinBuffer, m_yinBufferSize);
+    
+    int minPeriod = m_inputSampleRate / maxFreq;
+    int maxPeriod = m_inputSampleRate / minFreq;
+    
+    if (minPeriod < 0 || maxPeriod > m_yinBufferSize || minPeriod > maxPeriod) {
+        delete [] yinBuffer;
+        return 0.f;
+    }
+    
+    float bestVal = 1000;
+    int   bestTau = 0;
+    for (int tau = minPeriod; tau <= maxPeriod; ++tau)
+    {
+        if (yinBuffer[tau] < bestVal) 
+        {
+            bestVal = yinBuffer[tau];
+            bestTau = tau;
+        }
+    }
+    
+    float interpolatedTau =
+        YinUtil::parabolicInterpolation(yinBuffer, bestTau, m_yinBufferSize);
+    
+    delete [] yinBuffer;
+    return m_inputSampleRate * (1.0 / interpolatedTau);
 }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/win32-build/pyin.pro	Thu Mar 06 16:48:27 2014 +0000
@@ -0,0 +1,40 @@
+TEMPLATE = lib
+
+INCLUDEPATH += ../../../vamp-plugin-sdk/include ../../../boost_1_54_0
+LIBS += ../../../vamp-plugin-sdk/lib/libvamp-sdk.a -Wl,--version-script=../win32-build/vamp-plugin.map
+
+CONFIG -= qt
+CONFIG += plugin release warn_on
+
+TARGET = pyin
+
+SOURCES += \
+    ../YinUtil.cpp \
+    ../Yin.cpp \
+    ../SparseHMM.cpp \
+    ../MonoPitchHMM.cpp \
+    ../MonoPitch.cpp \
+    ../MonoNoteParameters.cpp \
+    ../MonoNoteHMM.cpp \
+    ../MonoNote.cpp \
+    ../libmain.cpp \
+    ../YinVampFreqConstrained.cpp \
+    ../YinVamp.cpp \
+    ../PYinVamp.cpp \
+    ../LocalCandidatePYIN.cpp
+
+HEADERS += \
+    ../YinUtil.h \
+    ../Yin.h \
+    ../SparseHMM.h \
+    ../MonoPitchHMM.h \
+    ../MonoPitch.h \
+    ../MonoNoteParameters.h \
+    ../MonoNoteHMM.h \
+    ../MonoNote.h \
+    ../MeanFilter.h \
+    ../YinVampFreqConstrained.h \
+    ../YinVamp.h \
+    ../PYinVamp.h \
+    ../LocalCandidatePYIN.h
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/win32-build/vamp-plugin.map	Thu Mar 06 16:48:27 2014 +0000
@@ -0,0 +1,4 @@
+{
+    global: vampGetPluginDescriptor;
+    local: *;
+};