Hola a todos,
Nos dimos cuenta, admitimos que un poco tarde, que el utilizar tipo 'short' en los *bloques* fue una mala idea: complica las cosas, y además genera problemas por ejemplo al implementar el filtro de normalización y/o amplificación. El short en 32 bits resulta que es de 16 bits (no es así en 64), y la máquina donde probamos el sistema es de 32 bits. Esto genera problemas numéricos por ejemplo con la función de clipping.
En fin, la cosa es: vamos a cambiar el tipo de las muestras en TODOS los bloques (NO los filtros!!) para que sean tanto la entrada como la salida de tipo float. De la misma manera, los buffers de muestras que usen serán de tipo "arreglo de float" en lugar de "arreglo de short", como dice la letra.
Concretamente, las nuevas especificaciones para los bloques pasan a ser (de yapa, y por las molestias, les paso ya resuelto el tema de la declaración de estas funciones):
float bloque_lut(float x, float tabla[]);
float bloque_lfo(int tipo, float frec, float amplitud, float* pfase);
Desde ya, mil disculpas.
De todos modos, verán que no es un cambio grande, y de hecho les va a facilitar la vida para implementar correctamente todo lo que involucre redondeos, etc.