diff options
Diffstat (limited to 'rhythm_ioi_histogram.h')
-rw-r--r-- | rhythm_ioi_histogram.h | 108 |
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 */ |