Hola,

En referencia a la duda de convertir frecuencias a MIDI la siguiente
función podría ser útil.


MIDINOTE = INT (69.5 + (12(log(freq/440))/log(2))


El código en C++, adaptable a Java o Processing puede ser algo como:

double a440= 440.0;
int freq2midi(double freq) 
{
   return (int)(69.5 + 12 * log10(freq/a440)/log10(2.0));
}

Varios puntos para tener en cuenta:

- MIDINOTE es un subconjunto entre [0-127] de enteros solamente.
- La función 'INT' en C regresa un entero dependiendo de si el decimal
esta mas cerca a la cota por encima o por debajo.
- Esta formula esta basada en LA=440.

Se me ocurre que un subpatch en Pd con [expr $f1], podría hacer la
conversión facilmente. De hecho debe ser algo como:

Si log10(2) =  0.30103


[expr $f1  (int)(69.5 + 12 * log10($f1/440)/0.30103))]

Si alguien lo puede ensayar (con el debug), sería bueno que pasara el
parche de vuelta!.

  Suerte,

  --* Juan

_______________________________________________
____ ____ ___  ____ _  _ ___
|__| |__/   /  |___  \/  |__]
|  | |  \  /__ |___ _/\_ |

Arzexp mailing list
[email protected]
http://lists.slow.tk/listinfo.cgi/arzexp-slow.tk

Responder a