summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-05-25 17:52:50 +0200
committerRobin Gareus <robin@gareus.org>2016-05-25 17:52:50 +0200
commit6c502b8315bec6540e7ab94e2821e328b1f5af30 (patch)
treef5aa9923a11a5d87399239449ba3b113da497b1a /libs
parent5550eebe2fde5c46a5e67613899699713a92e3c8 (diff)
allow to configure transient detection sensitivity
NB. this does not yet re-analyze regions when the config changes and is hence also not [yet] exposed in the GUI.
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/analyser.cc2
-rw-r--r--libs/ardour/ardour/rc_configuration_vars.h1
-rw-r--r--libs/ardour/ardour/transient_detector.h5
-rw-r--r--libs/ardour/transient_detector.cc10
4 files changed, 11 insertions, 7 deletions
diff --git a/libs/ardour/analyser.cc b/libs/ardour/analyser.cc
index 58a8f30245..a603e29b23 100644
--- a/libs/ardour/analyser.cc
+++ b/libs/ardour/analyser.cc
@@ -19,6 +19,7 @@
#include "ardour/analyser.h"
#include "ardour/audiofilesource.h"
+#include "ardour/rc_configuration.h"
#include "ardour/session_event.h"
#include "ardour/transient_detector.h"
@@ -110,6 +111,7 @@ Analyser::analyse_audio_file_source (boost::shared_ptr<AudioFileSource> src)
try {
TransientDetector td (src->sample_rate());
+ td.set_sensitivity (3, Config->get_transient_sensitivity()); // "General purpose"
if (td.run (src->get_transients_path(), src.get(), 0, results) == 0) {
src->set_been_analysed (true);
} else {
diff --git a/libs/ardour/ardour/rc_configuration_vars.h b/libs/ardour/ardour/rc_configuration_vars.h
index 4bd89e2514..e895d5773e 100644
--- a/libs/ardour/ardour/rc_configuration_vars.h
+++ b/libs/ardour/ardour/rc_configuration_vars.h
@@ -98,6 +98,7 @@ CONFIG_VARIABLE (float, audio_playback_buffer_seconds, "playback-buffer-seconds"
CONFIG_VARIABLE (float, midi_track_buffer_seconds, "midi-track-buffer-seconds", 1.0)
CONFIG_VARIABLE (uint32_t, disk_choice_space_threshold, "disk-choice-space-threshold", 57600000)
CONFIG_VARIABLE (bool, auto_analyse_audio, "auto-analyse-audio", false)
+CONFIG_VARIABLE (float, transient_sensitivity, "transient-sensitivity", 50)
/* OSC */
diff --git a/libs/ardour/ardour/transient_detector.h b/libs/ardour/ardour/transient_detector.h
index 0e07c5851a..d29e12463f 100644
--- a/libs/ardour/ardour/transient_detector.h
+++ b/libs/ardour/ardour/transient_detector.h
@@ -37,10 +37,7 @@ public:
static std::string operational_identifier();
void set_threshold (float);
- void set_sensitivity (float);
-
- float get_threshold () const;
- float get_sensitivity () const;
+ void set_sensitivity (uint32_t, float);
int run (const std::string& path, Readable*, uint32_t channel, AnalysisFeatureList& results);
void update_positions (Readable* src, uint32_t channel, AnalysisFeatureList& results);
diff --git a/libs/ardour/transient_detector.cc b/libs/ardour/transient_detector.cc
index 15b2a4ce08..31b5ab6a8b 100644
--- a/libs/ardour/transient_detector.cc
+++ b/libs/ardour/transient_detector.cc
@@ -86,11 +86,15 @@ TransientDetector::set_threshold (float val)
}
void
-TransientDetector::set_sensitivity (float val)
+TransientDetector::set_sensitivity (uint32_t mode, float val)
{
if (plugin) {
- plugin->selectProgram ("Percussive onsets");
- plugin->setParameter ("sensitivity", val);
+ // see libs/vamp-plugins/OnsetDetect.cpp
+ //plugin->selectProgram ("General purpose"); // dftype = 3, sensitivity = 50, whiten = 0 (default)
+ //plugin->selectProgram ("Percussive onsets"); // dftype = 4, sensitivity = 40, whiten = 0
+ plugin->setParameter ("dftype", mode);
+ plugin->setParameter ("sensitivity", std::min (100.f, std::max (0.f, val)));
+ plugin->setParameter ("whiten", 0);
}
}