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())
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.
Oliver says:
¿Es posible exportar el midi para ser leído en otro software como Sibelius o MuseScore?
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
Ja says:
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:
Hola. Sí, es una buena opción.
Saludos
Manuel says:
No encuentro como instalarlo en linux, ayuda xc
Recursos Python says:
En Linux tendrás que compilarlo manualmente usando esta guía.
Saludos
Camila says:
Como lo puedo descargar en pycharm es que estoy haciendo un distorsionador de voz, esto me puede servir
Recursos Python says:
Hola. Es independiente del IDE que uses. Para instalarlo lo recomendado es ejecutar el comando
python -m pip install pyo
.Saludos
Abraham says:
los .exe que hay en la pagina son para 32 bits (en windows) como hago para 64 bits?
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
Sebastián says:
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!
Tania says:
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?
Recursos Python says:
Hola, ¿qué tipo de características?
Jose Leon says:
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
Recursos Python says:
Hola, para eso te recomiendo PyAudio. Puedes ver un ejemplo que captura la entrada del micrófono en tiempo real aquí (el ejemplo 2): https://www.recursospython.com/guias-y-manuales/pyvst-procesamiento-de-audio-con-vst/.
Saludos!
Angel says:
Hola quiero generar un visualizador de audio grafico con python algo como esto :
https://www.youtube.com/watch?v=OeBJRpeAx04
El modulo Pyo me sirve para este proposito:
y de ser asi podrias mostrarme un ejemplo de codigo
José Leon says:
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!!
Recursos Python says:
Hola. Para eso probablemente quieras chequear el artículo sobre un reproductor de video en PyQt.
Saludos!
Alberto says:
Muy interesante el tema. Pero no he conseguido instalar pyo como módulo.
Alguna sugerencia?
Gracias!
Recursos Python says:
Hola, ¿qué problema estás teniendo? En este enlace tenés las descargas para las últimas versiones de Python 2 y 3.
Un saludo.
Nico says:
Hola.
Prueba con esto.
https://programminghistorian.org/es/lecciones/instalar-modulos-python-pip
saludos.