Estoy utilizando ADAU1761 en mi proyecto y su salida I2S está configurada para un relleno estéreo de 48 kHz / 24 bits, 8 bits, que proporciona 32 bits por canal, 64 BCLK por fotograma. Sin embargo necesito 16kHz / 16bits. 24b a 16b se puede realizar mediante un simple cambio de bits (> > 8). Estoy teniendo problemas con la conversión de 48kHz a 16kHz. Soy un principiante en el procesamiento de audio, pero hasta donde entiendo, no puedo tomar cada tercera muestra del audio original y guardar debido al aliasing. Debe haber un filtro de paso bajo, pero no sé qué frecuencia de corte y orden debería tener. La plataforma de destino es STM32L4 pero es más fácil simplemente codificar en la PC y luego transferir el código. Aquí hay un fragmento:
fread(&WAVE_header, sizeof(WAVE_header_t), 1, pFile); // read wave header,
uint16_t* ptr = malloc(WAVE_header.SubChunk2Size); // allocate memory for audio data
fread(ptr, WAVE_header.SubChunk2Size, 1, pFile); // read audio data
uint16_t *ptrOut = malloc(WAVE_header.SubChunk2Size/3); // after resampling
for(uint32_t i = 0; i < WAVE_header.SubChunk2Size/3; i+=5){ //
ptrOut = ptr+i; // channel 1
ptrOut = ptr + 1+i; // channel 2
//filter here?
}
fwrite(ptrOut, WAVE_header.SubChunk2Size/3, 1, outFile);