// Fazemos que o código só funcione apos o carregamento completo da pagina
window.addEventListener('DOMContentLoaded', function(){
// Instanciamos o nosso botão
var btn_gravacao = document.querySelector('#btn_gravar_audio');
// Crio a variavel que amarzenara a transcrição do audio
var transcricao_audio = '';
// Seto o valor false para a variavel esta_gravando para fazermos a validação se iniciou a gravação
var esta_gravando = false;
// Verificamos se o navegador tem suporte ao Speech API
if(window.SpeechRecognition || window.webkitSpeechRecognition){
// Como não sabemos qual biblioteca usada pelo navegador
// Atribuimos a api retornada pelo navegador
var speech_api = window.SpeechRecognition || window.webkitSpeechRecognition;
// Criamos um novo objeto com a API Speech
var recebe_audio = new speech_api();
// Defino se a gravação sera continua ou não
// Caso deixamos ela definida como false a gravação tera um tempo estimado
// de 4 a 5 segundos
recebe_audio.continuous = true;
// Especifico se o resultado final pode ser alterado ou não pela compreenção da api
recebe_audio.interimResults = true;
// Especifico o idioma utilizado pelo usuario
recebe_audio.lang = "pt-BR";
// uso o metodo onstart para setar a minha variavel esta_gravando como true
// e modificar o texto do botão
recebe_audio.onstart = function(){
esta_gravando = true;
btn_gravacao.innerHTML = "<i class='fa fa-microphone-slash' style='color:red; padding: 12px 20px;'></i>";
};
// uso o metodo onend para setar a minha variavel esta_gravando como false
// e modificar o texto do botão
recebe_audio.onend = function(){
esta_gravando = false;
btn_gravacao.innerHTML = "<i class='fa fa-microphone' style='color:red; padding: 12px 20px;'></i>";
};
recebe_audio.onerror = function(event){
console.log(event.error);
};
// Com o metodo onresult posso capturar a transcrição do resultado
recebe_audio.onresult = function(event){
// Defino a minha variavel interim_transcript como vazia
var interim_transcript = '';
// Utilizo o for para contatenar os resultados da transcrição
for(var i = event.resultIndex; i < event.results.length; i++){
// verifico se o parametro isFinal esta setado como true com isso identico se é o final captura
if(event.results[i].isFinal){
// Contateno o resultado final da transcrição
transcricao_audio = event.results[i][0].transcript;
}else{
// caso ainda não seja o resultado final vou contatenado os resultados obtidos
interim_transcript += event.results[i][0].transcript;
}
// Verifico qual das variaveis não esta vazia e atribuo ela no variavel resultado
var resultado='';
resultado = transcricao_audio || interim_transcript;
// Escrevo o resultado no campo da textarea
document.getElementById('data').value = resultado;
}
};
// Capturamos a ação do click no botão e iniciamos a gravação ou a paramos
// dependendo da variavel de controle esta_gravando
btn_gravacao.addEventListener('click', function(e){
// Verifico se esta gravando ou não
if(esta_gravando){
// Se estiver gravando mando parar a gravação
recebe_audio.stop();
var button = document.getElementById("send-btn");
button.click();
// Dou um retun para sair da função
return;
}
// Caso não esteja capturando o audio inicio a transcrição
document.getElementById('data').value = '';
recebe_audio.start();
}, false);
}else{
// Caso não o navegador não apresente suporte ao Speech API apresentamos a seguinte mensagem
console.log('navegador não apresenta suporte a web speech api');
// alert('Este navegador não apresenta suporte para essa funcionalidade ainda');
}
}, false);
|