2
respostas

duvida

No meu celular o jogo roda certinho, sem nenhum problema em jogar porém a única coisa que não esta funcionando é a voz do site, pede para autorizar mas quando eu autorizo não sai nada. Teria como resolver isso? Boa tarde

2 respostas

Isso acontece porque alguns navegadores móveis (especialmente no Android) têm restrições na API de síntese de voz. Mas podemos tentar algumas soluções:

------- Possíveis soluções para a voz funcionar no celular 1-- Forçar o carregamento das vozes disponíveis No celular, às vezes a voz não é carregada corretamente. Podemos esperar até que as vozes estejam prontas:

function falar(texto) { const fala = new SpeechSynthesisUtterance(texto); fala.lang = "pt-BR"; fala.rate = 1; fala.pitch = 1;

// Garante que o navegador tenha carregado as vozes const vozes = speechSynthesis.getVoices(); if (vozes.length > 0) { fala.voice = vozes.find(voz => voz.lang === "pt-BR") || vozes[0]; }

speechSynthesis.speak(fala); }

// Aguarda a lista de vozes ser carregada speechSynthesis.onvoiceschanged = () => { console.log("Vozes carregadas:", speechSynthesis.getVoices()); }; 2 --- Adicionar um pequeno atraso antes de falar Em alguns celulares, a API precisa de um tempo para inicializar:

function falar(texto) { setTimeout(() => { const fala = new SpeechSynthesisUtterance(texto); fala.lang = "pt-BR"; fala.rate = 1; fala.pitch = 1; speechSynthesis.speak(fala); }, 500); // Pequeno atraso de 0.5s } 3️--- Garantir que o usuário interaja antes da voz ser ativada Alguns celulares bloqueiam a voz se não houver interação do usuário. O código abaixo pode ajudar:

document.body.addEventListener("click", () => { falar("Voz ativada! Agora o jogo falará as mensagens."); }, { once: true });

Isso fará o jogo falar algo assim que o usuário tocar na tela pela primeira vez.

Seque codigo para exemplo :

// Gera um número secreto inicial let numeroSecreto = Math.floor(Math.random() * 20) + 1;

// Contador de tentativas let tentativas = 0;

// Elementos da interface const nameInput = document.getElementById('name'); const guessInput = document.getElementById('guess'); const submitButton = document.getElementById('submit'); const messageDiv = document.getElementById('message');

// Armazena o último palpite para verificar a sequência let ultimoPalpite = null; let sequenciaAtiva = false;

// Foco no próximo campo ao pressionar Enter nameInput.addEventListener('keydown', (event) => { if (event.key === 'Enter') { event.preventDefault(); guessInput.focus(); } });

guessInput.addEventListener('keydown', (event) => { if (event.key === 'Enter') { event.preventDefault(); submitButton.click(); } });

// Função para verificar sequência function verificarSequencia(numeroAtual) { if (numeroAtual < 1 || numeroAtual > 20) { sequenciaAtiva = false; return false; }

if (ultimoPalpite !== null && numeroAtual === ultimoPalpite + 1) { sequenciaAtiva = true; return true; } sequenciaAtiva = false; return false; }

// Função para falar as mensagens function falar(texto) { setTimeout(() => { const fala = new SpeechSynthesisUtterance(texto); fala.lang = "pt-BR"; fala.rate = 1; fala.pitch = 1;

const vozes = speechSynthesis.getVoices();
if (vozes.length > 0) {
  fala.voice = vozes.find(voz => voz.lang === "pt-BR") || vozes[0];
}

speechSynthesis.speak(fala);

}, 500); // Pequeno atraso para evitar falhas no celular }

// Aguarda a lista de vozes ser carregada speechSynthesis.onvoiceschanged = () => { console.log("Vozes carregadas:", speechSynthesis.getVoices()); };

// Ativa a voz após um clique do usuário document.body.addEventListener("click", () => { falar("Voz ativada! Agora o jogo falará as mensagens."); }, { once: true });

// Evento de clique no botão submitButton.addEventListener('click', (event) => { event.preventDefault(); // Evita comportamento padrão em navegadores antigos

const nome = nameInput.value.trim(); const palpite = parseInt(guessInput.value, 10);

// Validação do nome e palpite if (!nome) { messageDiv.textContent = 'Por favor, digite seu nome.'; falar('Por favor, digite seu nome.'); return; } if (isNaN(palpite) || palpite < 1 || palpite > 20) { messageDiv.textContent = 'Por favor, insira um número válido (entre 1 e 20).'; falar('Por favor, insira um número válido entre 1 e 20.'); guessInput.value = ''; // Limpa o valor inválido return; }

// Verificar se é uma sequência if (verificarSequencia(palpite)) { messageDiv.textContent = 'Assim é fácil, melhor embaralhar!'; messageDiv.style.color = 'purple'; falar('Assim é fácil, melhor embaralhar!'); ultimoPalpite = palpite; return; }

// Incrementa o contador de tentativas tentativas++;

// Verificação do palpite if (palpite === numeroSecreto) { messageDiv.textContent = Parabéns, ${nome}! Você acertou o número secreto!; messageDiv.style.color = 'green'; falar(Parabéns, ${nome}! Você acertou o número secreto!); numeroSecreto = Math.floor(Math.random() * 20) + 1; // Troca o número secreto após o acerto tentativas = 0; // Reinicia o contador de tentativas ultimoPalpite = null; // Reinicia o controle de sequência } else { let mensagem = Huu, tente outra vez, ${nome}.;

// Verifica se o palpite está próximo do número secreto
if (Math.abs(palpite - numeroSecreto) <= 2) {
  mensagem += ' Está quase lá!';
  messageDiv.style.color = 'orange';
} else {
  messageDiv.style.color = 'red';
}

messageDiv.textContent = mensagem;
falar(mensagem);
ultimoPalpite = palpite; // Atualiza o último palpite

}

// Limpa o input do palpite guessInput.value = ''; });