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.