Hola. Después de haber visto en el video anterior los distintos elementos del menú "put", hablaremos en este de el llamado nivel de control, que consta de las herramientas que ofrece Pure Data para manejar datos, básicamente números y palabras. Los objetos de control se distinguen de los objetos de audio porque poseen cables más delgados y porque no llevan en su comando la llamada tilde. Poco a poco nos daremos cuenta de la importancia que este tipo de objetos tienen para programar en Pure Data. Las operaciones matemáticas constituyen uno de los rubros de control más importantes en Pure Data. Como veremos a continuación, podemos a través de operaciones matemáticas, manejar números de distintas formas y esto va a ser muy importante para los "patches" que programaremos más adelante. Comencemos. Para comenzar, abramos un nuevo "patch" y coloquemos cuatro cajas de objeto. En cada una de estas cajas escribiremos el símbolo que representa cada una de las cuatro operaciones matemáticas básicas. Para la suma utilizaremos el signo de más, para la resta el signo de menos, para la multiplicación el asterisco y para la división la diagonal. Podemos ver que cada objeto presenta dos entradas y una salida. Las entradas servirán para ingresar los valores a ser sumados, restados, multiplicados o divididos y la salida servirá para devolver el resultado; es por eso que a cada una de las entradas y salidas conectaremos una caja de números. En general, estos objetos funcionan relacionando el número que ingresa por la entrada izquierda, con el que ingresa por la entrada derecha, en función del operador correspondiente. En la suma, por ejemplo, el primer número se sumará al segundo y lo mismo ocurrirá en el resto de las expresiones, siempre considerando que el valor ingresado por la entrada izquierda, será el primer elemento de nuestra operación. Tomemos como ejemplo los valores diez y cinco, diez más cinco da como resultado 15. Diez menos cinco, es igual a cinco. Diez por cinco, es igual a 50 y diez entre cinco, da como resultado dos. Un dato importante es que los valores a sumar, restar, multiplicar o dividir, pueden ingresar a través de cajas de mensaje cuando quiero que los valores sean constantes y como vimos pueden también ingresar a través de cajas de número, cuando quiero estar cambiando los valores mientras ejecuto mi programa. Otro dato a considerar es que los valores que siguen al signo matemático, los que serían recibidos por la entrada derecha, pueden ser también ingresados directamente en la caja de objeto, si acaso quisiera que estos números fueran constantes. Pero el hecho de ingresar un valor directamente en el objeto, no elimina la posibilidad de cambiarlo al ingresar por la entrada derecha un valor diferente y ya que hablamos de situaciones en las que queremos estar cambiando los valores en tiempo real, hay que tener en cuenta un pequeño detalle que puede ser determinante para que nuestros objetos de control funcionen correctamente. Como vemos en pantalla, las operaciones matemáticas solamente devuelven resultado cuando reciben un número o estímulo en la entrada izquierda. En una multiplicación, por ejemplo, yo puedo cambiar el multiplicador todas las veces que quiera y en cada ocasión quedará registrado el último valor ingresado, pero sólo cuando cambia el multiplicando tendremos un producto resultante. Este mismo principio aplica para todas las operaciones matemáticas y se debe al hecho de que en Pure Data existe un orden de prioridad que va de derecha a izquierda, siendo justamente la entrada de la izquierda la que activa el objeto correspondiente. Pero como podrán imaginarse, existe un truco que podemos implementar para que las operaciones lancen resultado cuando cambiamos los valores que ingresen en la entrada derecha, y les pido que pongan mucha atención, porque este tipo de trucos son muy recurrentes cuando trabajamos con Pure Data. Lo que haremos simplemente es poner un "bang" que se dispare cuando cambie el valor de mi entrada derecha y que estimule la entrada izquierda de mi objeto, para que la operación devuelva el resultado. Ya que hemos visto cómo hacer operaciones matemáticas básicas, veremos dos objetos nuevos que serán muy útiles cuando construyan sus primeros instrumentos musicales. El primer objeto es metro que tiene la función de disparar "bangs" en un intervalo constante. Este objeto al igual que muchos en Pure Data, calcula el tiempo en términos de milisegundos, por lo que al escribir el objeto metro 1.000, lo que hacemos es mandar un "bang" por segundo, tal como vemos en pantalla. Vean cómo he agregado un "toggle" en la entrada izquierda del metro lo que me permite encender y apagar el objeto cuando activo o desactivo el interruptor. Entonces, si quisiéramos enviar dos "bangs" por segundo escribiríamos el objeto metro 500 y bajo esta lógica podemos calcular cualquier intervalo de tiempo. Ahora si quisiéramos cambiar el valor del metro mientras estamos ejecutando el programa, basta ingresar un nuevo valor en la entrada derecha y automáticamente cambia el intervalo. Por último, el segundo objeto que quisiera mostrarles es el objeto "random" que sirve para enviar valores aleatorios dentro de un rango indicado. Por ejemplo, si escribo el objeto "random" 10 y conecto en la salida una caja de número, cada vez que active el objeto éste devolverá un número aleatorio entre cero y nueve, es decir, siempre entre cero y el número inferior al que estoy indicando. Al igual que el objeto metro, yo puedo modificar el rango de mi objeto "random", ingresando un nuevo valor en su entrada derecha. Hasta aquí hemos visto algunos objetos de control y espero que haya quedado claro su funcionamiento. Sin embargo, usar los objetos por separado no es en realidad interesante. Lo interesante viene cuando empezamos a mezclar los distintos objetos entre sí. A manera de ejemplo, vamos a crear nuestro primer "patch" interactivo que en este caso será un metrónomo digital. Lo primero que necesitamos saber para construir nuestro metrónomo, es de qué manera convertir los bits por minuto en milisegundo, pues los metrónomo suelen tener los bits por minuto como unidad de cálculo, mientras que el objeto metro que utilizaremos funciona, como dijimos ya, a partir de milisegundos. La fórmula que requerimos es precisamente la que vemos en pantalla, necesitamos dividir la cantidad de milisegundos que tiene un segundo, o sea 1.000 entre una nueva división que tenga como dividendo la cantidad de bits por minuto y como divisor la cantidad de segundos que tiene un minuto, o sea 60. Si traducimos esto a Pure Data, tendremos lo siguiente: primero una operación que divida 1.000 entre el valor que sea ingresado por la entrada derecha y de este lado una nueva operación que divide entre 60 la cantidad de bits por minuto que se decida ingresar. Vean cómo agrego un "bang" arriba del mensaje 1.000, para que la primera división se actualice cada vez que ingrese un nuevo valor en mi metrónomo. Cabe decir que en este caso podríamos quitar el "bang", pues los mensajes pueden ser activados directamente pero lo dejaré por motivos didácticos. Pues bien, ahora sólo necesito poner un objeto metro que reciban los valores de mi fórmula matemática y agregarle en su entrada un botón de encendido y en su salida un "bang". Si quisiera ser más sofisticado, podría agregar un objeto "random" que me genere valores aleatorios entre cero y 240 para que el metrónomo cambie aleatoriamente cada vez que doy clic sobre este botón. Perfecto, quienes hayan comprendido todo lo que hicimos en este video están listos para seguir con los próximos. A quienes no hayan comprendido algún detalle, le recomiendo que revise nuevamente este video porque es fundamental tener clara la función de los objetos de control para lo que viene después. Nos vemos en el siguiente video. Gracias.