Raspberry Pi Voice Changer: Construye un Proyecto de Voz de Bolsillo
Un cambiador de voz con Raspberry Pi abre toda una categoría de proyectos que serían imprácticos en un PC convencional: cascos para cosplay, voces de props robóticos, máquinas de juego retro con audio de personajes y rigs de cosplay autónomos que funcionan completamente con un power bank USB. Esta guía cubre todo: desde la configuración inicial del hardware en Pi 4 y Pi 5, pasando por un cambiador de voz Python funcional con PyAudio, librosa, Sox y enlaces de rubberband, hasta guías completas de tres builds populares. Al terminar tendrás un pipeline funcional y una comprensión clara de las compensaciones entre latencia y calidad en cada paso.
TL;DR
- Una Raspberry Pi 4 o 5 puede ejecutar desplazamiento de tono en tiempo real y efectos de voz robótica con PyAudio, librosa y pyrubberband.
- Micrófono USB + salida de audio USB o HDMI — sin cableado analógico para un setup funcional.
- Builds de cascos cosplay, props de audio retro y rigs de voz robótica funcionan en una Pi sin monitor ejecutando un servicio systemd.
- Objetivo de latencia: 20-40 ms es alcanzable a 44100 Hz con buffers de 512-1024 muestras.
- Para uso en Discord/streaming en Windows, una herramienta dedicada como VoxBooster es más rápida de configurar y produce menor latencia.
- El stack Python descrito aquí también aplica a escritorios Linux — consulta cambiador de voz para Linux para ese enfoque.
Hardware Necesario: Pi 4, Pi 5 y Accesorios
Raspberry Pi 4 vs Pi 5 para Procesamiento de Voz
El modelo de Pi elegido determina qué efectos de voz son prácticos en tiempo real.
| Característica | Raspberry Pi 4 (4 GB) | Raspberry Pi 5 (4/8 GB) |
|---|---|---|
| CPU | Cortex-A72 @ 1.8 GHz | Cortex-A76 @ 2.4 GHz |
| Desplazamiento de tono en tiempo real | Sí, cómodamente | Sí, con margen |
| STFT de librosa (tiempo real) | Justo con buffers pequeños | Sí |
| Conversión neural de voz | No (demasiado lenta) | Posible a calidad reducida |
| Consumo activo | ~3–5 W | ~5–8 W |
| Inactiva en casco | Bien | Bien, algo más caliente |
| Precio (aprox.) | $55 | $80 |
Para la mayoría de builds de cosplay y props, una Pi 4 con 2 o 4 GB de RAM es suficiente. La Pi 5 da margen para cadenas DSP más complejas o la capacidad de ejecutar un pequeño modelo ONNX localmente. Una Pi Zero 2W funciona para efectos simples de tono, pero su rendimiento de un solo núcleo la hace poco fiable para cadenas DSP de múltiples etapas.
Selección de Micrófono USB
Cualquier micrófono con interfaz USB Audio Class (UAC 1.0 o 2.0) funcionará en Raspberry Pi OS sin instalar controladores.
Opciones recomendadas:
- Fifine K669B — compacto, alimentado por bus, cardioide, menos de $30. Cabe dentro de un casco.
- Blue Snowball iCE — captura más amplia, buena supresión de ruido, soporte estándar en Linux.
- Samson Go Mic — formato de clip, útil para builds de disfraces donde el espacio es limitado.
- Micrófono de solapa USB genérico — la opción más barata. Calidad de audio limitada, pero aceptable para efectos de robot/distorsión donde importa menos la fuente.
Evita micrófonos que anuncien “USB solo para Windows” o requieran software de acompañamiento — suelen usar descriptores USB propietarios que no enumeran correctamente en Linux.
Opciones de Salida de Audio
- Adaptador de audio USB (dongle DAC) — la opción más simple, se conecta junto al micrófono USB. Elige uno con salida de 3.5 mm.
- Audio HDMI — funciona de serie para builds conectados a pantalla o receptor AV.
- Altavoz Bluetooth — añade 50-150 ms de latencia adicional. Aceptable para voces de props sin sincronización labial; no ideal para conversación en tiempo real.
- HAT DAC I2S (p. ej., HiFiBerry DAC+ Zero) — mejor calidad de audio, menor latencia, pero requiere configuración de overlay del kernel.
Para los ejemplos de esta guía usamos micrófono USB + adaptador de audio USB, ya que es lo más fácil de reproducir y no requiere overlay del device tree.
Configuración Inicial: Raspberry Pi OS y ALSA
Instalando Raspberry Pi OS
Usa Raspberry Pi OS Lite (64 bits) para builds sin pantalla o Raspberry Pi OS Desktop si quieres interfaz gráfica para desarrollo. Graba en una tarjeta SD con Raspberry Pi Imager y habilita SSH en los ajustes avanzados.
Tras el primer arranque:
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3-pip python3-dev portaudio19-dev libsndfile1-dev sox rubberband-cli
Identificar Dispositivos de Audio
aplay -l # lista dispositivos de reproducción
arecord -l # lista dispositivos de captura
Con un micrófono USB + DAC USB, aparecerán como card 1 y card 2 junto al audio bcm2835 integrado. Anota los números de tarjeta y dispositivo — los necesitarás para input_device_index y output_device_index en PyAudio.
Configurar Dispositivos ALSA por Defecto
Crea o edita /etc/asound.conf:
pcm.!default {
type asym
playback.pcm "plughw:2,0"
capture.pcm "plughw:1,0"
}
ctl.!default {
type hw
card 2
}
Reemplaza los números de tarjeta según tu salida de aplay -l / arecord -l. Prueba con arecord -d 5 test.wav && aplay test.wav.
Cambiador de Voz Python: Pipeline Principal
Instalando Dependencias Python
pip3 install pyaudio numpy librosa sounddevice pyrubberband
Si pyaudio falla al compilar, asegúrate de que portaudio19-dev está instalado. En Pi OS Bookworm puede ser necesario instalar en un entorno virtual:
python3 -m venv voicechanger
source voicechanger/bin/activate
pip install pyaudio numpy librosa sounddevice pyrubberband
Desplazador de Tono en Tiempo Real Mínimo
El pipeline más simple lee frames de audio, aplica desplazamiento de tono con librosa y escribe la salida. Esta es la base sobre la que se construyen todos los efectos más complejos.
import pyaudio
import numpy as np
import librosa
RATE = 44100
CHUNK = 1024
SEMITONES = 4.0 # positivo = tono más alto, negativo = más bajo
p = pyaudio.PyAudio()
stream_in = p.open(format=pyaudio.paFloat32,
channels=1,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
stream_out = p.open(format=pyaudio.paFloat32,
channels=1,
rate=RATE,
output=True,
frames_per_buffer=CHUNK)
print("Cambiador de voz activo. Ctrl+C para detener.")
try:
while True:
data = np.frombuffer(stream_in.read(CHUNK, exception_on_overflow=False),
dtype=np.float32)
shifted = librosa.effects.pitch_shift(data, sr=RATE, n_steps=SEMITONES)
stream_out.write(shifted.astype(np.float32).tobytes())
except KeyboardInterrupt:
pass
stream_in.stop_stream()
stream_out.stop_stream()
p.terminate()
Esto funciona en una Pi 4 con CHUNK=1024 a unos 23 ms de latencia de procesamiento por frame, más la latencia del buffer ALSA. Espera una latencia de ida y vuelta total de 40-80 ms dependiendo del almacenamiento en buffer del dispositivo de audio USB.
Mayor Calidad con pyrubberband
El pitch_shift de librosa usa un vocoder de fase internamente, que funciona pero puede producir efecto de fase en las consonantes. La librería rubberband usa un algoritmo más sofisticado que gestiona mejor las transitorias — el mismo motor de corrección de tono usado en DAWs profesionales.
import pyrubberband as pyrb
# Reemplaza la línea de librosa con:
shifted = pyrb.pitch_shift(data, RATE, SEMITONES)
pyrubberband requiere el paquete del sistema rubberband-cli (instalado en el paso apt). Llama al binario de rubberband por subprocess, lo que añade una pequeña sobrecarga constante. Para la mayoría de aplicaciones de voz de personaje, la mejora de calidad vale la pena.
Efecto de Voz Robótica
Una voz robótica combina varios pasos DSP: desplazamiento de tono moderado, modulación de anillo (modulación de amplitud por una onda sinusoidal portadora) y una pequeña reverberación metálica.
import numpy as np
def robot_voice(audio, rate=44100, mod_freq=60.0, shift_semitones=-2):
import librosa
pitched = librosa.effects.pitch_shift(audio, sr=rate, n_steps=shift_semitones)
# Modulación de anillo: multiplicar por una onda seno portadora
t = np.arange(len(pitched)) / rate
carrier = np.sin(2 * np.pi * mod_freq * t)
modulated = pitched * carrier
# Mezclar seco y húmedo (50/50)
result = 0.5 * pitched + 0.5 * modulated
# Normalizar
peak = np.max(np.abs(result))
if peak > 0:
result /= peak
return result.astype(np.float32)
Ajusta mod_freq para afinar el carácter metálico: 40-60 Hz da un zumbido mecánico grave; 80-120 Hz suena más a robot de ciencia ficción clásica; 200+ Hz empieza a sonar más como un efecto de vocoder.
Usando Sox para Efectos de Voz en Raspberry Pi
Sox (Sound eXchange) es una utilidad de procesamiento de audio por línea de comandos que viene en la mayoría de distribuciones Linux. Maneja una amplia gama de efectos de voz con simples flags y puede llamarse desde Python mediante subprocess o a través de la librería pysox.
Instalar pysox
pip3 install sox
Efectos Sox Útiles para Proyectos de Voz
| Efecto | Flag Sox | Resultado |
|---|---|---|
| Desplazamiento de tono | pitch +500 | +5 semitonos (en cents) |
| Eco/retardo | echo 0.8 0.9 500 0.5 | Eco único de 500ms |
| Reverberación | reverb 80 | Reverb tipo sala grande |
| Distorsión | overdrive 10 | Saturación suave |
| Cambio de tempo | tempo 0.85 | Más lento sin cambio de tono |
| Filtro paso bajo | lowpass 3000 | Calidad de voz por teléfono |
| Filtro de banda | band 1000 500 | Radio CB / walkie-talkie |
Sox es más útil para builds con patrón push-to-talk — grabar una muestra, aplicar el efecto, reproducirla — que para streaming continuo en tiempo real. Para cambiadores de voz en tiempo real continuo, el enfoque PyAudio + NumPy + librosa es mejor.
Build de Proyecto: Cambiador de Voz en Casco Cosplay
Esta es una de las aplicaciones más populares del cambiador de voz con Raspberry Pi — un casco o máscara que transforma la voz del portador para que coincida con el personaje. Piensa en Iron Man, Mandaloriano, stormtrooper o cualquier personaje robot o androide.
Lista de Componentes
- Raspberry Pi 4 (2 GB) o Pi Zero 2W para builds pequeños
- Power bank USB (10.000 mAh para operación de varias horas)
- Micrófono USB compacto (Fifine K669B o micrófono de solapa USB genérico)
- Pequeño adaptador de audio USB (para salida de auriculares)
- 2× altavoz de 3 vatios + pequeña placa amplificadora Clase D
- Interruptor de encendido/apagado
- Casco/máscara de housing (impreso en 3D o comercial)
Script Python para Arranque del Casco
Crea /home/pi/voicechanger/helmet.py con tu función de voz robótica, luego crea un servicio systemd que lo arranque al inicio:
# /etc/systemd/system/helmet-voice.service
[Unit]
Description=Helmet Voice Changer
After=sound.target
[Service]
User=pi
WorkingDirectory=/home/pi/voicechanger
ExecStart=/home/pi/voicechanger/venv/bin/python helmet.py
Restart=on-failure
RestartSec=3
[Install]
WantedBy=multi-user.target
Habilita con sudo systemctl enable helmet-voice.service. La Pi arranca e inicia el cambiador de voz en unos 15 segundos desde el encendido.
Configuraciones de Voz por Personaje
| Tipo de Personaje | Desplazamiento | Freq. Mod. | Efecto Extra |
|---|---|---|---|
| Robot / androide | -3 semitonos | 80 Hz | Reverb suave |
| Iron Man (JARVIS) | -1 semitono | Ninguna | EQ: realce 1-3 kHz, compresión suave |
| Stormtrooper | 0 semitonos | 100 Hz | Bandpass 500-3000 Hz (walkie-talkie) |
| Estilo Darth Vader | -4 semitonos | 40 Hz | Reverb fuerte, realce grave profundo |
| Alienígena / criatura | +2 semitonos | 60 Hz | Mod. de anillo + eco corto |
Build de Proyecto: Prop de Voz para Gaming Retro
Los props de eventos de gaming retro — cajas de voz de personajes de 8 bits, efectos de voz de arcade, gadgets de sonido portátiles — son otro excelente caso de uso para un cambiador de voz compacto con Raspberry Pi. Para inspiración sobre efectos de audio de 8 bits y retro, consulta cambiador de voz 8-bit.
Una Pi Zero 2W en una carcasa con forma de cartucho, funcionando con una pequeña batería LiPo, puede reproducir clips de sonido cortos o aplicar efectos de voz en tiempo real. Combinado con un botón push-to-talk y un pequeño altavoz, se convierte en un prop autónomo que no requiere teléfono ni portátil.
Build de Proyecto: Caja de Voz Robótica Autónoma
Un prop robótico de mesa o personaje animatrónico se beneficia de una Pi 4 en una caja, ejecutando un cambiador de voz permanente en el que cualquiera puede hablar. La configuración es sencilla:
- Micrófono USB en posición omnidireccional
- Script Python siempre activo (servicio systemd)
- Audio USB a un altavoz Bluetooth portátil o altavoz con amplificador
- Control opcional de LED o servo por GPIO para animar el robot cuando el nivel de audio supera un umbral
La animación de LED/servo disparada por nivel de audio es una adición popular. PyAudio proporciona el nivel de audio directamente desde el RMS de cada buffer:
rms = np.sqrt(np.mean(data**2))
is_speaking = rms > THRESHOLD # establece THRESHOLD experimentalmente
Conecta ese booleano is_speaking a una salida GPIO y tienes un robot que “abre la boca” cuando alguien habla frente a él.
Optimización de Latencia para Cambio de Voz en Tiempo Real
| Fuente | Valor Típico | ¿Reducible? |
|---|---|---|
| Buffer de entrada ALSA | 10-30 ms | Sí, reducir tamaño de buffer |
| Procesamiento Python (librosa, 1024 muestras) | 23 ms | Sí, reducir chunk |
| Buffer de salida ALSA | 10-30 ms | Sí |
| Sobrecarga de audio USB | 5-15 ms | Parcialmente |
| Audio Bluetooth (si se usa) | 50-150 ms | No — evitar para tiempo real |
Consejos de ajuste:
- Reduce CHUNK de 2048 a 512 muestras para bajar de 46 ms a 12 ms de latencia de procesamiento a 44100 Hz.
- Usa
sounddeviceen lugar de PyAudio para mejor integración ALSA en Linux. - Configura el gobernador de CPU en rendimiento:
sudo cpufreq-set -g performance. - Usa adaptador de audio USB con cable; Bluetooth añade 50-150 ms.
Cambiador de Voz con Raspberry Pi vs Software Dedicado
| Escenario | Raspberry Pi (Python) | Software Dedicado Windows |
|---|---|---|
| Casco cosplay / prop ponible | Ideal | No aplica |
| Prop robótico de mesa | Ideal | No aplica |
| Prop retro / autónomo | Ideal | No aplica |
| Discord / chat de juego en PC Windows | Workaround complejo | Mucho más simple |
| Stream en Twitch / YouTube | Posible con enrutamiento JACK | VoxBooster o similar es más simple |
| Calidad de conversión de voz AI | Limitada (potencia de Pi) | Mucho mejor (GPU/CPU en PC) |
| Latencia en PC | 40-80 ms en Pi | Menos de 10 ms en PC moderno |
| Tiempo de configuración | Horas | Minutos |
Para quien busca un cambiador de voz para Discord o streaming y llegó aquí por accidente — considera una opción nativa de Windows. VoxBooster crea un micrófono virtual directamente en el gráfico de audio de Windows, procesa con menos de 10 ms de latencia y tarda unos cinco minutos en configurarse. También puedes consultar cambiador de voz para Linux si tu máquina de streaming corre Linux.
Para proyectos manuales que no involucran Raspberry Pi, el tutorial de cambiador de voz en Audacity cubre manipulación de tono offline, y juguetes y props cambiadores de voz cubre opciones de hardware preconfigurado para cosplay. Para proyectos basados en microcontrolador con forma aún más pequeña, consulta cambiador de voz con Arduino.
Preguntas Frecuentes
¿Puede una Raspberry Pi ejecutar un cambiador de voz en tiempo real?
Sí. Una Raspberry Pi 4 o 5 tiene suficiente CPU para correr desplazamiento de tono con PyAudio y Sox a 20-40 ms de latencia. La conversión neural de voz requiere más recursos y necesita una Pi 5 o inferencia externalizada, pero los efectos básicos de tono, formantes y voz robótica funcionan cómodamente en tiempo real en una Pi 4.
¿Qué micrófono USB funciona mejor con Raspberry Pi para cambiar la voz?
Cualquier micrófono USB con interfaz UAC estándar funciona sin controladores adicionales en Raspberry Pi OS. Opciones populares: Blue Snowball iCE, Fifine K669B y Samson Go Mic. Evita micrófonos que requieran controladores propietarios de Windows — no funcionarán en Linux.
¿Qué librerías de Python necesito para un cambiador de voz en Raspberry Pi?
El stack principal es PyAudio (E/S de audio), NumPy (cálculo matricial) y librosa (análisis espectral y desplazamiento de tono) o pysox (enlaces a Sox). Para calidad rubberband, instala pyrubberband más rubberband-cli. SoundDevice es una alternativa más limpia a PyAudio para ALSA en Linux.
¿Cómo reduzco la latencia en un cambiador de voz Python en Raspberry Pi?
Usa buffers de 512 o 1024 muestras a 44100 Hz (12-23 ms). Evita librosa.load() dentro del callback de audio — precomputa parámetros fuera. Sox por subprocess añade overhead; prefiere librerías en proceso para menor latencia.
¿Puedo usar un cambiador de voz con Raspberry Pi para cosplay o props?
Por supuesto. Una Pi Zero 2W o Pi 4 cabe dentro de un casco o prop, alimentada por un power bank USB. Conecta un micrófono USB, usa un altavoz pequeño y ejecuta el script al arranque mediante systemd. Todo funciona sin teclado ni pantalla.
¿Cuál es la diferencia entre desplazamiento de tono y conversión de voz en Raspberry Pi?
El desplazamiento de tono cambia la frecuencia fundamental de la señal de audio. La conversión de voz reemplaza las características acústicas de una voz por las de otra mediante modelos de aprendizaje automático. El primero corre en tiempo real en cualquier Pi 4; la conversión requiere mayor potencia y funciona mejor en Pi 5 o con un acelerador USB como Google Coral.
¿VoxBooster funciona en Raspberry Pi?
No. VoxBooster es una aplicación de escritorio para Windows 10/11 y funciona en hardware x86-64. Para proyectos en Linux o Raspberry Pi, los pipelines basados en Python con PyAudio, librosa y rubberband son la opción correcta. Si tu objetivo es Discord o streaming en Windows, VoxBooster es más sencillo y de menor latencia.
Conclusión
Un cambiador de voz con Raspberry Pi es uno de los proyectos de audio embebido más satisfactorios que puedes construir — el hardware es barato, el ecosistema Python para DSP de audio es maduro y los resultados van desde builds de props funcionales hasta instalaciones interactivas realmente impresionantes. El pipeline principal (PyAudio → procesamiento NumPy → salida PyAudio) te pone en marcha en menos de una hora. Añadir pyrubberband mejora notablemente la calidad, y empaquetarlo todo en un servicio systemd hace que arranque automáticamente como un dispositivo de consumo.
La Pi 4 alcanza su límite con conversión neural de voz pesada, pero para desplazamiento de tono, modulación de anillo, voz robótica y efectos de personaje tiene más que suficiente potencia. Si superas la Pi, el mismo código Python corre en cualquier máquina Linux — y los conceptos se transfieren directamente a entender lo que herramientas dedicadas como VoxBooster hacen cuando logran menos de 10 ms de latencia en Windows con conversión de voz AI completa.
Construye el casco. Pon en marcha el robot. Saca el prop en la próxima convención.
Descarga VoxBooster — prueba gratuita de 3 días para Windows, sin tarjeta de crédito.