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