Menu

Áudio em HTML: a tag audio, controls, autoplay e loop

O elemento <audio> reproduz arquivos de som com o player nativo do navegador. Veja a marcação, os atributos (controls, autoplay, loop, muted, preload), quais formatos usar, por que o autoplay com som é bloqueado e como criar o seu próprio botão de play com JavaScript.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Como colocar áudio

Aponte o elemento <audio> para um arquivo de som e adicione controls:

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

controls mostra o player do navegador: play e pause, uma linha do tempo, o tempo e um controle de volume. Sem controls o elemento não ocupa espaço nenhum. A prévia não consegue carregar arquivos do seu computador, então este exemplo cria um arquivo WAV curto no navegador com um script e o usa como src. Aperte play:

O player fica diferente no Chrome, no Firefox e no Safari, porque cada navegador desenha o seu. Apague controls e o player some, mas o áudio continua ali para o JavaScript tocar.

Atributos do áudio

AtributoO que faz
controlsMostra o player do navegador
autoplayTenta começar a tocar ao carregar (bloqueado com som, veja abaixo)
loopRecomeça quando o arquivo termina
mutedComeça com o volume desligado
preloadnone (não baixa nada até o play), metadata (só a duração) ou auto (o navegador decide)
srcO arquivo a tocar; ou use filhos <source> para vários formatos

Use preload="none" ou "metadata" em páginas com muitos players, como uma lista de episódios de podcast, para que a página não baixe todos os arquivos de uma vez.

Formatos e alternativas

Liste vários arquivos com <source> e o navegador toca o primeiro que ele suporta. O texto dentro do elemento só aparece em navegadores sem suporte a <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 MIMEObservações
MP3audio/mpegToca em todos os navegadores atuais; a escolha segura para um arquivo só
AAC (.m4a)audio/mp4Amplo suporte, boa qualidade em tamanhos pequenos
Opus ou Vorbis (.ogg, .webm)audio/ogg, audio/webmArquivos pequenos; liste MP3 como alternativa, porque o suporte do Safari varia conforme a versão
WAVaudio/wavSem compressão e grande; serve para efeitos sonoros curtos

Por que o autoplay falha

Os navegadores não deixam uma página começar a fazer som sozinha. autoplay, ou chamar play() antes de o usuário clicar ou tocar na tela, é recusado. Este exemplo tenta tocar ao carregar e mostra o que aconteceu, depois oferece um botão:

Normalmente você vai ver NotAllowedError, o erro que o navegador dá quando bloqueia a reprodução. O botão funciona porque um clique conta como permissão. Cada navegador tem as suas próprias regras extras (o Chrome, por exemplo, lembra dos sites em que você costuma tocar mídia), então nunca conte com o autoplay: inicie o som a partir de uma ação do usuário e trate sempre a promise que play() retorna.

new Audio(url) cria um elemento de áudio no JavaScript sem adicioná-lo à página, o que é prático para efeitos sonoros.

Crie os seus próprios controles

Esconda o player nativo deixando controls de fora, e controle o elemento pela sua API de JavaScript: play(), pause(), currentTime, duration, volume e eventos como timeupdate e ended:

O botão é um <button> de verdade, então funciona com o teclado, e o rótulo alterna entre Play e Pause. No fim do arquivo o navegador pausa o elemento e dispara ended, então o botão volta para Play sozinho. Se você cria controles próprios, também assume o que os nativos davam de graça: suporte a teclado, rótulos e controle de volume.

Acessibilidade

  • Nunca comece um som sozinho. Ele interrompe os leitores de tela e assusta as pessoas. Inicie o áudio a partir de um clique.
  • Ofereça uma transcrição para podcasts e áudio falado. Um link para uma versão em texto abaixo do player basta, e os buscadores conseguem lê-la.
  • Mantenha controls, ou crie controles com botões de verdade, para que o áudio possa ser pausado pelo teclado.

Para vídeo com som, legendas e posters, veja a página da tag video; <audio> compartilha a maioria dos atributos e toda a API de JavaScript.

Erros comuns

  • Esquecer controls. O elemento fica invisível sem ele, e parece que nada aconteceu.
  • Esperar que o autoplay funcione. Inicie a reprodução com um clique e trate a promise de play().
  • Um caminho ou tipo de arquivo errado. Abra a URL do arquivo direto para conferir, e faça o type corresponder ao formato real (audio/mpeg para MP3).
  • Carregar todos os arquivos de uma lista longa. Use preload="none" ou "metadata".
  • Música de fundo que não pode ser parada. Dê sempre às pessoas um jeito visível de pausar.

Perguntas frequentes

Como colocar áudio numa página HTML?

Use <audio src="song.mp3" controls></audio>. O atributo controls mostra o player do navegador com botão de play, linha do tempo e volume. Sem ele, o elemento fica invisível.

Por que meu áudio não toca automaticamente?

Os navegadores bloqueiam áudio que começa com som antes de o usuário interagir com a página. Inicie a reprodução a partir de um clique com audio.play(). Um elemento mudo pode tocar sozinho, mas para áudio isso raramente é útil.

Qual formato de áudio usar no HTML?

MP3 toca em todos os navegadores atuais, então é a escolha segura para um arquivo só. AAC num arquivo .m4a também tem amplo suporte. Use elementos <source> para oferecer mais de um formato.

Como deixar um áudio em loop no HTML?

Adicione o atributo loop: <audio src="rain.mp3" controls loop>. Quando o arquivo termina, ele recomeça do início.

Como tocar um som com JavaScript?

Crie ou selecione um elemento de áudio e chame play(), por exemplo new Audio('click.mp3').play() dentro de um manipulador de clique. play() retorna uma promise que é rejeitada se o navegador bloquear a reprodução.

Dá para estilizar o player de áudio do HTML?

Só um pouco: você pode definir largura, margem e display, mas os botões de dentro são desenhados pelo navegador e ficam diferentes em cada um. Para uma aparência própria, esconda os controles e crie os seus com botões e a API de áudio do JavaScript.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR