Mil gracias por tu aclaración creo que andaba pensando en ceiling y
floor. Con floor en Matlab tiende a funcionar con un puñado de
frecuencias con las que la he probado.
mn = floor( 69.5 + 12 * log10(freq/440)/log10(2));
Creo que '69.5' ayuda a redondear por encima pero sin embargo funciona
con '69' también y, sin necesidad del 'floor', que para de aplicaciones
que no requieren de punto flotante estaría bien.
Saludos,
--* Juan
>
> Una aclaración/detalle: el casteo a int, trunca, no redondea[1], lo
> que pasa aca es que se esta trabajando con números positivos y alcanza
> con sumarle 0.5 y truncar. No la revisé en detalle, pero creo que la
> fórmula en realidad suma 69 (correspondiente a A4 en MIDI, LA 440) y
> 0.5 más por esto que digo.
>
> Saludos
>
> [1] Para eso hay que definir algo como esto:
> #define round(x) (x>=0?(int)(x+0.5):(int)(x-0.5))
>
> > - 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
> >
> > _______________________________________________
> >
> > Expyezp mailing list
> > [email protected]
> > http://lists.slow.tk/listinfo.cgi/expyezp-slow.tk
> >
> > Archivo de mensajes:
> > http://lists.slow.tk/pipermail/expyezp-slow.tk/
> >
>
>
>
_______________________________________________
Expyezp mailing list
[email protected]
http://lists.slow.tk/listinfo.cgi/expyezp-slow.tk
Archivo de mensajes:
http://lists.slow.tk/pipermail/expyezp-slow.tk/