lunes, 19 de junio de 2017

Melodía Generada por Ordenador

En artículos anteriores expliqué como se puede generar melodías aleatorias mediante Python, utilizando los módulos alsaseq y alsamidi.

Eran guiones sencillos que generaban arpégios, pero se pueden hacer guiones que realicen trabajos mas exigentes, tales como generar melodía con un cierto criterio. Un ejemplo de esto, es la melodía incluida en el video adjunto.

El guion en este caso generó la música de todos los instrumentos



Arpégio aleatorio con alsaseq ( parte II )

En el articulo anterior, creamos un guion que generaba un arpegio aleatoriamente, que con ciertos cambios va a ser más utilizable. En vez de crear solo un arpegio, van a ser dos, uno que simule un acorde Do mayor y otro que simule un acorde Fa mayor. Por otra parte se añaden unas lineas de código que permiten interactuar con una fuente que va a disparar la ejecución de los arpegios, manteniendo la duración de cada uno de ellos igualmente en cuatro compases de 120 pulsos por minuto.

import alsaseq
import alsamidi
import time
import random

alsaseq.client('linux_jonico',1,1, True)
alsaseq.start()

arpdo=[60,62,64,67,69]
arpfa=[65,67,69,72,74]



def secuencia_arpegio(arp) :
    random.shuffle(arp)
    for i in range (8):
        for ii in range (5):
        nota=alsamidi.noteonevent(0,arp[ii],100)
        alsaseq.output(nota)
        time.sleep(0.20)
        nota=alsamidi.noteoffevent(0,arp[ii],100)
        alsaseq.output(nota)

   
   

while 1 :
   
    notaonoff=alsaseq.input()
    nof=notaonoff[7][1]
    if notaonoff[0]== 6 and nof == 48 :
        secuencia_arpegio(arpdo)
    if notaonoff[0]== 6 and nof == 53 :
        secuencia_arpegio(arpfa)
    if notaonoff[0]== 6 and nof == 59 :
        print " Programa Finalizado "
        break

   


Podemos guardar por ejemplo como arp_do_fa.py y ejecutar de la forma habitual mediante terminal ( python arp_do_fa.py ). Para utilizarlo, se puede usar cualquier secuenciador que permita conexiones midi in y midi out, en este caso yo utilizaré LMMS de la siguiente forma:

1.- Creo una pista de instrumento que va a disparar el arpegio Do o FA durante 4 compases y la conecto al midi in del servidor que hemos creado con el guión.
2.- Creo una pista de instrumento que va a reproducirlo y la conecto al midi out del servidor que hemos creado con el guión.

Silencio la pista que dispara el arpegio, y con el editor midi, creo la partitura, en este caso C3 va a disparar el arpegio Do y F3 va a disparar el arpegio Fa. La silencio porque no queremos que suene, solo que dispare el arpegio. El guión acaba cuando recibe la nota B3 o con control + c.


jueves, 15 de junio de 2017

Arpégio aleatorio con alsaseq ( parte I )

Vamos a crear nuestro primer guion Python con alsaseq, un arpegiador, pero a diferencia de otras aplicaciones que también lo realizan, la secuencia arpegiada va a ser aleatoria. Evidentemente solo utilizaremos aquellas notas que sean de la tonalidad o acorde que queremos recrear, y a diferencia de otros arpegidores, la aleatoriedad nos brinda un plus, que el arpegio al variar, no resulta tan monótono.

Comenzamos importando los módulos necesarios:

import alsaseq
import alsamidi
import time
import random


Los dos primeros alsaseq y alsamidi, son los que vamos a utilizar para recibir y enviar notas a los diferentes clientes, mientras que los otros dos módulos, los utilizaremos para control de tiempo ( time ) y para generar las notas aleatoriamente ( random ).

alsaseq.client('linux_jonico',1,1, True)
alsaseq.start()


