Hace algunos posts hablé del sitio http://www.dspdimension.com y de la buena pinta que tenía el algoritmo de pitch shifting que describe con código fuente incluido. Pues bien, esta tarde, en lo que Mari le daba el último repasón a los apuntes para el exámen de mañana cogí el código fuente y lo adapté para que compilase en Linux con el GCC e hice un código de ejemplo shift.c que permite cambiar el pitch de un fichero RAW que lee de la entrada estándar (stdin) y sacarlo por la salida estándar (stdout).
Para los neófitos en esto del DSP, el pitch shifting consiste en cambiar el pitch (o el tono) de una grabación sin alterar su duración. El cambio de pitch se suele medir con un ratio: 1.0 significa que la grabación queda tal y como está, 0.5 significa que se baja una octava y 2.0 significa que se aumenta el tono en una octava.
Como contrapartida al pitch shifting tenemos el time stretching que consiste en cambiar la duración de una grabación sin alterar su pitch. Realmente es el mismo perro con distinto collar ya que si aplicamos un pitch shifting de un ratio de 0.5 a una grabación (esto es, la bajamos una octava de tonalidad) y luego reproducimos las muestras resultantes al doble de velocidad tendremos un time stretch con un ratio de 2.0 (es decir, oimos la muestra original el doble de rápido pero manteniendo el pitch).
En la sección soft he puesto el código fuente adaptado y algunos ejemplos. Aquí tenemos una canción original de Heath Whitelock. Aquí la versión con un rate de 0.75 y aquí con un rate de 1.25.
A mi los resultados no dejan de sorprenderme :-). Sección soft.
P.S. La canción de Heath Whitelock tiene licencia Creative Commons Reconocimiento-CompartirIgual 2.5.
Lo sentimos. No se permiten nuevos comentarios después de 90 días.