summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Glover <j@johnglover.net>2012-09-24 11:18:09 +0200
committerJohn Glover <j@johnglover.net>2012-09-24 11:18:09 +0200
commit9f6de8863954715f930f937568ed274ee66d33db (patch)
treebc28f38b8cea6aa9eb71c3d7701364734eab0ef0 /src
parent97ab533101618c84ae12806736e633261f241807 (diff)
downloadsimpl-9f6de8863954715f930f937568ed274ee66d33db.tar.gz
simpl-9f6de8863954715f930f937568ed274ee66d33db.tar.bz2
simpl-9f6de8863954715f930f937568ed274ee66d33db.zip
[partial_tracking] Default to inharmonic partial
tracking mode in SMSPartialTracking. Add methods to SMSPartialTracking to allow realtime mode and harmonic mode to be switched on/off.
Diffstat (limited to 'src')
-rw-r--r--src/simpl/partial_tracking.cpp40
-rw-r--r--src/simpl/partial_tracking.h5
2 files changed, 44 insertions, 1 deletions
diff --git a/src/simpl/partial_tracking.cpp b/src/simpl/partial_tracking.cpp
index 99a8f34..5bb08b3 100644
--- a/src/simpl/partial_tracking.cpp
+++ b/src/simpl/partial_tracking.cpp
@@ -92,11 +92,12 @@ SMSPartialTracking::SMSPartialTracking() {
_analysis_params.analDelay = 0;
_analysis_params.minGoodFrames = 1;
_analysis_params.iCleanTracks = 0;
- _analysis_params.iFormat = SMS_FORMAT_HP;
+ _analysis_params.iFormat = SMS_FORMAT_IHP;
_analysis_params.nTracks = _max_partials;
_analysis_params.maxPeaks = _max_partials;
_analysis_params.nGuides = _max_partials;
_analysis_params.preEmphasis = 0;
+ _analysis_params.realtime = 0;
sms_initAnalysis(&_analysis_params);
sms_fillHeader(&_header, &_analysis_params);
@@ -159,11 +160,48 @@ void SMSPartialTracking::max_partials(int new_max_partials) {
init_peaks();
}
+bool SMSPartialTracking::realtime() {
+ return _analysis_params.realtime == 1;
+}
+
+void SMSPartialTracking::realtime(bool is_realtime) {
+ if(is_realtime) {
+ _analysis_params.realtime = 1;
+ }
+ else {
+ _analysis_params.realtime = 0;
+ }
+}
+
+bool SMSPartialTracking::harmonic() {
+ return _analysis_params.iFormat == SMS_FORMAT_HP;
+}
+
+void SMSPartialTracking::harmonic(bool is_harmonic) {
+ sms_freeAnalysis(&_analysis_params);
+ sms_freeFrame(&_data);
+
+ if(is_harmonic) {
+ _analysis_params.iFormat = SMS_FORMAT_HP;
+ }
+ else {
+ _analysis_params.iFormat = SMS_FORMAT_IHP;
+ }
+
+ sms_initAnalysis(&_analysis_params);
+ sms_fillHeader(&_header, &_analysis_params);
+ sms_allocFrameH(&_header, &_data);
+}
+
+void SMSPartialTracking::reset() {
+}
+
Peaks SMSPartialTracking::update_partials(Frame* frame) {
int num_peaks = _max_partials;
if(num_peaks > frame->num_peaks()) {
num_peaks = frame->num_peaks();
}
+ frame->clear_partials();
// set peaks in SMSAnalysisParams object
for(int i = 0; i < num_peaks; i++) {
diff --git a/src/simpl/partial_tracking.h b/src/simpl/partial_tracking.h
index 4f8d60e..324c348 100644
--- a/src/simpl/partial_tracking.h
+++ b/src/simpl/partial_tracking.h
@@ -78,6 +78,11 @@ class SMSPartialTracking : public PartialTracking {
SMSPartialTracking();
~SMSPartialTracking();
void max_partials(int new_max_partials);
+ bool realtime();
+ void realtime(bool is_realtime);
+ bool harmonic();
+ void harmonic(bool is_harmonic);
+ void reset();
Peaks update_partials(Frame* frame);
};