Changeset fdf39ba for src


Ignore:
Timestamp:
Sep 7, 2007, 10:49:45 AM (17 years ago)
Author:
Amaury Hazan <mahmoudax@gmail.com>
Branches:
feature/autosink, feature/cnn, feature/cnn_org, feature/constantq, feature/crepe, feature/crepe_org, feature/pitchshift, feature/pydocstrings, feature/timestretch, fix/ffmpeg5, master, pitchshift, sampler, timestretch, yinfft+
Children:
8708556
Parents:
97886fa (diff), 7c6c806d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

merged from mtg

Location:
src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • src/Makefile.am

    r97886fa rfdf39ba  
    2222        onset.h \
    2323        tempo.h \
    24         filter.h
     24        filter.h \
     25        mfcc.h
    2526
    2627nodist_pkginclude_HEADERS = config.h
     
    7172        filter.c \
    7273        filter.h \
     74        mfcc.h \
     75        mfcc.c
    7376
    7477AM_CFLAGS = @AUBIO_CFLAGS@ @FFTWLIB_CFLAGS@ @SAMPLERATE_CFLAGS@
  • src/filterbank.c

    r97886fa rfdf39ba  
    2121*/
    2222
     23#include "aubio_priv.h"
    2324#include "filterbank.h"
     25
     26
     27// Struct Declaration
     28
     29/** \brief A structure to store a set of n_filters Mel filters */
     30typedef struct aubio_mel_filter_ {
     31    int n_filters;
     32    smpl_t **filters;
     33};
    2434
    2535// Initialization
  • src/filterbank.h

    r97886fa rfdf39ba  
    2323#define AUBIOFILTERBANK_H
    2424
     25#ifdef __cplusplus
     26extern "C" {
     27#endif
    2528
    26 // Struct Declaration
    2729
    28 /** \brief A structure to store a set of n_filters Mel filters */
    29 typedef struct aubio_mel_filter_ {
    30     int n_filters;
    31     smpl_t **filters;
    32 } aubio_mel_filter;
     30
     31typedef struct aubio_mel_filter_ aubio_mel_filter;
    3332
    3433// Initialization
     
    3837 * 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
    3938 */
    40 int aubio_mfcc_init(int N, float nyquist, int style, float freq_min, float freq_max, int freq_bands, smpl_t ** fft_tables);
     39int aubio_mfcc_init(int N, smpl_t nyquist, int style, smpl_t freq_min, smpl_t freq_max, int freq_bands, smpl_t ** fft_tables);
     40
     41#ifdef __cplusplus
     42}
     43#endif
    4144
    4245#endif
  • src/mfcc.c

    r97886fa rfdf39ba  
    2121*/
    2222
     23#include "aubio_priv.h"
     24#include "sample.h"
     25#include "fft.h"
     26#include "mfcc.h"
     27#include "math.h"
    2328
    24 #include "mffc.h"
     29/*
     30new_aubio_mfcc
     31aubio_mfcc_do
     32del_aubio_mfcc
     33*/
    2534
    2635// Computation
     36// Added last two arguments to be able to pass from example
    2737
    28 int aubio_mfcc_do(const float *data, const int N, const void *argv, float *result){
     38
     39
     40int aubio_mfcc_do(const float *data, const int N, const void *argv, float *result, aubio_mfft_t * fft_dct, cvec_t * fftgrain_dct){
    2941
    3042    aubio_mel_filter *f;
     
    3850            result[filter] += data[n] * f->filters[filter][n];
    3951        }
    40         result[filter] = log(result[filter] < XTRACT_LOG_LIMIT ? XTRACT_LOG_LIMIT : result[filter]);
     52        result[filter] = LOG(result[filter] < XTRACT_LOG_LIMIT ? XTRACT_LOG_LIMIT : result[filter]);
    4153    }
    4254
    43     //TODO: check that zero padding
     55    //TODO: check that zero padding 
    4456    for(n = filter + 1; n < N; n++) result[n] = 0;
    4557   
    46     aubio_dct_do(result, f->n_filters, NULL, result);
     58    aubio_dct_do(result, f->n_filters, NULL, result, fft_dct, fftgrain_dct);
    4759   
    4860    return XTRACT_SUCCESS;
    4961}
    5062
    51 int aubio_dct_do(const float *data, const int N, const void *argv, float *result){
     63// Added last two arguments to be able to pass from example
     64
     65int aubio_dct_do(const float *data, const int N, const void *argv, float *result, aubio_mfft_t * fft_dct, cvec_t * fftgrain_dct){
    5266   
    5367   
     
    5670    //TODO: fvec as input? Remove data length, N?
    5771
     72    fvec_t * momo = new_fvec(20, 1);
     73    momo->data = data;
     74   
    5875    //compute mag spectrum
    59     aubio_pvoc_do (pv,data, fftgrain);
     76    aubio_mfft_do (fft_dct, data, fftgrain_dct);
    6077
    6178    int i;
    6279    //extract real part of fft grain
    6380    for(i=0; i<N ;i++){
    64       result[i]= fftgrain->norm[i]*cos(fftgrain->phase[i]);
     81      result[i]= fftgrain_dct->norm[0][i]*COS(fftgrain_dct->phas[0][i]);
    6582    }
    66    
    67     /*
    68     fftwf_plan plan;
    69    
    70     plan =
    71         fftwf_plan_r2r_1d(N, (float *) data, result, FFTW_REDFT00, FFTW_ESTIMATE);
    72    
    73     fftwf_execute(plan);
    74     fftwf_destroy_plan(plan);*/
     83
    7584
    7685    return XTRACT_SUCCESS;
  • src/mfcc.h

    r97886fa rfdf39ba  
    2424#define MFCC_H
    2525
     26#ifdef __cplusplus
     27extern "C" {
     28#endif
     29
    2630#include "filterbank.h"
    2731
    28 //libXtract enums
     32//libXtract constants and enums
    2933// TODO: remove them
     34
     35#define XTRACT_SQ(a) ((a) * (a))
     36#define XTRACT_MIN(a, b) ((a) < (b) ? (a) : (b))
     37#define XTRACT_MAX(a, b) ((a) > (b) ? (a) : (b))
     38#define XTRACT_NEEDS_FFTW printf("LibXtract must be compiled with fftw support to use this function.\n")
     39#define XTRACT_VERY_SMALL_NUMBER 2e-42
     40#define XTRACT_LOG_LIMIT XTRACT_VERY_SMALL_NUMBER
     41#define XTRACT_LOG_LIMIT_DB -96.0
     42#define XTRACT_DB_SCALE_OFFSET 96.0
     43#define XTRACT_VERY_BIG_NUMBER 2e42
     44#define XTRACT_SR_UPPER_LIMIT 192000.0
     45#define XTRACT_SR_LOWER_LIMIT 22050.0
     46#define XTRACT_SR_DEFAULT 44100.0
     47#define XTRACT_FUNDAMENTAL_DEFAULT 440.0
     48#define XTRACT_CHECK_nyquist if(!nyquist) nyquist = XTRACT_SR_DEFAULT / 2
     49#define XTRACT_CHECK_q if(!q) q = XTRACT_SR_DEFAULT / N
     50#define XTRACT_IS_ODD(x) (x % 2 != 0 ? 1 : 0)
     51#define XTRACT_SR_LIMIT SR_UPPER_LIMIT
     52#define XTRACT_FFT_BANDS_MIN 16
     53#define XTRACT_FFT_BANDS_MAX 65536
     54#define XTRACT_FFT_BANDS_DEF 1024
     55#define XTRACT_SPEC_BW_MIN 0.168 /* Minimum spectral bandwidth \
     56            (= SR_LOWER_LIMIT / FFT_BANDS_MAX*/
     57#define XTRACT_SPEC_BW_MAX 12000.0 /* SR_UPPER_LIMIT / FFT_BANDS_MIN */
     58#define XTRACT_SPEC_BW_DEF 43.066 /* SR_DEFAULT / FFT_BANDS_DEF */
    3059
    3160/** \brief Enumeration of feature initialisation functions */
     
    132161 * The data structure pointed to by *argv must be obtained by first calling xtract_init_mfcc
    133162 */
    134 int aubio_mfcc_do(const float *data, const int N, const void *argv, float *result);
     163
     164
     165int aubio_mfcc_do(const float *data, const int N, const void *argv, float *result, aubio_mfft_t *fft_dct, cvec_t *fftgrain_dct);
    135166
    136167/** \brief Extract the Discrete Cosine transform of a time domain signal
     
    140171 * \param *result: a pointer to an array containing resultant dct coefficients
    141172 */
    142 int aubio_dct_do(const float *data, const int N, const void *argv, float *result);
     173int aubio_dct_do(const float *data, const int N, const void *argv, float *result, aubio_mfft_t *fft_dct, cvec_t *fftgrain_dct);
    143174
     175#ifdef __cplusplus
     176}
     177#endif
    144178
    145179#endif
Note: See TracChangeset for help on using the changeset viewer.