Creamos el cliente con un puerto midi de entrada y un puerto midi de salida, y lo ponemos en funcionamiento. En este primer guion no vamos a definir unas conexiones predeterminadas, ya que las estableceremos más adelante, las instrucciones para ello son:

alsaseq.connectfrom ( puerto propio , cliente de entrada , puerto cliente de entrada )
alsaseq.connectto   ( puerto propio, cliente  de salida, puerto cliente de salida )


Pero en este guion no las vamos a utilizar.

Ahora hemos de definir las notas que vamos a utilizar en el arpegio, en este caso voy a utilizar las cinco notas de la escala pentatónica de Do mayor (do,re,mi,sol,la), pero con los valores midi adecuados, en este caso (60,62,64,67,69)

arp=[60,62,64,67,69]

Una vez definido la variable que vamos a utilizar, en este caso la variable arp, definimos las funciones necesarias. Para este ejemplo voy a generar arpégios de las cinco notas, de manera que suene ese arpégio cuatro veces en el mismo compás, cambiando el arpégio en el compás siguiente y/o siguientes. Como referencia del tiempo del compás, en este caso va a ser 120, por lo que cada nota va a sonar 0.20 segundos.


def secuencia_arpegio(arp) :
    random.shuffle(arp)
    for i in range (8):
        for ii in range (5):
        nota=alsamidi.noteonevent(0,arp[ii],100)
        alsaseq.output(nota)
        time.sleep(0.20)
        nota=alsamidi.noteoffevent(0,arp[ii],100)
        alsaseq.output(nota)



Y ahora vamos a ejecutar esto 50 veces, pero dejamos un tiempo para conectar el cliente con el secuenciador


time.sleep(10)

for j in range (50) :

    secuencia_arpegio()


Y ahora el código completo :

import alsaseq
import alsamidi
import time
import random

alsaseq.client('linux_jonico',1,1, True)
alsaseq.start()
#alsaseq.connectfrom( 0 , 14 , 0 ) # entrada 0
#alsaseq.connectto( 1 , 14 , 0 )  # salida 1

arp=[60,62,64,67,69]

def secuencia_arpegio(arp) :
    random.shuffle(arp)
    for i in range (8):
        for ii in range (5):
        nota=alsamidi.noteonevent(0,arp[ii],100)
        alsaseq.output(nota)
        time.sleep(0.20)
        nota=alsamidi.noteoffevent(0,arp[ii],100)
        alsaseq.output(nota)
time.sleep(10)

for j in range (50) :
    secuencia_arpegio()d


Y podemos guardar el guión como archivo de texto con la extensión .py

Puedes oir un fragmento de 10 segundos





Continuará....


Instalando Alsaseq ( Módulo Python )

A lo largo de los siguientes artículos, voy a utilizar el modulo Python Alsaseq.


Alsaseq es un módulo de Python 3 y Python 2 que permite interactuar con los clientes del secuenciador de ALSA. Puede crear un cliente de ALSA, conectarse con otros clientes, enviar y recibir eventos de ALSA de inmediato a una hora programada utilizando una cola de secuenciador. Proporciona un subconjunto de las capacidades del secuenciador de ALSA en un modelo simplificado. Se implementa en lenguaje C y con licencia bajo la licencia Gnu GPL versión 2 o posterior.

Alsaseq permite, por ejemplo, crear un guion que genere aleatoriamente una
secuencia midi, y que la envíe a un secuenciador, por ejemplo LMMS.


También puede recibir datos midi de clientes, procesarlos y enviarlos al mismo u otros clientes. Un ejemplo podría ser recibir una nota del teclado vmpk por el canal 1, y enviarla por el canal 2 a LMMS como nota armonizada ( ej. recibe la nota re y envía las notas re y fa#).

Se puede descargar desde : http://pp.com.mx/python/alsaseq/

Allí igualmente encontraras documentación básica, que iremos ampliando en los artículos siguientes.


SuperCollider

    SuperCollider es una plataforma de síntesis de audio y composición algorítmica, originalmente publicado en 1996 por James McCartney, ut...