Code is as bellow. Basically it compares two singing files and gives scores for the user.
ScopedPointer<File> proFile = new File("E129_Sing_L_003.wav"); // professional singing
ScopedPointer<File> userFile = new File("E129_Sing_L_003_user_0.wav"); // user singing
int ** proData;
int *rows = new int;
int *cols = new int;
readRawData(proFile, &proData, rows, cols); // read all channels data
emxArray_real32_T * proArr; //This is a structure of matlab matrix
proArr = emxCreateWrapper_real32_T(getLeftChanData(proData, *cols), *cols, 1);
int ** userData;
int *userrows = new int;
int *usercols = new int;
readRawData(userFile, &userData, userrows, usercols);
float speedRation = (float)userReader->sampleRate / 16000;
int numOutputSamples = (int) floorf((float)*usercols / speedRation);
float *outputSamples = new float[numOutputSamples];
resampling.process(speedRation, getLeftChanData(userData, *usercols), outputSamples, numOutputSamples);
emxArray_real32_T * userArr;
userArr = emxCreateWrapper_real32_T(outputSamples, numOutputSamples, 1);
timingScore = new float;
pitchScore = new float;
status = new int;
wrongTimingMarks = emxCreate_real32_T(*rows, *cols);
wrongPitchMarks = emxCreate_real32_T(*rows, *cols);
EvaluateSinging(userArr, proArr, timingScore, wrongTimingMarks, pitchScore, wrongPitchMarks, status);
EvaluateSinging function is converted from matlab code so very difficult to read. professional singing is always 16K. When user singing is 16K, I get the correct score. When user singing is 44.1K, the program got stuck somewhere withn the EvaluateSinging function, showing EXC_BAD_ACCESS.