pyo – Procesamiento y generación de audio



Versión: 2.6. 2.7.

pyo es un paquete de Python escrito en C que permite, principalmente, la manipulación de audio y generación a través de distintos algoritmos, aunque también soporta algunas funciones MIDI. Para aficionados de la música resulta muy interesante. Desde la página oficial del proyecto en Google Code se provee un enlace a Radio Pyo, en la que se reproducen sonidos generados en tiempo real utilizando el módulo.

Soporta los principales sistemas: Microsoft Windows, Linux y Mac OS X. Véase la sección de descargas para un listado con las distintas opciones. Descargas para las últimas versiones puedes encontrarlas en este enlace (recomendado). Documentación en línea en este otro.

Resulta bastante sencillo de comprender en sus aspectos básicos. Sin embargo, las distintas clases que implementan algoritmos complejos requieren de ciertos conocimientos previos.

Ejemplos

El siguiente código a modo de ejemplo reproduce un sonido de 261.63 Hz (nota Do central) durante tres segundos.

from time import sleep
from pyo import *

server = Server().boot()
server.start()

sine = Sine(261.63, mul=0.1).out()
sleep(3)

server.stop()

pyo incluye una pequeña interfaz de usuario para controlar la amplitud (volumen) de la señal reproducida actualmente. En el código anterior, reemplaza sleep(3) por:

server.gui(locals())

Vista previa


Con respecto a lo básico, como primera medida es necesario crear una instancia del servidor, aquel que se encarga de inicializar y configurar PortAudio. Luego, se llama a la función Server.start para comenzar con el procesamiento del audio.

from pyo import *

server = Server().boot()
server.start()
server.stop()

El siguiente ejemplo reproduce el archivo theme.wav con un volumen del 10%, hasta que la tecla Enter sea presionada.

from pyo import *

server = Server().boot()
server.start()

sf = SfPlayer("theme.wav", mul=0.1).out()
raw_input()

server.stop()

Una de las particularidades y características que lo hace tan agradable es que puedes editar los atributos de las distintas instancias en tiempo real, mientras la música se está reproduciendo, lo que produce efectos instantáneamente. Por ejemplo:

while True:
    volume = int(raw_input("Volumen: ")) / 100.0
    sf.mul = volume

En este caso, el volumen es modificado según el valor ingresado, entre 0 y 100. Valores mayores causarán que el audio comience a distorsionarse. mul, en reglas generales, es un multiplicador que se aplica a la señal de audio reproducida. Siendo éste 1, la señal se mantendrá en su nivel original, valores menores (0.1, 0.2, 0.3, etc.) reducirán el volumen y valores mayores (1.1, 1.2, 1.3, etc.) lo aumentarán.

El módulo incluye numerosas clases para generación y filtración de audio, aplicación de efectos, entre otras. El siguiente código aplica un efecto de delay a la pista en reproducción.

from pyo import *

server = Server().boot()
server.start()

sf = SfPlayer("theme.wav", mul=0.2).out()
delay = Delay(sf, mul=0.3).out()

raw_input()

server.stop()

Para aficionados experimentados en el procesamiento de señales de audio resulta una excelente opción para utilizar directamente desde Python, de forma sencilla, implementando algoritmos con tan solo unas pocas líneas de código.



5 comentarios.

  1. Hola! Gran aporte, una pregunta: Sabes si con este módulo puedo medir el tiempo de reproducción de un clip para que cuando llegue a una determinada posición pueda ejecutar sentencias?? Por ejemplo:

    Si el tiempo del clip == 00:12 segundos:
    print(“Hello song!”)

    Espero que entiendas mi pregunta y me ayudes, y si no es este módulo, talvez puedas decirme con cual puedo hacer esto. Gracias!!

Deja un comentario