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
| Atributo | Qué hace |
|---|---|
controls | Muestra el reproductor del navegador |
autoplay | Intenta empezar a reproducirse al cargar (bloqueado con sonido, ver más abajo) |
loop | Vuelve a empezar cuando termina el archivo |
muted | Empieza con el volumen desactivado |
preload | none (no descarga nada hasta reproducir), metadata (solo la duración) o auto (decide el navegador) |
src | El 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>
| Formato | Tipo MIME | Notas |
|---|---|---|
| MP3 | audio/mpeg | Se reproduce en todos los navegadores actuales; la opción segura si solo tienes uno |
AAC (.m4a) | audio/mp4 | Soporte amplio, buena calidad con archivos pequeños |
Opus o Vorbis (.ogg, .webm) | audio/ogg, audio/webm | Archivos pequeños; lista un MP3 como alternativa, porque el soporte de Safari varía según la versión |
| WAV | audio/wav | Sin 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
autoplayfuncione. Inicia la reproducción desde un clic y gestiona la promesa deplay(). - Una ruta o un tipo de archivo equivocados. Abre la URL del archivo directamente para comprobarla, y haz que
typecoincida con el formato real (audio/mpegpara 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.