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.