Bueno, creo que o la idea no interesa, o como decía un profe mío sobre la bolsa "el que se sabe el truco no te lo va a decir a ti"
Así todo voy a probar a darle un último empujón con un post que ha surjido en los foros de reaktor de NI (
http://www.native-instruments.com/forum/showthread.php?t=149876) que ha provocado mi curiosidad, donde se pedía una manera de obtener la frecuencia de un sonido, por ejemplo de un sample vocal, con alguien cantando vamos.
Yo, si bien es verdad que he leído del tema en algún foro, no tengo ni idea de lo que puede decir la teoría sobre esto, así que pensándolo un poco, directamente hice una core cell en reaktor que cuenta los samples que tarda la onda en cruzar 0, y dividiendo la sample rate entre el número de samples debería obtenerse la frecuencia.
En la práctica esto funciona... con un par de peros:
1 La frecuencia obtenida siempre tiene pequeñitas variaciones sobre la real, algo como lo que los guiris llaman "jitter". Por ejemplo si la frecuencia es 440, el resultado siempre va variando entre distintos decimales de 439/440/441.
2 Para ondas simples no debería haber problema, pero si la onda es un pizco diferente de lo normal (prácticamente todas), no va a cruzar el 0 un mismo número de veces en cada ciclo, una lo cruzara 2 veces y otra 6...
El primer problema lo resolví haciendo una media de los distintos valores, concretamente crei lo más correcto hacerlo por medias móviles (modelo ARIMA si lo buscáis en la wikipedia), así que hice una simplificación de dicho modelo y se acabó el "jitter" completamente en ondas simples, dando un resultado estable. El problema que tiene esto es que las medias móviles necesitan un poco de tiempo para estabilizarse, así que si hay cambios rápidos de frecuencias (una melodía un poco más rápida de lo normal), acaba haciendo cosas raras.
El segundo problema todavía no lo he resuelto... simplemente le puse un knob para controlar ese número de veces que la onda debe cruzar 0, y efectivamente hay que cambiarlo según el tipo de onda. Por ejemplo cuando usas una onda simple de un oscilador de reaktor, con 2 veces que cruze 0 reconoce la frecuencia perfectametne, sin embargo usando un sample que tengo en el HD de un violín manteniendo un Do4 hay que ponerlo a 3
, y para samples de batería hay que poner más todavía.
En fin... ¿Alguna idea, referencia para leer, comentario?
Saludos.