# Música y efectos — versión 18

## Archivos y módulos

- `assets/audio/viaje-solar-01.mp3`: copia sin modificar de «Música principal — «Viaje por el sistema solar» (1).mp3», aportada por el usuario.
- `assets/audio/viaje-solar-02.mp3`: copia sin modificar de la pieza (2), aportada por el usuario.
- `js/sonido.js`: reproducción, cola aleatoria sin repetición seguida, preferencias locales, pausa en segundo plano y síntesis de efectos.
- `js/sonido-interfaz.js`: botón compacto, ajustes, traslado del control a pantalla completa y conexión de gestos con efectos.
- `css/sonido.css`: presentación del control y el desplegable.
- `js/principal.js`: conecta el panel al simulador; `js/interfaz.js` comunica la navegación al visor.

La música usa el elemento de audio del navegador; no necesita cargar MP3 mediante fetch ni decodificarlos como Web Audio. Funciona desde index.html con doble clic y desde un servidor web. Se reproduce una sola pista a la vez, a velocidad normal, independiente de la fecha simulada. La primera canción se elige al azar; con dos canciones y evitando repeticiones inmediatas, las siguientes se alternan. Se conservan los silencios y finales originales: no se promete una unión musical imperceptible.

## Uso y límites

El panel pide un único inicio automático al abrir, con la música activada por defecto. Respeta el silencio, el canal desactivado y el volumen cero guardados. Si la página se abre oculta, difiere ese intento hasta hacerse visible. Cuando el navegador rechaza autoplay, el primer clic real al explorar, o una tecla de movimiento con el visor enfocado, permite un único reintento pasivo. Si ese gesto ocurrió antes de recibir el rechazo, espera al siguiente gesto: no reintenta desde una promesa, un reloj o un bucle. Las acciones del propio panel no disparan esta recuperación pasiva. El navegador conserva sus permisos y puede seguir exigiendo reproducción explícita. **Reproducir música** recupera el canal musical; sólo ese botón cambia un volumen cero al 35 %. Los ajustes se guardan localmente con la clave `solar-audio-v18`. Si el navegador bloquea almacenamiento local, funcionan durante la sesión.

**Silenciar** pausa la música y detiene efectos, también cuando el inicio está cargando o bloqueado. Después muestra **Activar sonido** para recuperarlo. El texto del estado y la ayuda del botón explican cuándo la música espera el primer clic, sin confundir ese bloqueo con un archivo fallido. Las casillas permiten conservar sólo música o sólo efectos. La aplicación pausa al ocultar su pestaña y reanuda únicamente una reproducción que ya estaba activa. **Otra canción** cambia sin superponer dos reproductores. Si una pista no está disponible, intenta la otra; si las dos fallan, informa del problema sin un bucle de reintentos.

Web Audio sólo se crea o reanuda después de un gesto; el inicio automático usa únicamente el reproductor HTMLAudio. El primer gesto desbloquea también los efectos aunque la música ya haya empezado. Los efectos se sintetizan con Web Audio: clic de 0,06 s, cambio de opción de 0,12 s, confirmación de 0,20 s y transición/movimiento de 0,56 s. Usan envolventes suaves, tonos sinusoidales y ruido filtrado, con volumen contenido y límites de frecuencia de repetición. Se liberan los nodos al finalizar. No requieren bibliotecas ni archivos de efectos externos. No representan ondas sonoras propagándose por el vacío.

## Procedencia

Las dos músicas son archivos aportados por el usuario para incorporarlos al proyecto. Se conserva su contenido original. Esta integración no verifica el plan de Suno ni concede derechos adicionales sobre esas piezas; su licencia corresponde a la de los archivos originales. Los efectos y el código de síntesis se han creado para este proyecto, sin muestras externas.

## Comprobaciones

`node tests/sonido.cjs` comprueba la cola, el final automático, errores y bloqueos, silencio, preferencias, carreras entre solicitudes y visibilidad. `node tests/sonido-interfaz.cjs` comprueba interacción y controles. La verificación visual usa el navegador y los MP3 originales.

## Corrección del inicio (18.1)

El panel ya no presenta «Sonido activo» como si hubiera música cuando está desactivada o al 0 %. Distingue silencio, sólo efectos, canales apagados, carga y reproducción. El contador proviene de currentTime/duration del reproductor y se actualiza con eventos del medio, como máximo una vez por segundo.

Fuentes de comportamiento de reproducción del navegador: [Autoplay en Chromium](https://www.chromium.org/audio-video/autoplay/). No se cambian permisos ni preferencias del navegador.

## Inicio activado por defecto (18.2)

El botón principal expresa la acción disponible: **Silenciar** cuando el sonido está habilitado, **Activar sonido** tras silenciarlo. La carga, el bloqueo del navegador, el canal apagado, el volumen cero y los errores de archivo se muestran en el estado del panel y en la ayuda del botón. El contador y la indicación de reproducción sólo avanzan cuando el medio confirma la reproducción. No se fuerza el volumen ni se borran preferencias para aparentar que hay sonido.

La cola, el cambio de pista, el fallback al otro archivo y los canales independientes se conservan. Un segundo rechazo del navegador detiene los reintentos pasivos; el botón **Reproducir música** permite intentarlo expresamente.
