Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html lang="pt-br">
- <head>
- <meta charset="utf-8">
- <title>Reconhecimento de Voz</title>
- <style>
- .words {
- height:400px;
- width: 700px;
- border: 1px solid black;
- overflow-y: scroll;
- }
- .words span {
- font-size: 22px;
- }
- .button_speech {
- font-size: 22px;
- }
- </style>
- </head>
- <body>
- <h1>Reconhecimento de Voz com a Web Speech API</h1>
- <div class="words"></div><br>
- <button id="btn_speech" onclick='doStartStopCheck()'>
- Transcrever Áudio
- </button>
- <script>
- // Variável global que indica se o processo de reconhecimento está em andamento.
- var ongoing = false;
- // Variável global que irá armazenar o módulo de reconhecimento de voz
- var recognition = null;
- // Função que verifica se o usuário ainda deixou o reconhecimento de voz atividado pelo botão.
- function verificaStatus(){
- if (ongoing == true){
- recognition.start();
- }
- }
- // Função que configura o módulo para reconhecimento de voz
- function init(){
- // Corrigindo a referência padrão do módulo de reconhecimento, caso ainda em versão de protótipo.
- window.SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
- // Instanciando o módulo de reconhecimento de voz
- recognition = new SpeechRecognition();
- // Configurando o módulo para mostrar resultados provisórios
- recognition.interimResults = true;
- // Configurando a língua
- recognition.lang = 'pt-BR';
- // Crio um elemento span e apendo à DIV que irá apresentar o texto transcrito (variável s).
- var s = document.createElement('span');
- const words = document.querySelector('.words');
- words.appendChild(s);
- // Adicion um evento que é chamado a cada resultado obtido na transcrição.
- recognition.addEventListener('result', e => {
- // Constante transcript recebe o texto resultado da transcrição.
- const transcript = Array.from(e.results)
- .map(result => result[0])
- .map(result => result.transcript)
- .join('');
- // Adiciono a transcrição como conteúdo interno do elemento span (varável s), e depois s é apendado na DIV.
- s.textContent = transcript + ", ";
- if (e.results[0].isFinal) {
- s = document.createElement('span');
- words.appendChild(s);
- }
- });
- // Registro evento para ser executado ao final de trechos de reconhecimento de voz
- recognition.addEventListener('end', verificaStatus);
- // Realizo uma chamada que inicia o reconhecimento de voz
- recognition.start();
- }
- // Esta mesma função é chamada para iniciar ou interromper o reconhecimento de voz.
- // São realizadas condições para verificar qual o último estado, então,
- // ao chamar esta função ela alterna entre os estados 'em execução' ou 'interrompido'.
- function doStartStopCheck(){
- // Condição que verifica se está rodando, neste caso vai interromper
- if(ongoing == true){
- ongoing = false;
- recognition.stop();
- document.getElementById('btn_speech').innerHTML = "Transcrever Áudio";
- }
- // Caso não entre na condição anterior, significa que o estado é interrompido ou parado
- // Nesta condiçao, verificamos se já existe o módulo de reconhecimento. Caso positivo, apenas iniciamos o módulo.
- else if (recognition) {
- ongoing = true;
- recognition.start();
- document.getElementById('btn_speech').innerHTML = "Interromper";
- }
- // Neste senão, significa que o estado é parado e que o módulo ainda não foi instanciado.
- // Neste caso, chamos a função init para inicializar o módulo.
- else {
- console.log("init");
- ongoing = true;
- init();
- document.getElementById('btn_speech').innerHTML = "Interromper";
- }
- }
- // Função que rola o scroll da DIV à medida que o texto transcrito é apresentado
- function rolaScroll(){
- const w = document.querySelector('.words');
- w.scrollTop = w.scrollHeight;
- }
- // Evento que chama a função de rolar scroll a cada 1 segundo.
- setInterval(rolaScroll, 1000);
- </script>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment