Implement reset functions (fixes #498)
authorChris Cannam <cannam@all-day-breakfast.com>
Wed, 11 Jul 2012 12:09:15 +0000 (13:09 +0100)
committerChris Cannam <cannam@all-day-breakfast.com>
Wed, 11 Jul 2012 12:09:15 +0000 (13:09 +0100)
plugins/Notes.cpp
plugins/Onset.cpp
plugins/Pitch.cpp
plugins/Tempo.cpp

index e2cbfe5..c8688cd 100644 (file)
@@ -105,10 +105,21 @@ Notes::initialise(size_t channels, size_t stepSize, size_t blockSize)
     m_onset = new_fvec(1);
     m_pitch = new_fvec(1);
 
+    reset();
+
+    return true;
+}
+
+void
+Notes::reset()
+{
+    if (m_onsetdet) del_aubio_onset(m_onsetdet);
+    if (m_pitchdet) del_aubio_pitch(m_pitchdet);
+
     m_onsetdet = new_aubio_onset
         (const_cast<char *>(getAubioNameForOnsetType(m_onsettype)),
-         blockSize,
-         stepSize,
+         m_blockSize,
+         m_stepSize,
          lrintf(m_inputSampleRate));
     
     aubio_onset_set_threshold(m_onsetdet, m_threshold);
@@ -117,8 +128,8 @@ Notes::initialise(size_t channels, size_t stepSize, size_t blockSize)
 
     m_pitchdet = new_aubio_pitch
         (const_cast<char *>(getAubioNameForPitchType(m_pitchtype)),
-         blockSize,
-         stepSize,
+         m_blockSize,
+         m_stepSize,
          lrintf(m_inputSampleRate));
 
     aubio_pitch_set_unit(m_pitchdet, const_cast<char *>("freq"));
@@ -129,13 +140,6 @@ Notes::initialise(size_t channels, size_t stepSize, size_t blockSize)
     m_currentOnset = Vamp::RealTime::zeroTime;
     m_haveCurrent = false;
     m_prevPitch = -1;
-
-    return true;
-}
-
-void
-Notes::reset()
-{
 }
 
 size_t
index 8d91587..4494b07 100644 (file)
@@ -91,27 +91,30 @@ Onset::initialise(size_t channels, size_t stepSize, size_t blockSize)
     m_ibuf = new_fvec(stepSize);
     m_onset = new_fvec(1);
 
+    reset();
+
+    return true;
+}
+
+void
+Onset::reset()
+{
+    if (m_onsetdet) del_aubio_onset(m_onsetdet);
+
     m_onsetdet = new_aubio_onset
         (const_cast<char *>(getAubioNameForOnsetType(m_onsettype)),
-         blockSize,
-         stepSize,
+         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 * stepSize,
+    m_delay = Vamp::RealTime::frame2RealTime(4 * m_stepSize,
                                              lrintf(m_inputSampleRate));
 
     m_lastOnset = Vamp::RealTime::zeroTime - m_delay - m_delay;
-
-    return true;
-}
-
-void
-Onset::reset()
-{
 }
 
 size_t
index 95022fa..5fd3730 100644 (file)
@@ -100,13 +100,7 @@ Pitch::initialise(size_t channels, size_t stepSize, size_t blockSize)
     m_ibuf = new_fvec(stepSize);
     m_obuf = new_fvec(1);
 
-    m_pitchdet = new_aubio_pitch
-        (const_cast<char *>(getAubioNameForPitchType(m_pitchtype)),
-         blockSize,
-         stepSize,
-         lrintf(m_inputSampleRate));
-
-    aubio_pitch_set_unit(m_pitchdet, const_cast<char *>("freq"));
+    reset();
 
     return true;
 }
@@ -114,6 +108,15 @@ Pitch::initialise(size_t channels, size_t stepSize, size_t blockSize)
 void
 Pitch::reset()
 {
+    if (m_pitchdet) del_aubio_pitch(m_pitchdet);
+
+    m_pitchdet = new_aubio_pitch
+        (const_cast<char *>(getAubioNameForPitchType(m_pitchtype)),
+         m_blockSize,
+         m_stepSize,
+         lrintf(m_inputSampleRate));
+
+    aubio_pitch_set_unit(m_pitchdet, const_cast<char *>("freq"));
 }
 
 size_t
index 82c38f8..ac106c3 100644 (file)
@@ -94,23 +94,26 @@ Tempo::initialise(size_t channels, size_t stepSize, size_t blockSize)
     m_delay = Vamp::RealTime::frame2RealTime(3 * stepSize,
                                              lrintf(m_inputSampleRate));
 
+    reset();
+
+    return true;
+}
+
+void
+Tempo::reset()
+{
+    if (m_tempo) del_aubio_tempo(m_tempo);
+
     m_lastBeat = Vamp::RealTime::zeroTime - m_delay - m_delay;
 
     m_tempo = new_aubio_tempo
         (const_cast<char *>(getAubioNameForOnsetType(m_onsettype)),
-         blockSize,
-         stepSize,
+         m_blockSize,
+         m_stepSize,
          lrintf(m_inputSampleRate));
 
     aubio_tempo_set_silence(m_tempo, m_silence);
     aubio_tempo_set_threshold(m_tempo, m_threshold);
-
-    return true;
-}
-
-void
-Tempo::reset()
-{
 }
 
 size_t