Menu

Audio en HTML: la etiqueta audio, controls, autoplay y loop

El elemento <audio> reproduce archivos de sonido con el reproductor integrado del navegador. Aprende el marcado, los atributos (controls, autoplay, loop, muted, preload), qué formatos usar, por qué se bloquea el autoplay con sonido y cómo crear tu propio botón de reproducir con JavaScript.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Cómo poner audio

Apunta el elemento <audio> a un archivo de sonido y añade controls:

<audio src="song.mp3" controls></audio>

controls muestra el reproductor del navegador: reproducir y pausar, una línea de tiempo, el tiempo y un control de volumen. Sin controls, el elemento no ocupa ningún espacio. La vista previa no puede cargar archivos de tu ordenador, así que este ejemplo crea un archivo WAV corto en el navegador con un script y lo usa como src. Pulsa reproducir:

El reproductor se ve distinto en Chrome, Firefox y Safari, porque cada navegador dibuja el suyo. Borra controls y el reproductor desaparece, aunque el audio sigue ahí para que JavaScript lo reproduzca.

Atributos de audio

AtributoQué hace
controlsMuestra el reproductor del navegador
autoplayIntenta empezar a reproducirse al cargar (bloqueado con sonido, ver más abajo)
loopVuelve a empezar cuando termina el archivo
mutedEmpieza con el volumen desactivado
preloadnone (no descarga nada hasta reproducir), metadata (solo la duración) o auto (decide el navegador)
srcEl archivo que se reproduce; o usa hijos <source> para varios formatos

Usa preload="none" o "metadata" en páginas con muchos reproductores, como una lista de episodios de un pódcast, para que la página no descargue todos los archivos de entrada.

Formatos y alternativas

Lista varios archivos con <source> y el navegador reproduce el primero que admita. El texto dentro del elemento solo aparece en los navegadores sin soporte de <audio>:

<audio controls preload="metadata">
  <source src="episode.opus" type="audio/ogg; codecs=opus">
  <source src="episode.mp3" type="audio/mpeg">
  <p>Your browser cannot play audio. <a href="episode.mp3">Download the episode</a>.</p>
</audio>
FormatoTipo MIMENotas
MP3audio/mpegSe reproduce en todos los navegadores actuales; la opción segura si solo tienes uno
AAC (.m4a)audio/mp4Soporte amplio, buena calidad con archivos pequeños
Opus o Vorbis (.ogg, .webm)audio/ogg, audio/webmArchivos pequeños; lista un MP3 como alternativa, porque el soporte de Safari varía según la versión
WAVaudio/wavSin comprimir y pesado; vale para efectos de sonido cortos

Por qué falla el autoplay

Los navegadores no dejan que una página empiece a sonar por su cuenta. autoplay, o llamar a play() antes de que el usuario haya hecho clic o tocado la pantalla, se rechaza. Este ejemplo intenta reproducir al cargar e imprime lo que pasó, y luego ofrece un botón:

Normalmente verás NotAllowedError, el error que da un navegador cuando bloquea la reproducción. El botón funciona porque un clic cuenta como permiso. Cada navegador tiene sus propias reglas extra (Chrome, por ejemplo, recuerda los sitios en los que sueles reproducir contenido), así que nunca confíes en el autoplay: inicia el sonido desde una acción del usuario y gestiona siempre la promesa que devuelve play().

new Audio(url) crea un elemento de audio en JavaScript sin añadirlo a la página, lo que resulta práctico para efectos de sonido.

Crea tus propios controles

Oculta el reproductor integrado omitiendo controls, y maneja el elemento con su API de JavaScript: play(), pause(), currentTime, duration, volume y eventos como timeupdate y ended:

El botón es un <button> real, así que funciona con el teclado, y su etiqueta cambia entre Play y Pause. Al final del archivo, el navegador pausa el elemento y dispara ended, así que el botón vuelve solo a Play. Si creas controles propios, también asumes lo que los integrados te daban sin hacer nada: soporte de teclado, etiquetas y un control de volumen.

Accesibilidad

  • Nunca empieces a sonar solo. Interrumpe a los lectores de pantalla y asusta a la gente. Inicia el audio desde un clic.
  • Ofrece una transcripción para pódcasts y audio hablado. Basta con un enlace a una versión en texto bajo el reproductor, y los buscadores pueden leerla.
  • Mantén controls, o crea controles con botones reales, para que el audio se pueda pausar con el teclado.

Para vídeo con sonido, subtítulos y pósteres, consulta la página de la etiqueta video; <audio> comparte la mayoría de sus atributos y toda su API de JavaScript.

Errores comunes

  • Olvidar controls. El elemento es invisible sin él, y parece que no ha pasado nada.
  • Esperar que autoplay funcione. Inicia la reproducción desde un clic y gestiona la promesa de play().
  • Una ruta o un tipo de archivo equivocados. Abre la URL del archivo directamente para comprobarla, y haz que type coincida con el formato real (audio/mpeg para MP3).
  • Cargar todos los archivos de una lista larga. Usa preload="none" o "metadata".
  • Música de fondo que no se puede parar. Da siempre a la gente una forma visible de pausar.

Preguntas frecuentes

¿Cómo pongo audio en una página HTML?

Usa <audio src="song.mp3" controls></audio>. El atributo controls muestra el reproductor del navegador con un botón de reproducir, una línea de tiempo y el volumen. Sin él, el elemento es invisible.

¿Por qué mi audio no se reproduce automáticamente?

Los navegadores bloquean el audio que empieza con sonido antes de que el usuario haya interactuado con la página. Inicia la reproducción desde un clic con audio.play(). Un elemento silenciado sí puede reproducirse solo, pero en el caso del audio rara vez sirve de algo.

¿Qué formato de audio debo usar en HTML?

MP3 se reproduce en todos los navegadores actuales, así que es la opción segura para un solo archivo. AAC en un archivo .m4a también tiene un soporte amplio. Usa elementos <source> para ofrecer más de un formato.

¿Cómo repito un audio en bucle en HTML?

Añade el atributo loop: <audio src="rain.mp3" controls loop>. Cuando el archivo termina, vuelve a empezar desde el principio.

¿Cómo reproduzco un sonido con JavaScript?

Crea o selecciona un elemento de audio y llama a play(), por ejemplo new Audio('click.mp3').play() dentro de un manejador de clic. play() devuelve una promesa que se rechaza si el navegador bloquea la reproducción.

¿Puedo dar estilo al reproductor de audio de HTML?

Solo un poco: puedes fijar su ancho, su margen y su display, pero los botones de dentro los dibuja el navegador y se ven distintos en cada uno. Para un aspecto propio, oculta los controles y crea los tuyos con botones y la API de audio de JavaScript.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR