I have tried the following code for upsampling but only result in noises:
/*
* ratio: ratio between the 2 sample rates
* bufsz: size of the source buffer
* buffer: source buffer
*/
static char*
resample(char *buffer, int bufsz, float ratio)
{
int nsize = bufsz * ratio;
char *to_return = malloc(nsize);
for (int i = 0; i < nsize; i++) {
if (i == 0) {
to_return[i] = buffer[0];
continue;
}
if (i == nsize - 1) {
to_return[i] = buffer[bufsz-1];
continue;
}
int j = i / ratio;
to_return[i] = buffer[j];
}
for (int i = 1; i < nsize-1; i++) {
if (to_return[i] == to_return[i-1] || to_return[i] == to_return[i+1]) {
to_return[i] = (to_return[i+1] + to_return[i-1])/ (float) 2;
}
}
return to_return;
}