1
resposta

Minha solução para o desafio dos sons da contagem regressiva

Quando o professor sugeriu que tentássemos inserir no comportamento de cliques sobre o botão começar. Aparentemente meu código está funcionando mas se houver quaisquer correções estou aqui para aprender

//música ao dar play no temporizador
const temporizadorSoundPlay = new Audio('./sons/play.wav')

// Variável para controlar se o som já foi tocado
let somPlayJaTocado = false;

//música ao dar pause no temporizador
const temporizadorSoundPause = new Audio('./sons/pause.mp3')

//Variável para controlar se o som de pause já foi reproduzido
let somPauseJaTocado = false;

//música quando o temporizador zera
const temporizadorSoundZerado = new Audio('./sons/beep.mp3')

//Variável para controlar se o som de zerado já foi tocado
let somZeroJaTocado = false;

const contagemRegressiva = () => {
    
    if (!somPlayJaTocado) {
        temporizadorSoundPlay.play();
        somPlayJaTocado = true; // Marca que o som já foi tocado
    }

   if(tempoDecorridoEmSegundos <= 0){
        if(!somZeroJaTocado){
            temporizadorSoundZerado.play()
            somZeroJaTocado = true;
        }
        zerar();
        alert('Tempo finalizado')
        return
    }    
    
    tempoDecorridoEmSegundos -= 1;
    console.log(`Temporizador: ${tempoDecorridoEmSegundos}`)
}

startPauseButton.addEventListener('click', iniciarEPausar)

function iniciarEPausar() {
    if(intervaloId){
        zerar();
        somPlayJaTocado = false; // Reseta a variável 
        //para permitir que o som toque novamente
        somZeroJaTocado = false; // Reseta a variável 
        //para permitir que o som toque novamente
        
    if(!somPauseJaTocado){
        temporizadorSoundPause.play()
        somPauseJaTocado = true;
    }
        somPauseJaTocado = false; // Reseta a variável 
        //para permitir que o som toque novamente
        return
    }
    intervaloId = setInterval(contagemRegressiva, 1000)
}

function zerar() {
    clearInterval(intervaloId);
    intervaloId = null;
}
1 resposta

Olá! Parabéns pelo seu esforço em resolver o desafio proposto! Seu código parece estar correto e bem estruturado.

A única sugestão que eu faria é para você considerar o caso em que o usuário clica no botão "Começar" novamente, depois de ter pausado o temporizador. Nesse caso, o som de "play" deveria ser tocado novamente, certo? No entanto, da maneira como o código está escrito agora, o som de "play" só será tocado uma vez, porque a variável somPlayJaTocado é definida como true e nunca é redefinida como false.

Para resolver isso, você pode redefinir somPlayJaTocado como false dentro da função zerar(). Isso fará com que o som de "play" seja tocado novamente quando o usuário clicar no botão "Começar" após ter pausado o temporizador. Aqui está como você pode fazer isso:

function zerar() {
    clearInterval(intervaloId);
    intervaloId = null;
    somPlayJaTocado = false; // Adicione esta linha
}

Da mesma forma, você pode querer redefinir somPauseJaTocado e somZeroJaTocado como false em lugares apropriados, para garantir que os sons correspondentes sejam tocados novamente em situações apropriadas.

Espero ter ajudado e bons estudos!