aboutsummaryrefslogtreecommitdiff
path: root/rhythm_ioi_histogram.h
diff options
context:
space:
mode:
Diffstat (limited to 'rhythm_ioi_histogram.h')
-rw-r--r--rhythm_ioi_histogram.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/rhythm_ioi_histogram.h b/rhythm_ioi_histogram.h
new file mode 100644
index 0000000..a6d1c98
--- /dev/null
+++ b/rhythm_ioi_histogram.h
@@ -0,0 +1,108 @@
+/* Rhythm estimation in real time
+ Copyright (C) 2000 Jarno Seppänen and Piotr Majdak
+ $Id: rhythm_ioi_histogram.h,v 1.1 2002-11-19 11:39:55 ggeiger Exp $
+
+ This file is part of rhythm_estimator.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#ifndef __RHYTHM_IOI_HISTOGRAM_H__
+#define __RHYTHM_IOI_HISTOGRAM_H__
+
+/* Global header for Rhythm Estimator */
+#include "rhythm_estimator.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* Local Parameter default values */
+#define RHYTHM_IOI_HISTOGRAM_DEFAULT_HIST_HALF_LIFE 1300 /* ms */
+#define RHYTHM_IOI_HISTOGRAM_DEFAULT_HIST_CYCLES 4
+
+#define RHYTHM_IOI_HISTOGRAM_HIST_HALF_LIFE_MIN 10 /*ms*/
+#define RHYTHM_IOI_HISTOGRAM_HIST_CYCLES_MIN 1
+
+#define RHYTHM_IOI_HISTOGRAM_HIST_HALF_LIFE_MAX 10000 /* ms*/
+#define RHYTHM_IOI_HISTOGRAM_HIST_CYCLES_MAX 16
+
+
+
+
+#define RHYTHM_IOI_HISTOGRAM_IOI_FIFO_LENGTH 500 /* onsets */
+
+typedef struct
+{
+ /* User-changeable parameters: */
+ float ioi_resolution; /* ms */
+ float min_quantum; /* ms */
+ float max_quantum; /* ms */
+ float hist_cycles;
+ float hist_half_life; /* ms */
+
+
+ /* --- Private data --- */
+
+ /* Internal "helper" variables */
+ unsigned hist_length;
+ float hist_new_coef; /* Coefficient for histogram update */
+
+ /* Onsets are stored in the following FIFO */
+ float* fifo_buffer; /* FIFO address */
+ unsigned fifo_num_onsets; /* number of onsets contained in FIFO */
+ unsigned fifo_length; /* FIFO length, i.e. maximum num_onsets */
+ unsigned fifo_current_index; /* Ringbuffer read/write index;
+ points to the oldest value */
+
+ /* IOI histograms are stored in the following buffers */
+ float* fill_ioi_histogram; /* Buffer length is given with hist_length */
+ float* main_ioi_histogram; /* Buffer length is given with hist_length */
+ int fill_histogram_changed;
+ double main_histogram_update_time;
+
+} Rhythm_Ioi_Histogram;
+
+
+Rhythm_Ioi_Histogram* rhythm_ioi_histogram_new (void);
+void rhythm_ioi_histogram_delete (Rhythm_Ioi_Histogram* rhythm_ioi_histogram);
+
+void rhythm_ioi_histogram_initialize (Rhythm_Ioi_Histogram* rhythm_ioi_histogram);
+void rhythm_ioi_histogram_finish (Rhythm_Ioi_Histogram* rhythm_ioi_histogram);
+
+int rhythm_ioi_histogram_onset_event (Rhythm_Ioi_Histogram* rhythm_ioi_histogram, double time);
+void rhythm_ioi_histogram_periodic_event (Rhythm_Ioi_Histogram* rhythm_ioi_histogram, double time);
+
+float rhythm_ioi_histogram_get_ioi_resolution (Rhythm_Ioi_Histogram* rhythm_ioi_histogram);
+float rhythm_ioi_histogram_get_min_quantum (Rhythm_Ioi_Histogram* rhythm_ioi_histogram);
+float rhythm_ioi_histogram_get_max_quantum (Rhythm_Ioi_Histogram* rhythm_ioi_histogram);
+float rhythm_ioi_histogram_get_hist_cycles (Rhythm_Ioi_Histogram* rhythm_ioi_histogram);
+float rhythm_ioi_histogram_get_hist_half_life (Rhythm_Ioi_Histogram* rhythm_ioi_histogram);
+float rhythm_ioi_histogram_get_phase_adap_speed (Rhythm_Ioi_Histogram* rhythm_ioi_histogram);
+void rhythm_ioi_histogram_set_ioi_resolution (Rhythm_Ioi_Histogram* rhythm_ioi_histogram, float v);
+void rhythm_ioi_histogram_set_min_quantum (Rhythm_Ioi_Histogram* rhythm_ioi_histogram, float v);
+void rhythm_ioi_histogram_set_max_quantum (Rhythm_Ioi_Histogram* rhythm_ioi_histogram, float v);
+void rhythm_ioi_histogram_set_hist_cycles (Rhythm_Ioi_Histogram* rhythm_ioi_histogram, float v);
+void rhythm_ioi_histogram_set_hist_half_life (Rhythm_Ioi_Histogram* rhythm_ioi_histogram, float v);
+void rhythm_ioi_histogram_set_phase_adap_speed (Rhythm_Ioi_Histogram* rhythm_ioi_histogram, float v);
+
+ /* Subroutines */
+static void rhythm_ioi_histogram_update_ioi_histogram (Rhythm_Ioi_Histogram* ge, double time_passed);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __RHYTHM_IOI_HISTOGRAM_H__ */
+/* EOF */