Usando condicionales en Scripter de Logic Pro

El condicional If

En el artículo anterior vimos una introducción a Scripter, el plugin MIDI incluido en Logic Pro X que nos permite programar nuevos plugins usando código JavaScript (JS). Aprendimos cómo comenzar a escribir un simple plugin que retransmite los datos MIDI que recibe.


Esta vez vamos a aprender otra parte esencial de los lenguajes de programación: los condicionales. Los condicionales son enunciados que nos permiten ir tomando decisiones lógicas en nuestros programas. El primero de ellos es el condicional if (si). Básicamente if nos ayuda a que el programa realice ciertas acciones si se cumple algún criterio que nosotros indiquemos. Veamos un ejemplo:

function HandleMIDI(eventoRecibido) {

    eventoRecibido.send(); // enviar el evento original

    // si el evento es una nota
    if (eventoRecibido instanceof Note) {
 
        eventoRecibido.pitch += 12; // trasportar 12 semitonos el evento
        eventoRecibido.sendAfterMilliseconds(200); // enviar después de 200 ms
    }
}


La función HandleMIDI() procesa eventos MIDI que recibe el plugin Scripter. Esta función es ejecutada cada vez que Scripter recibe algún evento MIDI. HandleMIDI() es ejecutada con un argumento (eventoRecibido), el cual tiene la información que podemos manipular. En el ejemplo anterior se modifica la altura (pitch) del evento y se reenvía después de 200 milisegundos.

Analicemos el código paso a paso. Recordemos que el texto delante de la doble diagonal (//) son comentarios para el programador y que son ignorados al momento de correr el programa.

Dentro de la función HandleMIDI(eventoRecibido) la primera instrucción es  eventoRecibido.send(). Lo que hace esto es enviar el evento que acaba de recibir el plugin. Es importante escribir un punto y coma (;) al final de cada instrucción en JS. Después tenemos nuestro condicional if:

if (eventoRecibido instanceof Note)

Aquí lo que hace el programa es preguntarse si el evento MIDI que acaba de llegar (eventoRecibido) es un tipo de mensaje MIDI de nota. En caso de que esto sea cierto, entonces se ejecuta el código que está dentro de las llaves {}. En caso de que sea falso, entonces el programa se salta toda esa sección. Recordemos que los mensajes MIDI pueden ser de otro tipo además de notas, como por ejemplo: cambio de sonido (program), avanzar al inicio de una secuencia, cantidad de efecto, etc.

Fig. 1. Código para generar retardo y cambio de tono.

Entonces podemos concluir que lo que hace este código es hacer enviar el evento MIDI que recibe el plugin Scripter y, si el evento es una nota, entonces le aumenta 12 semitonos y la reenvía después de 200 milisegundos. El efecto de esto será una especie de delay pero con un sonido una octava más alta.

Lo más interesante es cuando comenzamos a experimentar con esto y empezamos a agregar líneas que generen más notas a diferentes tiempos y con diferentes tonos. ¡Incluso podríamos crear un código que genere una melodía completa automáticamente!

function HandleMIDI(eventoRecibido) {

    eventoRecibido.send(); // enviar el evento original

    // si el evento es una nota
    if (eventoRecibido instanceof Note) {
 
        eventoRecibido.pitch += 2;
        eventoRecibido.sendAfterMilliseconds(500);
        eventoRecibido.pitch += 2;
        eventoRecibido.sendAfterMilliseconds(1000);
        eventoRecibido.pitch -= 4;
        eventoRecibido.sendAfterMilliseconds(1500);
     
    }
}


Por ejemplo, este código genera automáticamente el inicio de la melodía "Martinillo" partiendo de cualquier nota que toquemos. Como vemos, también es posible reducir el tono de una nota MIDI restando valores.

Podemos darnos cuenta de que no necesitamos ser especialistas es programación para empezar a "jugar" con Scripter y echar a volar nuestra imaginación. ¡Hasta la próxima!




0 comments:

Post a Comment