MFCC means Mel-frequency cepstral coefficients. It’s a powerful feature representation for sound. Although there is a lot of implementations in different programming language for MFCC, they give sheerly different results for the same audio input.
To solve this problem, I got an open-source implementation of C++ for MFCC and built a Python module for it. By using SWIG, this work became less painful.
The function has sample_rate
and a one-dimension-array as input, a two-dimensions-array as output. So the header file of C++ looks like:
void mfcc(int sample_rate, short* in_array, int size_in, double** out_array, int* dim1, int* dim2 );
We also need to use numpy
, so the interface file for SWIG is:
%module mfcc %{ #define SWIG_FILE_WITH_INIT #include "mfcc.hpp" %} %include "numpy.i" %init %{ import_array(); %} %apply (short* IN_ARRAY1, int DIM1) {(short* in_array, int size_in)} %apply (double** ARGOUTVIEW_ARRAY2, int* DIM1, int* DIM2) {(double** out_array, int* dim1, int* dim2)} %rename (mfcc) my_mfcc; %inline %{ void my_mfcc(int sample_rate, short* in_array, int size_in, double** out_array, int* dim1, int* dim2) { mfcc(sample_rate, in_array, size_in, out_array, dim1, dim2); } %}
To use this module, here is an example Python code:
import mfcc import numpy as np from scipy.io import wavfile sr, audio = wavfile.read("mono.wav") output = mfcc.mfcc(sr, audio) print(output.shape, output)
All the code is in my repository.