Sistema de Audio¶
Race Coordinator AI incorpora un motor de audio inteligente de doble canal diseñado para ofrecer efectos de sonido envolventes, comentarios de voz dinámicos y anuncios críticos de control de carrera sin superposiciones caóticas ni avisos perdidos.
Arquitectura de Audio de Doble Canal¶
El motor de audio separa el sonido en dos canales independientes:
┌────────────────────────────────────────┐
│ Distribuidor de Audio │
└───────────────────┬────────────────────┘
│
┌───────────────────────┴───────────────────────┐
▼ ▼
┌────────────────────────┐ ┌────────────────────────┐
│ Efectos de Sonido │ │ Avisos de Voz │
│ (SFX Breves) │ │ (TTS y Comentarios) │
└────────────┬───────────┘ └────────────┬───────────┘
│ │
▼ ▼
Reproducción Polifónica Voz Única Priorizada
(Múltiples tonos a la vez) ("Reproducir, Reemplazar,
│ Descartar")
│◄──────── Atenuación Automática (Ducking) ─────┤
│ (Los SFX bajan automáticamente al 20% │
│ de volumen mientras la voz habla) │
1. Efectos de Sonido (SFX)¶
- Qué incluye: Tonos cortos no verbales como pitidos de paso por vuelta (
default_beep), efectos de aceleración (default_driveby) o campanas. - Reproducción Polifónica: Se reproducen de inmediato usando elementos HTML5. Si varios coches cruzan la meta al mismo tiempo, cada uno activa su propio tono sin interrumpir a los demás.
- Atenuación Automática (Audio Ducking): Mientras se reproduce un mensaje de voz, el volumen de los efectos de sonido se reduce automáticamente al 20%. Al terminar la voz, los efectos recuperan el 100% de su volumen.
2. Avisos de Voz Hablada¶
- Qué incluye: Locuciones de texto a voz (TTS) y archivos de audio verbales grabados (comentarios, sirenas de bandera amarilla, avisos de parada en boxes y cuentas atrás).
- Motor de Voz Única: Se gestionan mediante una cola inteligente con la regla "Reproducir, Reemplazar o Descartar", evitando que varias voces hablen al mismo tiempo.
El Sistema de Prioridades¶
Para gestionar eventos simultáneos (pasos por vuelta, cambios de líder, banderas amarillas, anuncios de tiempo), Race Coordinator AI emplea una jerarquía de 4 niveles de prioridad:
Niveles de Prioridad¶
| Nivel | Peso | Eventos Típicos | Comportamiento en Conflicto |
|---|---|---|---|
urgent (Urgente) |
4 | Bandera amarilla, manga terminada, carrera terminada, salida en falso, tiempo mínimo de vuelta, vuelta de drift, entrada a boxes, alertas de combustible (aviso, crítico, vacío). | Interrumpe de inmediato cualquier voz de menor prioridad. Si ya hay una locución urgente hablando, los nuevos avisos urgentes se colocan en la Cola Urgente en lugar de descartarse. Omite la pausa de cadencia. |
high (Alta) |
3 | Récord absoluto de pista, récord absoluto de carril, nuevo líder de carrera, mejor vuelta de carrera. | Interrumpe avisos de prioridad normal o low. Se descarta si hay una locución urgent o de prioridad igual/superior activa. |
normal (Normal) |
2 | Avisos de tiempo (ej. "30 segundos restantes"), mitad de manga, mejor vuelta de manga, mejor vuelta de carril de carrera, nuevo líder de manga, mejor vuelta personal (en modo TTS). | Interrumpe avisos low. Se descarta si suena una locución urgent, high u otra locución normal. |
low (Baja) |
1 | Sonido de vuelta rutinaria del piloto (en modo TTS). | Solo se reproduce si el canal está libre. Se descarta si cualquier otro aviso está hablando. |
Reglas de Conflicto¶
- Reemplazo (Preemption): Si llega un aviso con mayor prioridad que la locución actual, esta se detiene inmediatamente para dar paso al nuevo aviso.
- Descarte (Dropping): Si un aviso entrante tiene igual o menor prioridad que el que está hablando, se descarta para evitar que las voces se mezclen.
- Cola Urgente (Urgent Queueing): Las alertas urgentes son críticas para el control de carrera. Si llega una alerta urgente mientras otra está hablando, se encola y suena tan pronto como termine la actual.
- Pausa de Cadencia (Callout Spacing): Tras terminar un aviso hablado, se inserta una breve pausa de silencio antes de permitir el siguiente aviso no urgente, asegurando una escucha clara.
Prioridad de Hitos y Respaldo (Milestone Priority & Fallback)¶
Cuando un piloto completa una vuelta que activa uno o más hitos (como récords de pista, mejor vuelta de manga o cambio de líder):
- Cascada de prioridad para eventos simultáneos: Los sonidos candidatos de hitos se evalúan en estricto orden de prioridad (Récord general -> Récord general de carril -> Nuevo líder de carrera -> Nuevo líder de manga -> Mejor vuelta de carrera -> Mejor vuelta de carril de carrera -> Mejor vuelta de manga -> Mejor vuelta personal). Si el sonido de mayor prioridad está configurado como
none(o no configurado), el sistema pasa al siguiente sonido de mayor prioridad activado en esa vuelta y lo reproduce si está configurado. - Avisos descartados por canal ocupado: Si una locución verbal seleccionada se descarta porque otra de mayor prioridad está sonando (o durante una pausa de cadencia), no se reproducirá ningún otro aviso verbal en esa vuelta. En su lugar, el sistema recurre directamente al sonido de mejor vuelta personal (si fue PB) o al tono de vuelta estándar.
- Respaldo polifónico SFX: Si el sonido de respaldo es un efecto de sonido (SFX), suena polifónicamente, garantizando que el piloto reciba confirmación auditiva inmediata al cruzar la línea de meta.
Opciones de Configuración de Audio¶
En el Editor de Interfaz, dentro de la sección Configuración de Audio, encontrará los siguientes ajustes:
Volumen Maestro¶
- Rango: 0% a 100% (Predeterminado:
100%) - Descripción: Ajusta el nivel de volumen global de la aplicación, escalando tanto los efectos de sonido como la síntesis de voz.
Tiempo de Espera de Cola Urgente (TTL)¶
- Opciones:
3 segundos,5 segundos (Predeterminado),10 segundos - Descripción: Tiempo máximo que una alerta urgente puede esperar en la cola si otra alerta urgente ya está hablando. Las alertas caducadas se descartan para no anunciar eventos desfasados.
Espaciado de Avisos (Pausa de Cadencia)¶
- Opciones:
Ninguno (0s),Corto (500ms - Predeterminado),Normal (1000ms),Relajado (1500ms) - Descripción: Intervalo mínimo de silencio entre locuciones habladas consecutivas para evitar que se amontonen. Las alertas urgentes omiten esta pausa inmediatamente.
Configuración de Texto a Voz (TTS)¶
Race Coordinator AI utiliza la API Web Speech nativa del navegador para ofrecer síntesis de voz sin latencia y sin depender de servicios en la nube ni conexión a internet.
Parámetros de Voz TTS¶
| Ajuste | Rango / Opciones | Predeterminado | Descripción |
|---|---|---|---|
| Voz TTS | Voces del navegador / SO | -- Predeterminado -- |
Selecciona la voz utilizada para los avisos hablados (con códigos de idioma como es-ES, en-US). |
| Velocidad (Rate) | 0.1x a 2.0x |
1.0x |
Controla la velocidad de habla. Velocidades ligeramente más rápidas (1.1x–1.3x) son ideales para pistas rápidas. |
| Tono (Pitch) | 0.0x a 2.0x |
1.0x |
Ajusta la frecuencia o tono de la voz. |
| Volumen TTS | 0% a 100% |
100% |
Volumen independiente de la voz antes de ser multiplicado por el Volumen Maestro (masterVolume * ttsVolume). |
| Probar Voz | Botón | — | Reproduce una locución de prueba con los ajustes actuales. |
Variables Dinámicas en TTS¶
Los textos TTS aceptan variables entre llaves {...} o ${...}:
- {driver.name}, {driver.nickname}: Nombre y apodo del piloto.
- {driver.lastLapTime}, {driver.bestLapTime}: Tiempos de vuelta (redondeados automáticamente a 3 decimales).
- {driver.totalLaps} / {driver.lapCount}: Total de vueltas completadas.
- {driver.gapLeader}, {driver.gapPosition}: Diferencias de tiempo con el líder o el coche precedente.
- {race.name}, {track.name}, {heat.number}: Contexto del evento.
Para más información, consulte la Guía de Texto a Voz (TTS).
Relevancia de Audio y Filtrado Multipantalla¶
En configuraciones con varios monitores (pantalla principal, puestos de piloto, pantallas de boxes), la Relevancia de Audio evita que todos los dispositivos emitan todos los sonidos a la vez.
1. Asociaciones de Audio (Audio Associations)¶
Cada sonido incluye información de contexto:
- widgetType: Tipo de widget ('lane-view', 'countdown', 'timer', 'flag').
- laneIndex: Número de carril (índice 0).
- driverId: Identificador único del piloto.
2. Filtrado por Diseño en Pantalla Principal¶
- Vista de Carriles (
lane-view): Si el diseño no tiene ningún widget de carril, los sonidos de vuelta de los pilotos se silencian. - Cuenta Atrás (
countdown): Si no hay widget de cuenta atrás, se silencian los pitidos de salida. - Temporizador (
timer): Si no hay temporizador, se silencian los avisos de mitad de manga y tiempo restante. - Banderas (
flag): Si no hay widget de banderas, se silencian los sonidos de bandera amarilla y final de carrera.
3. Puestos de Piloto Aislados (scoped)¶
En la pantalla de un puesto de piloto (/driver-station/:lane), el filtro opera en modo acotado (scoped):
- Solo se reproducen los sonidos, récords y alertas de combustible del piloto asignado.
- Los sonidos de los pilotos rivales se filtran en silencio para no desconcentrar al competidor.
- Los avisos globales (cuenta atrás, banderas amarillas, fin de manga) se mantienen audibles.
4. Motores de Audio Independientes por Ventana¶
Cada pestaña o ventana ejecuta una instancia aislada de AudioService (providers: [AudioService]), garantizando que los sonidos de un puesto de piloto nunca interfieran con la pantalla del director de carrera.
Catálogo Completo de Recursos de Audio¶
Las siguientes tablas detallan todos los eventos de audio en Race Coordinator AI, su tipo de sonido (SFX no verbal vs. aviso de voz verbal), nivel de prioridad y ámbito de relevancia en pantalla.
Eventos de Audio del Piloto (Configurados en el Editor de Pilotos)¶
| Evento de Audio del Piloto | Cuándo se reproduce | Archivo / Activo Predeterminado | Tipo de Sonido | Nivel de Prioridad | Relevancia y Pantalla |
|---|---|---|---|---|---|
| Sonido de Vuelta | Se reproduce en cada vuelta regular completada (o como respaldo si el sonido de hito se descarta o no está disponible). | default_beep |
SFX (Predefinido) / Aviso de Voz (TTS) | low (Peso 1 en TTS; Polifónico en SFX) |
lane-view: Suena en Pantalla Principal (si hay widget de carril) y en el Puesto de Piloto de ese carril/piloto. |
| Sonido de Mejor Vuelta Personal | Se reproduce cuando el piloto logra su tiempo de vuelta más rápido de la manga o sesión actual. | default_driveby |
SFX (Predefinido) / Aviso de Voz (TTS) | normal (Peso 2 en TTS; Polifónico en SFX) |
lane-view: Suena en Pantalla Principal (si hay widget de carril) y en el Puesto de Piloto de ese carril/piloto. |
| Sonido de Mejor Vuelta de Carrera | Se reproduce al marcar la vuelta más rápida de toda la carrera entre todas las mangas y carriles. | default_best_race_lap |
Aviso de Voz | high (Peso 3) |
lane-view: Suena en Pantalla Principal y en el Puesto de Piloto de ese carril/piloto. |
| Sonido de Mejor Vuelta de Carril de Carrera | Se reproduce al lograr la vuelta más rápida en ese carril específico durante la carrera actual. | default_best_race_lane_lap |
Aviso de Voz | normal (Peso 2) |
lane-view: Suena en Pantalla Principal y en el Puesto de Piloto de ese carril/piloto. |
| Sonido de Mejor Vuelta de Manga | Se reproduce cuando el piloto logra la vuelta más rápida entre todos los participantes de la manga activa. | default_best_heat_lap |
Aviso de Voz | normal (Peso 2) |
lane-view: Suena en Pantalla Principal y en el Puesto de Piloto de ese carril/piloto. |
| Sonido de nuevo líder de carrera | Se reproduce cuando un piloto pasa al primer puesto de la clasificación general de la carrera. | default_new_race_leader |
Aviso de Voz | high (Peso 3) |
lane-view: Suena en Pantalla Principal y en el Puesto de Piloto de ese carril/piloto. |
| Sonido de nuevo líder de manga | Se reproduce cuando un piloto toma el liderato en la manga activa. | default_new_heat_leader |
Aviso de Voz | normal (Peso 2) |
lane-view: Suena en Pantalla Principal y en el Puesto de Piloto de ese carril/piloto. |
| Sonido de Récord de Vuelta General | Se reproduce cuando se bate el récord histórico de pista entre todos los carriles y carreras anteriores. | default_record_lap |
Aviso de Voz | high (Peso 3) |
lane-view: Suena en Pantalla Principal y en el Puesto de Piloto de ese carril/piloto. |
| Sonido de Récord de Vuelta de Carril General | Se reproduce cuando se bate el récord histórico de pista en ese carril específico. | default_record_lane_lap |
Aviso de Voz | high (Peso 3) |
lane-view: Suena en Pantalla Principal y en el Puesto de Piloto de ese carril/piloto. |
| Sonido de Entrada a Boxes | Se reproduce cuando el coche entra en el carril de boxes o zona de repostaje. | default_pit_in |
Aviso de Voz | urgent (Peso 4) |
lane-view: Suena en Pantalla Principal y en el Puesto de Piloto de ese carril/piloto. |
| Sonidos de Nivel de Combustible | Se reproduce cuando el nivel de combustible baja al umbral de advertencia, crítico o vacío. | default_fuel_level (Conjunto de Audio) |
Aviso de Voz | urgent (Peso 4) |
lane-view: Suena en Pantalla Principal y en el Puesto de Piloto de ese carril/piloto. |
| Sonido de Salida en Falso | Se reproduce cuando se detecta una salida en falso o infracción en la línea de salida. | default_penalty |
Aviso de Voz | urgent (Peso 4) |
lane-view: Suena en Pantalla Principal y en el Puesto de Piloto de ese carril/piloto. |
Eventos de Audio de Tema (Configurados en el Gestor de Temas)¶
| Ranura de Audio | Clave Predeterminada | Tipo de Sonido | Nivel de Prioridad | Relevancia y Pantalla |
|---|---|---|---|---|
| Cuenta Atrás de Salida | audio.countdown |
Aviso de Voz / Conjunto de Audio | urgent |
countdown: Suena en Pantalla Principal (si hay widget de cuenta atrás) y en todos los Puestos de Piloto. |
| Semáforo Verde / SALIDA | audio.countdown.green |
Aviso de Voz / Tono Predefinido | urgent |
countdown: Suena en Pantalla Principal (si hay widget de cuenta atrás) y en todos los Puestos de Piloto. |
| Bandera Amarilla | audio.yellowflag |
Aviso de Voz (Sirena de Aviso) | urgent (Peso 4) |
flag: Suena en Pantalla Principal (si hay widget de bandera) y en todos los Puestos de Piloto. |
| Segundos Restantes de Inicio Automático | audio.auto_start |
Aviso de Voz / Conjunto de Audio (Predeterminado: TTS) | normal (Peso 2) |
timer: Suena en Pantalla Principal (si hay widget de temporizador) y en todos los Puestos de Piloto. |
| Tiempo de Manga / Segundos Restantes | audio.seconds_left |
Aviso de Voz | normal (Peso 2) |
timer: Suena en Pantalla Principal (si hay widget de temporizador) y en todos los Puestos de Piloto. |
| Vueltas del Líder / Vueltas Restantes | audio.laps_left |
Aviso de Voz / Conjunto de Audio | normal (Peso 2) |
timer: Suena en Pantalla Principal (si hay widget de temporizador) y en todos los Puestos de Piloto. Anuncia las vueltas restantes del líder; un valor de 0 anuncia cuando el líder completa el recuento de vueltas (p. ej., «Líder finalizó» en carreras con permitir finalizar). |
| Mitad de Manga | audio.seconds_left.halfway |
Aviso de Voz | normal (Peso 2) |
timer: Suena en Pantalla Principal (si hay widget de temporizador) y en todos los Puestos de Piloto al alcanzar la mitad de la serie (por tiempo o cuando el líder completa la mitad de las vueltas). |
| Manga Terminada | audio.heat_over |
Aviso de Voz | urgent (Peso 4) |
flag: Suena en Pantalla Principal (si hay widget de bandera) y en todos los Puestos de Piloto. |
| Segundos Restantes de Avance Automático | audio.auto_advance |
Aviso de Voz / Conjunto de Audio (Predeterminado: TTS) | normal (Peso 2) |
timer: Suena en Pantalla Principal (si hay widget de temporizador) y en todos los Puestos de Piloto. |
| Carrera Terminada | audio.race_over |
Aviso de Voz | urgent (Peso 4) |
flag: Suena en Pantalla Principal (si hay widget de bandera) y en todos los Puestos de Piloto. |
| Tiempo Mínimo de Vuelta | audio.min_lap_time |
Aviso de Voz | urgent (Peso 4) |
lane-view: Suena en Pantalla Principal y en el Puesto de Piloto de ese carril/piloto. |
| Vuelta de Drift | audio.drift_lap |
Aviso de Voz | urgent (Peso 4) |
lane-view: Suena en Pantalla Principal y en el Puesto de Piloto de ese carril/piloto. |
Conjuntos de Audio y Modos de Activación¶
Un Conjunto de Audio es un activo compuesto que contiene una colección de archivos de sonido o locuciones de texto a voz asignadas a umbrales numéricos específicos. Los conjuntos de audio se utilizan en 5 ranuras de tema y en ajustes de combustible:
- Cuenta regresiva de salida (
audio.countdown): Tonos de secuencia y bocinas previas a la salida. - Segundos restantes de inicio automático (
audio.auto_start): Avisos de voz antes de comenzar una manga. - Tiempo de manga / Segundos restantes (
audio.seconds_left): Avisos de tiempo en mangas por tiempo. - Vueltas del líder / Vueltas restantes (
audio.laps_left): Avisos de vueltas en mangas por vueltas. - Segundos restantes de avance automático (
audio.auto_advance): Avisos entre mangas antes del avance automático. - Sonidos de nivel de combustible (
fuelLevelAudio): Avisos de advertencia, crítico y repostaje según porcentaje.
Modos de activación: Restante vs. Transcurrido¶
Cada entrada de un Conjunto de Audio define un Modo de activación:
- Restante (Cuenta regresiva): Se activa a medida que la carrera se aproxima a la meta o límite de tiempo (p. ej. 10 vueltas restantes, 30 segundos restantes). Es el modo predeterminado para cuentas regresivas.
- Transcurrido (Conteo ascendente): Se activa a medida que la carrera progresa desde el inicio (p. ej. 10 vueltas completadas, 30 segundos transcurridos).
Señales duales con valores numéricos idénticos¶
Race Coordinator AI permite configurar dos entradas en el mismo Conjunto de Audio con exactamente el mismo valor numérico (p. ej. valor 10):
- Una entrada configurada como Transcurrido sonará cuando el líder alcance 10 vueltas o segundos desde el inicio.
- Otra entrada configurada como Restante sonará cuando falten 10 vueltas o segundos para el final.
Vista previa en orden natural de carrera¶
Al previsualizar un Conjunto de Audio en el Gestor de Activos o en el Selector de Audio, las entradas se reproducen en el orden cronológico de la carrera: 1. Todas las entradas Transcurrido se reproducen primero en orden ascendente (0 → N). 2. Todas las entradas Restante se reproducen a continuación en orden descendente de cuenta regresiva (N → 0).
Dónde se Configura el Audio¶
| Ubicación | Qué se puede configurar |
|---|---|
| Editor de Interfaz -> Ajustes de Audio | Volumen maestro, tiempo límite de cola urgente, espaciado de avisos, voz TTS, velocidad, tono, volumen TTS y botón de prueba. |
| Editor de Temas | Sonidos globales: cuenta atrás, semáforo verde, bandera amarilla, tiempo restante, mitad de manga, fin de manga, fin de carrera, tiempo mínimo y vuelta de drift. |
| Editor de Pilotos | Sonidos específicos del piloto: Sonido de Vuelta, Sonido de Mejor Vuelta Personal, Sonido de Mejor Vuelta de Carrera, Sonido de Mejor Vuelta de Carril de Carrera, Sonido de Mejor Vuelta de Manga, Sonido de nuevo líder de carrera, Sonido de nuevo líder de manga, Sonido de Récord de Vuelta General, Sonido de Récord de Vuelta de Carril General, Sonido de Entrada a Boxes, Sonidos de Nivel de Combustible y Sonido de Salida en Falso. |
| Gestor de Activos | Subida y administración de archivos WAV, MP3 y OGG, y configuración de conjuntos de audio con valores de activación según el contexto (segundos, vueltas o porcentaje), con previsualización inmediata. |