Lo que hace o rompe la inmersión en una novela visual no es el texto ni el arte — es el audio. Un BGM que se corta abruptamente o un efecto de sonido mal colocado te saca de la experiencia por completo.
Esta guía cubre cómo trabajar con BGM, efectos de sonido y voz en Ren'Py 8.5.2 desde cero.
Eligiendo formatos de audio
Ren'Py soporta varios formatos de audio, pero no todos son iguales.
| Formato | Bucle | Tamaño | Uso recomendado |
|---|---|---|---|
| OGG Vorbis (.ogg) | Sin cortes | Pequeño | BGM y SFX (el más probado) |
| Opus (.opus) | Sin cortes | Más pequeño | BGM y SFX (alta compresión) |
| FLAC (.flac) | Sin cortes | Grande | Archival (no ideal para distribución) |
| WAV (.wav) | — | Grande | Solo efectos de sonido cortos |
| MP3 (.mp3) | Salto en el bucle | Pequeño | No recomendado |
WAV no tiene compresión, así que los archivos son grandes. Usarlo para BGM infla tu distribución. Está bien para efectos cortos como sonidos de puertas o pasos.
Reproduciendo música, efectos de sonido y voz
Ren'Py tiene tres declaraciones de reproducción.
play music — Reproducir BGM
# Reproducir BGM (se repite por defecto)
play music "audio/main_theme.ogg"
# Crossfade a una nueva pista
play music "audio/battle.ogg" fadeout 1.0 fadein 0.5
# Reproducir una vez sin repetir
play music "audio/ending.ogg" noloop
# No reiniciar si la misma pista ya está sonando
play music "audio/main_theme.ogg" if_changed
play music usa el canal music. Se repite por defecto.
play sound — Reproducir efectos de sonido
# Reproducir un efecto de sonido (una vez)
play sound "audio/explosion.ogg"
# Ajustar volumen
play sound "audio/rain.ogg" volume 0.3
# Repetir un efecto de sonido (sonidos ambientales)
play sound "audio/rain.ogg" loop
play sound usa el canal sound. No se repite por defecto.
voice — Reproducir líneas de voz
voice "voice/001.ogg"
e "Hello."
voice "voice/002.ogg"
e "Nice weather today."
voice usa el canal voice. Se detiene automáticamente en la siguiente interacción (cuando el jugador avanza el texto). Para juegos con voces, escribe una línea voice antes de cada línea de diálogo.
Deteniendo el audio
# Detener BGM
stop music
# Desvanecer y detener
stop music fadeout 2.0
# Detener efectos de sonido
stop sound
# Detener voz
stop voice
Cómo funcionan los canales
Ren'Py gestiona el audio a través de canales. Cada canal reproduce, detiene y controla el volumen de forma independiente.
Canales por defecto
| Canal | Mezclador | Bucle | Propósito |
|---|---|---|---|
music | music | Sí | BGM |
sound | sfx | No | Efectos de sonido |
voice | voice | No | Actuación de voz (se detiene automáticamente en la siguiente interacción) |
audio | sfx | No | Múltiples sonidos simultáneos (sin queue/stop) |
Reproducir una nueva pista en el canal music detiene automáticamente la anterior. Para reproducir dos pistas simultáneamente, crea un canal personalizado.
El canal audio es especial — permite reproducir múltiples archivos de audio simultáneamente en un solo canal. Cada llamada a play audio añade un nuevo sonido sin detener los anteriores. Sin embargo, queue audio y stop audio no son compatibles. Si necesitas reproducción simultánea con control de parada, usa un canal personalizado.
Creando canales personalizados
Para controlar sonidos ambientales (lluvia, viento) independientemente del BGM, registra un canal personalizado.
init python:
renpy.music.register_channel("ambient", "sfx", loop=True)
label start:
play music "audio/main_theme.ogg"
play ambient "audio/rain.ogg"
"El viaje continúa bajo la lluvia."
stop ambient fadeout 2.0
"La lluvia se ha detenido."
El segundo argumento de register_channel es el nombre del mezclador. Usar "sfx" significa que el control deslizante de volumen SFX en la pantalla de preferencias controla este canal.
Encolando la siguiente pista
# Reproducir la siguiente pista cuando termine la actual
play music "audio/intro.ogg" noloop
queue music "audio/main_theme.ogg"
queue inicia la siguiente pista cuando la que está sonando termina. Úsalo para transiciones de intro → tema principal.
Desvanecimientos y puntos de bucle
Fade In y Fade Out
# Desvanecer BGM actual en 2s, aparecer nuevo BGM en 1s
play music "audio/battle.ogg" fadeout 2.0 fadein 1.0
# Desvanecer y detener BGM en 3s
stop music fadeout 3.0
fadeout se aplica a la pista que está sonando actualmente. fadein se aplica a la nueva pista. Confundir esta distinción lleva a resultados inesperados.
Estableciendo puntos de bucle
Muchas pistas de BGM tienen una estructura "intro → sección de bucle". Establecer un punto de bucle reproduce la intro una vez y luego repite solo la sección de bucle.
# Repetir desde los 6.333 segundos (todo lo anterior es la intro, se reproduce una vez)
play music "<loop 6.333>audio/main_theme.ogg"
# Reproducir solo una sección específica
play music "<from 5.0 to 30.0>audio/long_track.ogg"
Control dinámico de volumen
# Cambiar volumen del canal (desvanecer en 1 segundo)
$ renpy.music.set_volume(0.3, delay=1.0, channel="music")
# Establecer volumen relativo para un archivo específico
play sound "audio/loud_explosion.ogg" volume 0.5
renpy.music.set_volume() cambia el volumen general del canal. La palabra clave volume establece el volumen relativo para un archivo individual.
Organizando archivos de audio
A medida que crece la cantidad de archivos, escribir rutas directamente se vuelve tedioso. Crea alias en el espacio de nombres audio con define para una gestión más fácil.
El espacio de nombres audio
define audio.main_theme = "audio/bgm/main_theme.ogg"
define audio.battle = "audio/bgm/battle.ogg"
define audio.click = "audio/se/click.ogg"
define audio.explosion = "audio/se/explosion.ogg"
label start:
play music main_theme
play sound click
"La aventura comienza."
play music battle fadeout 1.0
play sound explosion
Los alias definidos en el espacio de nombres audio se pueden usar directamente en las declaraciones play. No necesitas escribir rutas de archivo cada vez, y los errores tipográficos se detectan pronto.
Ejemplo de estructura de carpetas
game/
└── audio/
├── bgm/
│ ├── main_theme.ogg
│ ├── battle.ogg
│ └── ending.ogg
├── se/
│ ├── click.ogg
│ ├── explosion.ogg
│ └── door_open.ogg
└── voice/
├── 001.ogg
├── 002.ogg
└── 003.ogg
Separar BGM, SFX y voz en subcarpetas mantiene todo organizado. Ren'Py detecta automáticamente archivos en game/audio/ y sus subdirectorios.
FAQ
¿Qué formato de audio debo usar para BGM en Ren'Py?
OGG Vorbis es la opción más segura: es pequeño, hace bucle sin cortes y tiene el historial más largo en proyectos de Ren'Py. Opus ofrece mejor compresión a la misma calidad, pero OGG tiene mayor compatibilidad con herramientas de edición de audio. Evita MP3 para BGM porque los codificadores MP3 insertan frames de relleno que crean un silencio audible en los puntos de bucle.
¿Cómo reproduzco dos pistas de BGM al mismo tiempo?
El canal music por defecto solo reproduce una pista a la vez. Crea un canal personalizado con renpy.music.register_channel() y reproduce la segunda pista en ese canal. Asígnale el mezclador "music" para que el control de volumen de BGM del jugador controle ambos canales.
¿Cómo hago que la intro suene una vez y luego se repita el bucle?
Usa la sintaxis <loop>: play music "<loop 6.333>audio/main_theme.ogg". Todo antes de 6.333 segundos se reproduce una vez como intro, y después solo se repite la sección posterior a 6.333 segundos. Encuentra la marca de tiempo exacta en Audacity buscando un punto de cruce por cero.
¿Puedo ajustar el volumen de efectos de sonido individuales?
Sí. Usa la palabra clave volume: play sound "audio/explosion.ogg" volume 0.5. Esto establece el volumen relativo para ese archivo específico sin afectar el volumen general del canal. Para cambios de volumen a nivel de canal, usa renpy.music.set_volume().
¿Cuál es la diferencia entre play sound y play audio?
play sound usa el canal sound — un sonido a la vez, soporta queue y stop. play audio usa el canal especial audio que puede reproducir múltiples sonidos simultáneamente, pero no soporta queue audio ni stop audio. Usa play sound cuando necesites control, y play audio para efectos superpuestos sin necesidad de detenerlos.
¿Necesito escribir define audio para cada archivo de sonido?
No. Los archivos en game/audio/ (y subdirectorios) con extensiones soportadas se registran automáticamente en el espacio de nombres audio. Por ejemplo, game/audio/bgm/battle.ogg se puede reproducir con play music battle. Solo necesitas define audio explícito cuando los nombres de archivo colisionan entre subdirectorios.
¿Cómo añado actuación de voz a mi juego de Ren'Py?
Escribe voice "voice/archivo.ogg" antes de cada línea de diálogo. La voz se detiene automáticamente cuando el jugador avanza el texto. Para gestionar un elenco de voces grande, Ren'Py también soporta voz automática — mapea archivos de voz a líneas de diálogo por ID, así no necesitas escribir declaraciones voice manualmente.
Conclusión
Lo que cubrimos:
- Selección de formato: Usa OGG u Opus para BGM. Evita MP3 por los saltos en el bucle
- Declaraciones de reproducción:
play music(BGM),play sound(SFX),voice(líneas de voz) - Canales: music / sound / voice / audio — cuatro por defecto. Canales personalizados para sonidos ambientales
- Desvanecimientos y puntos de bucle: parámetros
fadeout/fadein, sintaxis<loop>para intro + bucle - Organización de archivos: alias
define audio.xxxen el espacio de nombres audio
Para lo básico de Ren'Py, consulta la guía de inicio. Para la visualización de imágenes, consulta la guía básica de imágenes. Para la interfaz de usuario, consulta la guía de screen language. Para gestionar variables del juego, consulta la guía de gestión de estadísticas.
Recursos oficiales:
- Audio — referencia oficial de audio
- Voice — detalles de la función de voz
- Audio Formats Guide — comparación de formatos (VNDev Wiki)
- Audacity — editor de audio gratuito para encontrar puntos de bucle
- r/RenPy — comunidad
Artículos relacionados:
- Primeros Pasos con Ren'Py 8.5: De la Instalación a tu Primera Compilación
- Opciones y Ramificaciones en Ren'Py: De Menús a Múltiples Finales
- Básicos de Imágenes en Ren'Py: show, scene y Transiciones
- Screen Language en Ren'Py: Diseño de UI desde lo Básico
- Distribuir tu Juego Ren'Py: De la Compilación a itch.io