summaryrefslogtreecommitdiff
path: root/audio/ardour
diff options
context:
space:
mode:
authorAlexey Dokuchaev <danfe@FreeBSD.org>2015-07-21 01:52:25 +0000
committerAlexey Dokuchaev <danfe@FreeBSD.org>2015-07-21 01:52:25 +0000
commit4aae9d776561d9eb981a3250b9bdd29dd179aadc (patch)
tree4fba728ceb6c0455da291112a5c0ce189be723ce /audio/ardour
parentAdd elixir-kafka_ex, Apache Kafka client for elixir. (diff)
- Update `audio/aubio' to version 0.4.1; make all dependencies/features
optional; provide a way to disable Doxygen even when it was found in the system - License was changed to GPLv3; do not install LICENSE_FILE since it is merely a boilerplate with no actual copyright data - `audio/ardour' needs to be patched for API changes in aubio 0.4. The patch comes from upstream, but new aubio version detection logic is not directly applicable, so simply define HAVE_AUBIO4 in the port's Makefile - While here, ensure that `audio/ardour' gets all of its dependencies, (ir)regardless of particular OPTIONS selected (or not selected) for the `audio/aubio' port - Bump port revisions of `audio/ardour' and `audio/denemo', the only two libaubio consumers in the tree PR: 200556 (slightly modified)
Notes
Notes: svn path=/head/; revision=392608
Diffstat (limited to 'audio/ardour')
-rw-r--r--audio/ardour/Makefile5
-rw-r--r--audio/ardour/files/patch-aubio4340
2 files changed, 344 insertions, 1 deletions
diff --git a/audio/ardour/Makefile b/audio/ardour/Makefile
index 9808d043db49..be44695a748d 100644
--- a/audio/ardour/Makefile
+++ b/audio/ardour/Makefile
@@ -3,6 +3,7 @@
PORTNAME= ardour
PORTVERSION= 2.8.16
+PORTREVISION= 1
CATEGORIES= audio
MASTER_SITES= http://freebsd.nsu.ru/distfiles/
@@ -14,14 +15,16 @@ LICENSE_FILE= ${WRKSRC}/COPYING
LIB_DEPENDS= liblo.so:${PORTSDIR}/audio/liblo \
liblrdf.so:${PORTSDIR}/textproc/liblrdf \
+ libjack.so:${PORTSDIR}/audio/jack \
libaubio.so:${PORTSDIR}/audio/aubio \
libfftw3.so:${PORTSDIR}/math/fftw3 \
+ libfftw3f.so:${PORTSDIR}/math/fftw3-float \
libboost_date_time.so:${PORTSDIR}/devel/boost-libs \
libgnomecanvasmm-2.6.so:${PORTSDIR}/graphics/libgnomecanvasmm26
USES= cpe gettext scons pkgconfig tar:bzip2
MAKE_ARGS+= SYSLIBS=yes PREFIX=${PREFIX} NLS=yes
-CFLAGS+= -I${LOCALBASE}/include
+CFLAGS+= -I${LOCALBASE}/include -DHAVE_AUBIO4
USE_GNOME= libxslt
USE_LDCONFIG= ${PREFIX}/lib/ardour2 ${PREFIX}/lib/ardour2/surfaces
diff --git a/audio/ardour/files/patch-aubio4 b/audio/ardour/files/patch-aubio4
new file mode 100644
index 000000000000..b3b670d1546b
--- /dev/null
+++ b/audio/ardour/files/patch-aubio4
@@ -0,0 +1,340 @@
+commit 1eaa30b7257f006878c9b2c88ecbaea5bc36b174
+Author: Robin Gareus <robin@gareus.org>
+Date: Sun Jan 12 18:11:14 2014 +0100
+
+ aubio 3+4 compat
+
+diff --git libs/vamp-plugins/Onset.cpp libs/vamp-plugins/Onset.cpp
+index d475b11..196ca29 100644
+--- libs/vamp-plugins/Onset.cpp
++++ libs/vamp-plugins/Onset.cpp
+@@ -22,29 +22,51 @@ using std::vector;
+ using std::cerr;
+ using std::endl;
+
++#ifdef HAVE_AUBIO4
++const char *getAubioNameForOnsetType(OnsetType t)
++{
++ // In the same order as the enum elements in the header
++ static const char *const names[] = {
++ "energy", "specdiff", "hfc", "complex", "phase", "kl", "mkl", "specflux"
++ };
++ return names[(int)t];
++}
++#endif
++
+ Onset::Onset(float inputSampleRate) :
+ Plugin(inputSampleRate),
+ m_ibuf(0),
+- m_fftgrain(0),
+ m_onset(0),
++#ifdef HAVE_AUBIO4
++ m_onsetdet(0),
++ m_onsettype(OnsetComplex),
++ m_minioi(4),
++ m_silence(-70),
++#else
++ m_fftgrain(0),
+ m_pv(0),
+ m_peakpick(0),
+ m_onsetdet(0),
+ m_onsettype(aubio_onset_complex),
+- m_threshold(0.3),
++ m_channelCount(1),
+ m_silence(-90),
+- m_channelCount(1)
++#endif
++ m_threshold(0.3)
+ {
+ }
+
+ Onset::~Onset()
+ {
++#ifdef HAVE_AUBIO4
++ if (m_onsetdet) del_aubio_onset(m_onsetdet);
++#else
+ if (m_onsetdet) aubio_onsetdetection_free(m_onsetdet);
+- if (m_ibuf) del_fvec(m_ibuf);
+- if (m_onset) del_fvec(m_onset);
+ if (m_fftgrain) del_cvec(m_fftgrain);
+ if (m_pv) del_aubio_pvoc(m_pv);
+ if (m_peakpick) del_aubio_peakpicker(m_peakpick);
++#endif
++ if (m_ibuf) del_fvec(m_ibuf);
++ if (m_onset) del_fvec(m_onset);
+ }
+
+ string
+@@ -74,7 +96,11 @@ Onset::getMaker() const
+ int
+ Onset::getPluginVersion() const
+ {
++#ifdef HAVE_AUBIO4
++ return 2;
++#else
+ return 1;
++#endif
+ }
+
+ string
+@@ -86,10 +112,20 @@ Onset::getCopyright() const
+ bool
+ Onset::initialise(size_t channels, size_t stepSize, size_t blockSize)
+ {
+- m_channelCount = channels;
+ m_stepSize = stepSize;
+ m_blockSize = blockSize;
+
++#ifdef HAVE_AUBIO4
++ if (channels != 1) {
++ std::cerr << "Onset::initialise: channels must be 1" << std::endl;
++ return false;
++ }
++ m_ibuf = new_fvec(stepSize);
++ m_onset = new_fvec(1);
++ reset();
++#else
++ m_channelCount = channels;
++
+ m_ibuf = new_fvec(stepSize, channels);
+ m_onset = new_fvec(1, channels);
+ m_fftgrain = new_cvec(blockSize, channels);
+@@ -103,13 +139,32 @@ Onset::initialise(size_t channels, size_t stepSize, size_t blockSize)
+
+ m_lastOnset = Vamp::RealTime::zeroTime - m_delay - m_delay;
+
++#endif
+ return true;
+ }
+
++#ifdef HAVE_AUBIO4
+ void
+ Onset::reset()
+ {
++ if (m_onsetdet) del_aubio_onset(m_onsetdet);
++
++ m_onsetdet = new_aubio_onset
++ (const_cast<char *>(getAubioNameForOnsetType(m_onsettype)),
++ m_blockSize,
++ m_stepSize,
++ lrintf(m_inputSampleRate));
++
++ aubio_onset_set_threshold(m_onsetdet, m_threshold);
++ aubio_onset_set_silence(m_onsetdet, m_silence);
++ aubio_onset_set_minioi(m_onsetdet, m_minioi);
++
++ m_delay = Vamp::RealTime::frame2RealTime(4 * m_stepSize,
++ lrintf(m_inputSampleRate));
++
++ m_lastOnset = Vamp::RealTime::zeroTime - m_delay - m_delay;
+ }
++#endif
+
+ size_t
+ Onset::getPreferredStepSize() const
+@@ -132,8 +187,13 @@ Onset::getParameterDescriptors() const
+ desc.identifier = "onsettype";
+ desc.name = "Onset Detection Function Type";
+ desc.minValue = 0;
++#ifdef HAVE_AUBIO4
++ desc.maxValue = 7;
++ desc.defaultValue = (int)OnsetComplex;
++#else
+ desc.maxValue = 6;
+ desc.defaultValue = (int)aubio_onset_complex;
++#endif
+ desc.isQuantized = true;
+ desc.quantizeStep = 1;
+ desc.valueNames.push_back("Energy Based");
+@@ -143,6 +203,9 @@ Onset::getParameterDescriptors() const
+ desc.valueNames.push_back("Phase Deviation");
+ desc.valueNames.push_back("Kullback-Liebler");
+ desc.valueNames.push_back("Modified Kullback-Liebler");
++#ifdef HAVE_AUBIO4
++ desc.valueNames.push_back("Spectral Flux");
++#endif
+ list.push_back(desc);
+
+ desc = ParameterDescriptor();
+@@ -159,11 +222,27 @@ Onset::getParameterDescriptors() const
+ desc.name = "Silence Threshold";
+ desc.minValue = -120;
+ desc.maxValue = 0;
++#ifdef HAVE_AUBIO4
++ desc.defaultValue = -70;
++#else
+ desc.defaultValue = -90;
++#endif
+ desc.unit = "dB";
+ desc.isQuantized = false;
+ list.push_back(desc);
+
++#ifdef HAVE_AUBIO4
++ desc = ParameterDescriptor();
++ desc.identifier = "minioi";
++ desc.name = "Minimum Inter-Onset Interval";
++ desc.minValue = 0;
++ desc.maxValue = 40;
++ desc.defaultValue = 4;
++ desc.unit = "ms";
++ desc.isQuantized = true;
++ desc.quantizeStep = 1;
++ list.push_back(desc);
++#endif
+ return list;
+ }
+
+@@ -176,6 +255,10 @@ Onset::getParameter(std::string param) const
+ return m_threshold;
+ } else if (param == "silencethreshold") {
+ return m_silence;
++#ifdef HAVE_AUBIO4
++ } else if (param == "minioi") {
++ return m_minioi;
++#endif
+ } else {
+ return 0.0;
+ }
+@@ -186,6 +269,16 @@ Onset::setParameter(std::string param, float value)
+ {
+ if (param == "onsettype") {
+ switch (lrintf(value)) {
++#ifdef HAVE_AUBIO4
++ case 0: m_onsettype = OnsetEnergy; break;
++ case 1: m_onsettype = OnsetSpecDiff; break;
++ case 2: m_onsettype = OnsetHFC; break;
++ case 3: m_onsettype = OnsetComplex; break;
++ case 4: m_onsettype = OnsetPhase; break;
++ case 5: m_onsettype = OnsetKL; break;
++ case 6: m_onsettype = OnsetMKL; break;
++ case 7: m_onsettype = OnsetSpecFlux; break;
++#else
+ case 0: m_onsettype = aubio_onset_energy; break;
+ case 1: m_onsettype = aubio_onset_specdiff; break;
+ case 2: m_onsettype = aubio_onset_hfc; break;
+@@ -193,11 +286,16 @@ Onset::setParameter(std::string param, float value)
+ case 4: m_onsettype = aubio_onset_phase; break;
+ case 5: m_onsettype = aubio_onset_kl; break;
+ case 6: m_onsettype = aubio_onset_mkl; break;
++#endif
+ }
+ } else if (param == "peakpickthreshold") {
+ m_threshold = value;
+ } else if (param == "silencethreshold") {
+ m_silence = value;
++#ifdef HAVE_AUBIO4
++ } else if (param == "minioi") {
++ m_minioi = value;
++#endif
+ }
+ }
+
+@@ -216,6 +314,7 @@ Onset::getOutputDescriptors() const
+ d.sampleRate = 0;
+ list.push_back(d);
+
++#ifndef HAVE_AUBIO4
+ d = OutputDescriptor();
+ d.identifier = "detectionfunction";
+ d.name = "Onset Detection Function";
+@@ -226,7 +325,7 @@ Onset::getOutputDescriptors() const
+ d.isQuantized = false;
+ d.sampleType = OutputDescriptor::OneSamplePerStep;
+ list.push_back(d);
+-
++#endif
+ return list;
+ }
+
+@@ -234,6 +333,15 @@ Onset::FeatureSet
+ Onset::process(const float *const *inputBuffers,
+ Vamp::RealTime timestamp)
+ {
++#ifdef HAVE_AUBIO4
++ for (size_t i = 0; i < m_stepSize; ++i) {
++ fvec_set_sample(m_ibuf, inputBuffers[0][i], i);
++ }
++
++ aubio_onset_do(m_onsetdet, m_ibuf, m_onset);
++
++ bool isonset = m_onset->data[0];
++#else
+ for (size_t i = 0; i < m_stepSize; ++i) {
+ for (size_t j = 0; j < m_channelCount; ++j) {
+ fvec_write_sample(m_ibuf, inputBuffers[j][i], j, i);
+@@ -250,6 +358,7 @@ Onset::process(const float *const *inputBuffers,
+ isonset = false;
+ }
+ }
++#endif
+
+ FeatureSet returnFeatures;
+
+@@ -263,11 +372,13 @@ Onset::process(const float *const *inputBuffers,
+ m_lastOnset = timestamp;
+ }
+ }
++#ifndef HAVE_AUBIO4
+ Feature feature;
+ for (size_t j = 0; j < m_channelCount; ++j) {
+ feature.values.push_back(m_onset->data[j][0]);
+ }
+ returnFeatures[1].push_back(feature);
++#endif
+
+ return returnFeatures;
+ }
+diff --git libs/vamp-plugins/Onset.h libs/vamp-plugins/Onset.h
+index 314e107..bba95e0 100644
+--- libs/vamp-plugins/Onset.h
++++ libs/vamp-plugins/Onset.h
+@@ -20,6 +20,19 @@
+ #include <vamp-sdk/Plugin.h>
+ #include <aubio/aubio.h>
+
++#ifdef HAVE_AUBIO4
++enum OnsetType {
++ OnsetEnergy,
++ OnsetSpecDiff,
++ OnsetHFC,
++ OnsetComplex,
++ OnsetPhase,
++ OnsetKL,
++ OnsetMKL,
++ OnsetSpecFlux // new in 0.4!
++};
++#endif
++
+ class Onset : public Vamp::Plugin
+ {
+ public:
+@@ -54,20 +67,25 @@ public:
+
+ protected:
+ fvec_t *m_ibuf;
+- cvec_t *m_fftgrain;
+ fvec_t *m_onset;
++#ifdef HAVE_AUBIO4
++ aubio_onset_t *m_onsetdet;
++ OnsetType m_onsettype;
++ float m_minioi;
++#else
++ cvec_t *m_fftgrain;
+ aubio_pvoc_t *m_pv;
+ aubio_pickpeak_t *m_peakpick;
+ aubio_onsetdetection_t *m_onsetdet;
+ aubio_onsetdetection_type m_onsettype;
+- float m_threshold;
++ size_t m_channelCount;
++#endif
+ float m_silence;
++ float m_threshold;
+ size_t m_stepSize;
+ size_t m_blockSize;
+- size_t m_channelCount;
+ Vamp::RealTime m_delay;
+ Vamp::RealTime m_lastOnset;
+ };
+
+-
+ #endif