Pure Data: Metronomo Variable

En este post veremos algunos objetos de pure data para construir un metronomo que toque 5 veces a 60 bpm y 5 veces a 100 bpm. Este es uno de los ejercicios extra que vienen en el Libro de Johannes Kreidler (donde no viene la respuesta) que me parecio muy interesante y para ser honesto me tarde un par de horas en descifrarlo ya que soy medio tarado para esto de los "word problems".

Para solucionarlo dividí el enunciado en partes, primero me enfoque sobre construir un metronomo.

Como sabemos pure data tiene un objeto llamado [metro] que se encarga de mandar bangs en milisegundos segun el argumento que reciba en el inlet izquierdo. Para hacer que [metro] pueda funcionar como un metronomo en bpm es necesario hacer una conversion usando el objeto [expr] para calcular los bpm en ms con una pequeña formula:

[Imagen perdida]

Aqui le estamos diciendo a [expr] que 1000 (los milisegundos) sea dividido entre una variable entrante ($f1, que sera el valor de los bpm) entre 60, escrito de manera diferente esto se vería asi

[Imagen perdida]

Asi cualquier valor que nosotros pongamos en bpm saldra en milisegundos listo para ser leìdo por el objeto [metro].

A continuación conectamos nuestro algoritmo para convertir bpm a ms al objeto [metro] en el inlet derecho y conectamos un toggle en el inlet izquierdo para prenderlo y apagarlo. Como ya sabemos que solo usaremos los valores de 60 y 100 como bpm, borramos la caja de número y usamos 2 cajas de mensaje con estos valores conectados al inlet del objeto [expr].

[Imagen perdida]

Ahora que ya tenemos nuestro metronomo listo pasamos a la segunda parte del enunciado que dice "que toque 5 veces a 60 bpm y 5 veces a 100 bpm". Lo primero que se me ocurrio fue construir un contador.

Necesito un objeto [float] para guardar los numeros entrantes y conectar al outlet de este, un objeto [+ 1] , el objeto [float] recibe los bangs de nuestro metronomo.

[Imagen perdida]

Esto no es suficiente para crear valores ascendentes. Para que funcione como queremos, necesitamos crear un loop conectando el outlet del objeto [+ 1] de regreso al inlet derecho del objeto [f]

[Imagen perdida]

Asi [f] al recibir su primer bang, manda su valor por default que es cero al objeto [+ 1]. El objeto [+ 1] se encarga de sumar mas uno al valor que recibio inicialmente y regresarlo al objeto [f] por el inlet derecho. Al hacer esto se le asigna el resultado de la operacion como nuevo valor al objeto [f] ,entonces cuando ocurra un segundo bang ahora el objeto [f] con un valor de 1, manda su nuevo valor al objeto [+ 1] para repetir la operacion y asignar una vez mas el resultado de regreso al objeto [f] y asi sucesivamente...

[Imagen perdida]

Ahora que ya tenemos nuestro contador ascendente hay que asegurarse de que solo vaya de 0 a 9 en loop. Para esto conectamos un objeto [%] con un argumento de 10 a la salida del contador ascendente. Este objeto se encarga de dividir 2 números y producir un mismo cociente entre esos 2 números. En este caso lo que hace es crear "un techo" donde el contador solo va a llegar hasta 9 como valor maximo y regresar a 0.

[Imagen perdida]

¿Por qué de 0 a 9?

Pure Data empieza a contar de 0 para arriba, asi que de 0 a 9 son 10 valores.

¿Por qué 10 valores?

Porque queremos que los primeros 5 valores vayan a una velocidad de 60 bpm y los 5 restantes vayan a una velocidad de 100 bpm.

Para hacer que este cambio de bpm sea automatico usamos un par de objetos [sel]. Este objeto actua como compuerta, si el valor entrante no es igual al del argumento, [sel] no deja pasar nada. En este caso los argumentos son 0 y 5 en sus respectivos objetos. En el momento en que nuestro contador iguale estos argumentos, uno de los objetos [sel] mandara un bang por su outlet izquierdo.

[Imagen perdida]

[Imagen perdida]

Si han estado construyendo mientras leen pueden darse cuenta de que ahora el contador manda bangs cada 5 numeros a un lado y 5 bangs al otro. Del lado izq va de 0 a 4 y del lado derecho de 5 a 9. Estos bangs se conectan al inlet de las cajas de mensaje que marcan el bpm del metronomo. Uno a 60 y el otro a 100.

[Imagen perdida]

Ya tenemos el algoritmo completo que regula el comportamiento de nuestro metronomo. Ahora solo queda resolver el problema de como hacerlo sonar. Para esto usamos un objeto [osc~] conectado a un switch de prendido y apagado que construiremos para que escuchemos sonidos intermitentes y dentro de los bpm que queremos.

Conectamos un bang al outlet de la caja de numeros que recibe todos los bangs del contador. Este bang ira conectado a un objeto [pipe] y a su vez a una caja de mensaje con el numero 1.

[Imagen perdida]

El objeto [pipe] funciona como un retardo de señal que puede recibir bangs, símbolos y numeros ya sea independientes o en lista. En este caso le damos un argumento de 50 para retardar el bang entrante 50 ms. Este bang retardado estara conectado a una caja de mensaje con el numero 0.

[Imagen perdida]

A continuación conectamos ambas cajas de mensaje, al inlet derecho de un multiplicador de audio [*~]

[Imagen perdida]

Este es nuestro switch. El bang que esta conectado a la caja de mensaje con el número 1 deja pasar el sonido del multiplicador de audio [*~]. Gracias al objeto [pipe], 50 ms despues, ese mismo bang manda un mensaje a la caja de numero con el número 0 para cerrar la salida de audio.

[Imagen perdida]

Finalmente conectamos un oscilador [osc~] con una frecuencia de 440Hz al inlet izquierdo del multiplicador de audio [*~] y agregamos un [dac~] (digital to analog converter) para que el sonido salga a las bocinas de nuestra computadora.

[Imagen perdida]

Y listo!!!

Metronomo Variable by ardotadot

Eso es todo por hoy, vaya que si me extendi para explicar este patch que aunque es pequeño, es importante para entender cada objeto que hemos utilizado. Pudimos haber utilizado un objeto [ead~] (exponential attack decay) en lugar de construir un "switch" pero nos perderiamos de la diversion de construir todo desde cero hehehe.

Nos vemos en el proximo post.

EXPERIMENTEN!!!

¿Te gustó este artículo?
0
Ofertas Ver todas
  • NI Komplete 15 Collector's Edition
    -50%
    NI Komplete 15 Collector's Edition
    885 €
    Ver oferta
  • Technics SL-1200M7 Lamborghini
    -20%
    Technics SL-1200M7 Lamborghini
    1.199 €
    Ver oferta
  • Behringer X-Touch Compact
    -29%
    Behringer X-Touch Compact
    263 €
    Ver oferta
Comentarios

Regístrate o para poder comentar