¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Python y Raspberry Pi
  3. Multimedia y audio en la Raspberry Pi
Extrait - Python y Raspberry Pi Aprenda a desarrollar en su nano-ordenador
Extractos del libro
Python y Raspberry Pi Aprenda a desarrollar en su nano-ordenador Volver a la página de compra del libro

Multimedia y audio en la Raspberry Pi

Pintar con Pillow

¿Cómo no íbamos a abordar uno de los aspectos esenciales de la gestión de la Raspberry Pi, a saber, programar el audio y la imagen de su Raspberry Pi? Para poder conseguir este objetivo, Python ofrece varias librerías. En materia de gestión de imagen, la que es más popular se llama PIL, acrónimo que significa Python Imaging Library. PIL permite manipular fácilmente imágenes (redimensionamiento, rotación, etc.), incluso crearlas fácilmente utilizando las funciones ofrecidas por esta librería. Sin embargo, el proyecto cayó en desuso en 2011 para ser retomado por un grupo de voluntarios, que lo rebautizaron como Pillow. La librería ha mejorado mucho, principalmente con el soporte de Python 3.x.

1. Crear y manipular imágenes

El primer ejemplo va a servir de base para el resto. La librería Pillow contiene funciones para manipular y crear imágenes acompañada de texto. Este primer ejemplo pone en práctica la creación de una imagen con un fondo azul, donde aparece el tradicional Hello world (Capitulo_8/pillow_1.py):


 1 #!/usr/bin/env python3  
 2 from PIL import Imagen, ImageDraw, ImageFont  
 3 import os  
 4   
 5 if not os.path.exists('imagenes'):  
 6     os.mkdir('imagenes')  
 7 texto = 'Hello world con Pillow'  
 8 tamanioimagen = (600, 300)  
 9 letra =   
ImageFont.truetype(filename='/usr/share/fonts/truetype/dejavu/ 
DejaVuSansMono.ttf', size=20)  
10 img = Image.new(mode='RGB', color=(0, 110, 145),   
size=tamanioimagen)  
11 drawer = ImageDraw.Draw(img)  
12 tamaniotexto = drawer.textsize(texto, letra)  
13 drawer.text((  
14  ...

Controlar las entradas y salidas de audio con pyalsaaudio

ALSA (Advanced Linux Sound Architecture) es la librería por defecto en Linux para registrar y reproducir sonidos desde un controlador de audio. Por razones de compatibilidad, rendimiento e históricas, la librería ALSA está escrita en lenguaje C. De hecho, ALSA prácticamente era la librería en Linux para todo lo referente al sonido. Hay colaboradores que han escrito los bindings necesarios para explotar ALSA directamente en Python, con el objetivo de facilitar la escritura de scripts y programas para aquellos desarrolladores que no conozcan el lenguaje C. El fruto de este esfuerzo se llama pyalsaaudio.

Antes de ir más lejos en este proyecto, principalmente la parte que explica cómo registrar sonido, es importante equiparse con un micrófono capaz de conectarse al puerto USB (Universal Serial Bus). Inicialmente, la Raspberry Pi no está equipada para registrar sonido, sino únicamente para reproducir y transmitir este sonido por la salida de jack 3.5 mm.

Los registros de audio de este capítulo se han realizado con un micrófono USB Logitech. Sin embargo, cualquier micrófono disponible en el mercado debería ser reconocido por la Raspberry Pi.

Después de conectar el micrófono a un puerto USB de la Raspberry Pi, basta con verificar que el micrófono efectivamente está conectado, con el comando lsusb. Este comando muestra todos los periféricos USB conectados a la Raspberry Pi:


pi@raspberrypi:~ $ lsusb  
Bus 001 Device 018: ID 145f:0176 Trust Isla Keyboard 
Bus 001 Device 017: ID 046d:c05a Logitech, Inc. M90/M100 Optical 
Mouse 
Bus 001 Device 016: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 
4-Port HUB 
Bus 001 Device 019: ID 046d:0825 Logitech, Inc. Logitech USB 
Microphone 
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
SMSC9512/9514 Fast Ethernet Adapter 
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. 
LAN9500 Ethernet 10/100 Adapter / SMSC9512/9514 Hub 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
 

El comando alsamixer muestra las tarjetas de sonido dentro de una interfaz de consola ncurses y presenta los volúmenes...

Proyecto #1: un grabador/lector de audio

El objetivo de este proyecto es codificar un lector/grabador de audio, basado en tkinter y Pillow para el aspecto visual y pyalsaaudio para acceder a la interfaz de audio de la Raspberry Pi. Para mejorar el aspecto visual de este grabador, hay iconos diseñados directamente con Pillow, lo que conforma la introducción a este proyecto.

Como se ha explicado en la primera parte de este capítulo, Pillow es una formidable librería que permite dibujar formas geométricas. Tradicionalmente, un grabador de audio dispone de tres botones fácilmente reconocibles, asociados a tres acciones: lectura, parada y grabación, representados respectivamente por un triángulo negro, un cuadrado negro y un círculo rojo. Pillow puede fácilmente responder a esta necesidad y crear las imágenes deseadas. Retomando el código de la primera parte del capítulo, la generación del botón Reproducir se realiza de la siguiente manera (Capitulo_8/grabadora/botones.py):


 1 #!/usr/bin/env python3  
 2 from PIL import Imagen, ImageDraw, ImageOps  
 3 import os  
 4 if not os.path.exists('recursos'):  
 5     os.mkdir('recursos')  
 6   
 7 img = Image.new('RGBA', (100, 100))  
 8 draw = ImageDraw.Draw(img)  
 9 draw.ellipse((25, 25, 75, 75), fill='red' )  
10 img = img.resize((25, 25))  
11 img.save('recursos/grabar.png')  
12   
13 img = Image.new('RGBA', (100, 100))  
14 draw = ImageDraw.Draw(img)  
15 draw.polygon([(25, 50), (75, 25), (75, 75)], fill='black') 
16 img = ImageOps.mirror(img)  
17 img = img.resize((25, 25))  
18 img.save('recursos/reproducir.png')  
19   
20 img = Image.new('RGBA', (100, 100))  
21 draw = ImageDraw.Draw(img)  
22 draw.polygon([(25, 25), (75, 25), (75, 75), (25, 75)], 
fill='black')  
23 img = img.resize((25, 25))  
24 img.save('recursos/stop.png')
 

La imagen básica es una imagen de 100 píxeles de largo por 100 píxeles de ancho. La especificación del formato RGBA (Red Green Blue Alpha) tiene en cuenta la opacidad de la imagen. Gracias a este formato...

Conclusión

La gestión de elementos multimedia es una funcionalidad no despreciable de la Raspberry Pi. Los proyectos abordados en este capítulo muestran que es posible manipular fácilmente la imagen y el audio con Python en esta plataforma.