diff options
author | Alexey Dokuchaev <danfe@FreeBSD.org> | 2015-07-21 01:52:25 +0000 |
---|---|---|
committer | Alexey Dokuchaev <danfe@FreeBSD.org> | 2015-07-21 01:52:25 +0000 |
commit | 4aae9d776561d9eb981a3250b9bdd29dd179aadc (patch) | |
tree | 4fba728ceb6c0455da291112a5c0ce189be723ce /audio/ardour | |
parent | Add 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/Makefile | 5 | ||||
-rw-r--r-- | audio/ardour/files/patch-aubio4 | 340 |
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 |