pyo – Procesamiento y generación de audio

Versión: 2.7, 3.5+.

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.

Ahora también puede ser instalado vía pip:

python -m pip install pyo

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()
input()   # raw_input() en Python 2

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(input("Volumen: ")) / 100.0   # raw_input() en Python 2
    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()

input()   # raw_input() en Python 2

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.

Curso online 👨‍💻

¡Ya lanzamos el curso oficial de Recursos Python en Udemy! Un curso moderno para aprender Python desde cero con programación orientada a objetos, SQL y tkinter en 2024.

Consultoría 💡

Ofrecemos servicios profesionales de desarrollo y capacitación en Python a personas y empresas. Consultanos por tu proyecto.

22 comentarios.

    • Recursos Python says:

      Hola. Entiendo que dentro de pyo no hay ninguna forma de exportar a MIDI. Sí se puede exportar a otros formatos de audio (.wav, .ogg, etc.).

      Saludos

  1. Hola.

    Yo estoy interesado en realizar un proyecto en python donde al captar el audio de una nota, le aplique la transformada de fourier y al final indique a qué nota pertenece ese sonido.
    ¿Me recomiendas trabajar con este paquete o conoces alguna mejor opción?
    Saludos

    • Recursos Python says:

      Tendrás que instalar un intérprete de 32-bit. En Windows pyo únicamente soporta la instalación de 32-bit de Python.

      Saludos

  2. Hola, mucho gusto!
    Me gustaría saber si esta librería me sirve para filtrar la voz de un audio. Más especificamente, suprimir cualquier otro sonido de un audio y preservar solo la voz del mismo.

    • Recursos Python says:

      Hola Sebastián. Sí, seguramente te sirva, aunque depende más del algoritmo que utilices para conseguirlo que la librería en sí misma.

      Saludos!

  3. Buenas tardes, tengo una consulta, yo tengo un audio de voz y lo que quiero es extraer sus características, qué librería de python puedo usar?

  4. Hola soy yo de nuevo, tal vez puedas ayudarme otra vez jeje
    Tengo un proyecto para el cual necesito escuchar el audio obtenido del micrófono en tiempo real, puedo hacerlo con este modulo o cual me recomiendas para dicha tarea?
    Saludos

  5. 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 una respuesta