El origen del problema es una combinación de cómo funciona el buffer (memoria intermedia) de Liquidsoap y cómo gestiona la transición entre fuentes (DJ en vivo -> AutoDJ) cuando hay un crossfade activo.
???? ¿Por qué ocurre este corte?
Imagina que Liquidsoap es un DJ muy precavido. Cuando un DJ en vivo se está conectando, Liquidsoap sigue reproduciendo la música del AutoDJ en su buffer interno por si la señal en vivo falla. El problema surge cuando el DJ en vivo se desconecta:
-
El Buffer Sigue Sonando: Liquidsoap aún tiene una reserva de los últimos segundos de la canción del AutoDJ almacenados en su buffer.
-
Crossfade Forzado: Como el crossfade está activado, Liquidsoap intenta mezclar el final de esa "canción fantasma" del buffer con la siguiente canción programada en la lista de reproducción. Esto provoca que se escuche ese pequeño fragmento de la canción anterior que creías que ya había terminado .
En términos más técnicos, esto sucede porque el operador crossfade no está diseñado para saber que debe "ignorar" su propia lógica en medio de un cambio de DJ .
????️ Soluciones desde el Panel de MediaCP
Puedes intentar resolverlo desde la interfaz de MediaCP sin necesidad de programar. Sigue estos pasos en orden:
-
Verifica la Frecuencia de Muestreo (Samplerate)
-
El problema: Una de las causas más comunes de cortes repentinos (especialmente cada pocas horas) es que la frecuencia de muestreo (ej. 44.1 kHz) de la transmisión del DJ en vivo no coincide exactamente con la configurada en los Mount Points de MediaCP. Esta diferencia hace que los buffers se desborden .
-
La solución: Asegúrate de que tanto el software del DJ (como Virtual DJ, Traktor, etc.) como la configuración de tu emisora en MediaCP utilicen la misma frecuencia de muestreo.
-
-
Ajusta la Configuración del Crossfade
-
Prueba desactivando el Smart Crossfade: Ve a la configuración de tu servicio en MediaCP y desmarca la opción Smart Crossfade. Usa el modo estándar "Fade-in/Fade-out" .
-
Establece el "Minimum Threshold" en 0: Esto obliga al sistema a aplicar el crossfade en todas las transiciones entre canciones, pero puede ayudar a estabilizar el comportamiento general. Si el problema persiste, intenta desactivar el crossfade por completo estableciendo los valores de "Fade-in" y "Fade-out" a
0como prueba .
-
-
Prueba Reduciendo la Calidad de Transmisión del DJ
-
Si los cortes son constantes cada pocos segundos o minutos, podría ser un problema de congestión de red. Pídele a tu DJ que reduzca el bitrate de su encoder al mínimo (por ejemplo, 128 kbps o 96 kbps) para ver si la conexión se estabiliza .
-
???? La Solución Avanzada: Crossfade Inteligente para DJs
Si ninguna de las opciones anteriores funciona y necesitas que los cortes desaparezcan por completo, la solución es programar un Crossfade personalizado en Liquidsoap. Esto no se puede hacer desde el panel de MediaCP, sino editando la configuración del AutoDJ.
La idea es crear una función que le diga a Liquidsoap: "Si estamos cambiando del DJ al AutoDJ, haz una transición directa (sin crossfade) para evitar el fragmento del buffer".
Aquí tienes un ejemplo de código basado en soluciones de la comunidad de Liquidsoap :
# Variable que se activa justo cuando el DJ se desconecta
to_autodj = ref(false)
# Función de transición personalizada
def custom_transition(old, new) =
if !to_autodj then
# --- CASO: Volviendo del DJ al AutoDJ ---
# Reseteamos la variable
to_autodj := false
# Hacemos una transición simple, SIN crossfade para evitar el buffer
sequence([fade.out(old.source), fade.in(new.source)])
else
# --- CASO: Transición normal entre canciones ---
# Usa la transición inteligente por defecto
cross.smart(old, new, fade_in=2.00, fade_out=2.00)
end
end
# Aplicamos el crossfade personalizado a tu fuente de radio
radio = cross(minimum=0., duration=3.00, custom_transition, radio)
# --- Lógica para detectar la desconexión del DJ ---
# (Este es un ejemplo conceptual)
# Cuando tu fuente 'live' deje de tener datos, activas la variable
def on_live_end() =
to_autodj := true
# ... resto de la lógica para cambiar a la fuente 'radio' ...
end
???? Resumen y Próximos Pasos
-
Comienza por lo fácil: Verifica las frecuencias de muestreo y prueba ajustando o desactivando el crossfade desde el panel de MediaCP .
-
Si persiste: El problema es el buffer. La solución definitiva implica implementar una transición personalizada como la del ejemplo .
-
Recuerda: MediaCP gestiona Liquidsoap, pero no controla toda su lógica interna. Para ajustes tan específicos, es posible que necesites asistencia de un desarrollador o contactar a la comunidad de Liquidsoap .
Espero que esta guía te ayude a localizar y resolver el problema. Si tienes más detalles sobre cómo se comporta el corte (si suena un fragmento de la canción anterior o si hay silencio), puedo ayudarte a precisar aún más la solución.