aboutsummaryrefslogtreecommitdiff
path: root/xtract/libxtract.h
diff options
context:
space:
mode:
authorJamie Bullock <jamie@postlude.co.uk>2006-10-02 14:18:15 +0000
committerJamie Bullock <jamie@postlude.co.uk>2006-10-02 14:18:15 +0000
commit6d00829a8ccef20c0ce7eeecc54cd3bb5f94b3bd (patch)
tree60022374029d12df117e549132637968e7dcca43 /xtract/libxtract.h
parent0e94c12896dde9bb525a617ed680c6da82b2ed52 (diff)
downloadLibXtract-6d00829a8ccef20c0ce7eeecc54cd3bb5f94b3bd.tar.gz
LibXtract-6d00829a8ccef20c0ce7eeecc54cd3bb5f94b3bd.tar.bz2
LibXtract-6d00829a8ccef20c0ce7eeecc54cd3bb5f94b3bd.zip
Initial import
Diffstat (limited to 'xtract/libxtract.h')
-rw-r--r--xtract/libxtract.h182
1 files changed, 182 insertions, 0 deletions
diff --git a/xtract/libxtract.h b/xtract/libxtract.h
new file mode 100644
index 0000000..960aa66
--- /dev/null
+++ b/xtract/libxtract.h
@@ -0,0 +1,182 @@
+/* libxtract feature extraction library
+ *
+ * Copyright (C) 2006 Jamie Bullock
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ * USA.
+ */
+
+#ifndef XTRACT_H
+#define XTRACT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \file libxtract.h: main header file and API definition
+ */
+
+#define VERSION "0.1"
+
+
+#include "xtract_scalar.h"
+#include "xtract_vector.h"
+#include "xtract_delta.h"
+#include "xtract_types.h"
+#include "xtract_macros.h"
+
+#define XTRACT_FEATURES 40
+#define LOG_LIMIT 10e-10
+#define SR_LIMIT 192000
+#define BARK_BANDS 26
+
+/** \brief Enumeration of features, elements are used as indixes to an array of pointers to feature extracton functions */
+
+enum features_ {
+ MEAN,
+ VARIANCE,
+ STANDARD_DEVIATION,
+ AVERAGE_DEVIATION,
+ SKEWNESS,
+ KURTOSIS,
+ IRREGULARITY_K,
+ IRREGULARITY_J,
+ TRISTIMULUS_1,
+ TRISTIMULUS_2,
+ TRISTIMULUS_3,
+ SMOOTHNESS,
+ SPREAD,
+ ZCR,
+ ROLLOFF,
+ LOUDNESS,
+ FLATNESS,
+ TONALITY,
+ CREST,
+ NOISINESS,
+ RMS_AMPLITUDE,
+ INHARMONICITY,
+ POWER,
+ ODD_EVEN_RATIO,
+ SHARPNESS,
+ SLOPE,
+ F0,
+ HPS,
+ MAGNITUDE_SPECTRUM,
+ AUTOCORRELATION,
+ AUTOCORRELATION_FFT,
+ AMDF,
+ ASDF,
+ MFCC,
+ DCT,
+ BARK_COEFFICIENTS,
+ PEAKS,
+ FLUX,
+ ATTACK_TIME,
+ DECAY_TIME,
+ DELTA_FEATURE
+};
+
+/** \brief Enumeration of feature types */
+
+enum feature_types_ {
+ SCALAR,
+ VECTOR,
+ DELTA
+};
+
+/** \brief Enumeration of mfcc types */
+
+enum mfcc_types_ {
+ EQUAL_GAIN,
+ EQUAL_AREA
+};
+
+/** \brief Enumeration of return codes */
+
+enum return_codes_ {
+ SUCCESS,
+ MALLOC_FAILED,
+ BAD_ARGV,
+ BAD_VECTOR_SIZE
+};
+
+/**
+ *
+ * \brief Perform feature extraction
+ *
+ * \param
+ *
+ * In general functions in this library conform to the following prototpe:
+ *
+ * int xtract_featurename(float *data, int N, void *argv, float *result)
+ *
+ *
+ * float *data: a pointer to an array element
+ *
+ * int N: the number of elements to be processed by the function
+ *
+ * void *argv: an abitrary number of additional arguments
+ *
+ * float *result: a pointer to the result
+ *
+ *
+ * Each function will iterate over N array elements, the first of which is
+ * pointed to by *data. It is therefore up to the caller to ensure that an
+ * approriate range of data is provided. For example, if the function expects
+ * an array containing an harmonic spectrum, then they array pointed to by
+ * *data must contain the amplitudes of harmonic frequencies in adjacent
+ * elemets
+ *
+ * For scalar and delta features, *result will point to a single value.
+ *
+ * For vector features it will point to the first element in an array.
+ *
+ * Memory for this array must be allocated and freed by the calling
+ * function.
+ *
+ * All functions return an integer error code as descibed in the enumeration
+ * return_codes_
+ *
+ * */
+
+
+int(*xtract[XTRACT_FEATURES])(float *, int, void *, float *);
+
+/* Data structures */
+
+typedef struct xtract_mel_filter_ {
+ int n_filters;
+ float **filters;
+} xtract_mel_filter;
+
+
+/* Initialisation functions */
+/* xtract_init_mfcc */
+/* It is up to the caller to pass in a pointer to memory allocated for freq_bands arrays of length N. This function populates these arrays with magnitude coefficients representing the mel filterbank on a linear scale */
+int xtract_init_mfcc(int N, float nyquist, int style, float freq_max, float freq_min, int freq_bands, float **fft_tables);
+
+/* xtract_init_bark */
+/* A pointer to an array of BARK_BANDS ints most be passed in, and is populated with BARK_BANDS fft bin numbers representing the limits of each band */
+int xtract_init_bark(int N, float nyquist, int *band_limits);
+
+
+/* Free functions */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif