Cortar Áudio
Corte um trecho de um mp3, wav, ogg ou m4a na forma de onda, ouça e baixe o resultado como .wav. Roda no navegador.
Cortar Áudio
Solte um arquivo aqui ou clique para escolher
Roda totalmente no seu navegador. Seus dados nunca saem do seu dispositivo.
What next?
FAQ
Por que só é possível baixar em .wav, nunca em .mp3?
É uma limitação de licença, não técnica. Gerar um MP3 de verdade exige um codificador, e a única opção viável em JavaScript puro é a lamejs. O problema está na licença dela: LGPL-3.0. A LGPL permite combinar uma biblioteca com código sob outra licença desde que o usuário final consiga substituí-la — o que pressupõe existir um artefato compilado separado (um .so, um .dll, um objeto isolado) para "religar". Um build feito só em JavaScript não tem isso: a lamejs acabaria embutida diretamente no mesmo arquivo JavaScript que roda a página, sem nenhuma peça separável, então nenhuma das saídas de escape da LGPL se aplica aqui. Usá-la significaria relicenciar esta ferramenta sob LGPL, ou misturar uma biblioteca copyleft dentro de um repositório distribuído sob MIT — nenhuma das duas opções é aceitável. Por isso a ferramenta grava WAV diretamente: não precisa de nenhum codificador, apenas amostras PCM de 16 bits mais um cabeçalho RIFF/WAVE de 44 bytes, escrito à mão no próprio código da ferramenta. Se precisar do trecho cortado de volta em MP3, recodifique o WAV depois com uma ferramenta feita para isso — um app de desktop, ou o ffmpeg na linha de comando, que sim, ligam um codificador de verdade do jeito que a LGPL e a GPL esperam.
O arquivo .wav final costuma ficar bem maior que o original — por quê?
Porque não existe nenhuma compressão no meio do caminho. O MP3 existe justamente para descartar a parte do som que o ouvido humano quase não percebe (compressão psicoacústica); o WAV gerado aqui mantém cada amostra PCM de 16 bits intacta. O cálculo interno, estimateWavBytes, é aritmética direta: 44 bytes de cabeçalho mais o número de amostras vezes o número de canais vezes 2 bytes — sem nenhuma etapa de compressão no meio. Um MP3 de 3 minutos a 192 kbps pesa uns 4 MB; os mesmos 3 minutos em WAV estéreo de 16 bits a 44,1 kHz pesam cerca de 30 MB, sete a oito vezes mais. Não é um bug: é o preço de não perder absolutamente nada pelo caminho.
O áudio que eu envio sai da minha máquina em algum momento?
Não. O arquivo é lido com a File API do navegador e decodificado com AudioContext.decodeAudioData, a mesma API que qualquer player nativo usaria — não existe nenhuma requisição de rede envolvida nessa etapa. Tudo que acontece depois (cortar o trecho escolhido, escrever o WAV de saída) é aritmética pura sobre arrays de amostras (Float32Array) dentro da própria aba. Dá para confirmar abrindo a aba Rede das ferramentas de desenvolvedor antes de enviar o arquivo: nenhuma requisição carrega o conteúdo do áudio para lugar nenhum. E é justamente por não passar pela rede que essa etapa fica fora do alcance da política connect-src 'self' do site — a próxima pergunta explica por que isso importa para a reprodução.
Por que ouvir a seleção não funciona como um player de áudio comum?
Porque a Content-Security-Policy (CSP) deste site bloqueia esse caminho de propósito. A forma mais comum de tocar um arquivo local é criar uma URL blob e atribuí-la ao src de um elemento audio, ou fazer fetch() nessa mesma URL para recuperar os bytes — é exatamente assim que a wavesurfer.js, a biblioteca que desenha a forma de onda, carrega áudio por padrão através do método loadBlob. Mas o connect-src deste site é 'self' sem nenhuma entrada blob:, e também não define media-src (então o áudio cai no padrão default-src 'self') — ou seja, tanto fetch(blobUrl) quanto audio.src = "blob:..." são bloqueados pelo Chrome, algo confirmado por um evento real securitypolicyviolation durante o desenvolvimento desta ferramenta, não uma suposição. A saída foi evitar esse caminho por completo: o arquivo é decodificado com AudioContext.decodeAudioData, a wavesurfer é usada só para desenhar a onda a partir dos dados já decodificados (sem receber nenhuma URL), e ao clicar em tocar o código cria um ctx.createBufferSource() direto sobre o AudioBuffer que já está em memória — em nenhum momento da reprodução existe uma URL blob ou um elemento audio.
Existe um tamanho mínimo para o trecho cortado?
Sim, vinte milissegundos (MIN_TRIM_SECONDS). Abaixo disso, o que foi selecionado deixa de ser um trecho de áudio reconhecível — são só umas dezenas de amostras PCM, o suficiente para um estalo, não para um som com sentido. A ferramenta prefere recusar essa seleção com um erro explícito (rangeTooShort) a devolver um .wav tecnicamente válido, mas inútil na prática. Existe outro detalhe menos visível dentro de validateRange: quando você arrasta a borda da seleção até a ponta da forma de onda, o número de ponto flutuante às vezes vira 29.999999997 segundos em vez de exatos 30; sem um ajuste (clamp) no intervalo [0, duração], essa seleção — perfeitamente válida do seu ponto de vista — poderia ser rejeitada como se estivesse fora do clipe.
Que formatos são aceitos, e dá para cortar mais de um trecho do mesmo arquivo?
Qualquer formato que o AudioContext do seu navegador souber decodificar — a ferramenta não mantém uma lista própria de "formatos suportados", ela simplesmente entrega o arquivo ao navegador e confia na resposta; na prática isso cobre mp3, wav, ogg (Vorbis/Opus) e m4a/aac em qualquer navegador atual, de desktop ou celular. Se a decodificação falhar, o erro é mostrado tal como veio (decodeFailed) em vez de tentar adivinhar a causa. E sim, dá para cortar mais de um trecho do mesmo arquivo sem reenviá-lo: o arquivo original continua em memória durante toda a sessão, então depois de baixar o primeiro .wav basta arrastar a região de seleção para outro trecho da mesma onda e clicar em cortar de novo.
More converters tools
- Conversor de Numerais Romanos — Convert between Roman numerals and numbers, both directions.
- Criar ZIP — Junte vários arquivos num .
- Descompactar Arquivo — Abra um .
- Conversor JSON ↔ YAML ↔ TOML — Converte entre JSON, YAML e TOML.
- Conversor CSV ↔ JSON — Converte entre CSV e JSON.
- Conversor Markdown ↔ HTML — Converte Markdown em HTML e vice-versa.