Como você pode ouvir “Yanny” e “Laurel” usando a API de áudio da web

Recentemente, um clipe de áudio perguntando aos ouvintes se eles ouviam a palavra “Yanny” ou “Laurel” confundiu completamente o mundo e colocou amigo contra amigo no debate online.
O clipe e a enquete “Yanny or Laurel” foram postados no Instagram, Reddit e outros sites por alunos do ensino médio que disseram ter sido gravado de um site de vocabulário reproduzido pelos alto-falantes de um computador. Agora, centenas de milhares de pessoas estão envolvidas em um debate sobre o que ouvem. Tem deixado as pessoas loucas e levando a defesas apaixonadas de ambos os lados.
No entanto, a mágica por trás desse debate é bastante simples. Ouvidos diferentes têm zonas de frequência sensíveis diferentes para o mesmo clipe de áudio. Além disso, diferentes alto-falantes têm respostas diferentes para frequências de áudio diferentes.
Este tutorial apresentará os detalhes sobre como usar a API de áudio da web e JavaScript simples para criar uma ferramenta que o ajudará a ouvir “Yanny” e “Laurel”. Então você poderá vencer qualquer um desses debates. :)
Se você quer apenas experimentar a ferramenta, ela está ao vivo AQUI. Basta abrir o navegador, reproduzir o áudio e tentar encontrar os pontos ideais para “Yanny” e “Laurel” enquanto move o controle deslizante de frequência.
Como funciona
Vamos falar sobre a parte principal primeiro. Para ouvir a palavra diferente, você precisa aumentar de alguma forma o volume para uma faixa de frequência específica que depende de seus ouvidos. Felizmente, o áudio API Web já tem algo pronto para nós: BiquadFilterNode
.
Existem diferentes tipos de que BiquadFilterNode
você pode usar. Para este caso, iremos apenas com o bandpass
filtro.
E para um filtro passa-banda, na maioria das vezes, precisamos apenas definir o valor da frequência central que queremos aumentar ou diminuir, em vez do início e do fim da faixa de frequência. Usamos um Q
valor para controlar a largura da faixa de frequência. Quanto maior Q
for, mais estreita será a faixa de frequência. Verifique a Wikipedia para mais detalhes.
Esse é todo o conhecimento que precisamos saber neste momento. Agora, vamos escrever o código.
Inicialização da API de áudio da web
const AudioContext = window.AudioContext || window.webkitAudioContext;
const audioContext = new AudioContext();
Crie nós de áudio junto com a configuração e a cadeia de sinal
// the audio tag in HTML, where holds the original audio clipconst audioTag = document.getElementById('audioTag');
// create audio source in web audio apiconst sourceNode =
audioContext.createMediaElementSource(audioTag);
const filterNode = audioContext.createBiquadFilter();
filterNode.type = 'bandpass'; // bandpass filterfilterNode.frequency.value = 1000 // set the center frequency
// set the gain to the frequency rangefilterNode.gain.value = 100;
// set Q value, 5 will make a fair band width for this casefilterNode.Q.value = 5;
// connect nodessourceNode.connect(filterNode);filterNode.connect(gainNode);gainNode.connect(audioContext.destination);
Arquivo HTML de amostra
Yanny vs Laurel Web Audio API
Adicionando IU do controle deslizante de frequência
Para facilitar o ajuste da frequência central de nosso filtro passa-banda, devemos adicionar um controle deslizante para controlar o valor.
Yanny vs Laurel Web Audio API Frequency: 1000 Hz
; // add event listener for slider to change frequency value slider.addEventListener('input', e => {
filterNode.frequency.value = e.target.value; label.innerHTML = `Frequency: ${e.target.value}Hz`;
}, false);
Bug createMediaElementSource no iOS Safari
Descobri que createMediaElementSource
não funciona no iOS Safari e Chrome. Para resolver isso, você deve usar createBufferSource
para criar um AudioBufferNode para armazenar e reproduzir o áudio em vez da tag de áudio HTML.
Por favor, veja o código aqui para mais detalhes.
Agora você se tornou uma ferramenta para poder ouvir “Yanny” e “Laurel”. Basta abrir seu navegador, reproduzir o áudio e tentar encontrar o ponto ideal enquanto move o controle deslizante de frequência.
Se você quiser apenas experimentar a ferramenta, ela está ao vivo AQUI.
Eu escrevo código para áudio e web e toco guitarra no YouTube. Se você quiser ver mais coisas minhas ou saber mais sobre mim, você sempre pode me encontrar em:
Local na rede Internet:
//haochuan.io/
GitHub:
//github.com/haochuan
Médio:
//medium.com/@haochuan
YouTube: //www.youtube.com/channel/UCNESazgvF_NtDAOJrJMNw0g