Условное действие флажка для Tone.js (Web Audio)

Я пытаюсь создать флажок ($('#button')) действие которого меняется в зависимости от состояния player (независимо от того, воспроизводится звук или нет), используя Tone.js и jQuery.

Итак, логика в том, что если аудио уже started, то действие флажка просто mute (или включить звук). Однако, если аудио еще нет started тогда я хочу, чтобы флажок startplayer (по умолчанию player.mute == false) и измените свое собственное действие на mute/ Unmuting. Это будет означать, что, как только player.state == started Вы не можете изменить это, только переключить ли это muted или нет.

Мне удалось собрать функцию, которая переключает state или mute значение, но не тот, где действие самого флажка обусловлено state, Приведенный ниже код является моей попыткой сделать это, но, похоже, он не работает ☹️ - любая помощь будет очень признательна.

  const button = $('#button');

  if(player.state == 'started') {
    $(button).attr('checked', true);
  } else if(player.state == 'stopped') {
    $(button).attr('checked', false);
  }

  if(player.state == 'started') {
    $(button).change(function(){
        if(player.mute == true) {
          player.mute == false;
          $(this).attr('checked', true);
        } else if(player.mute == false) {
          player.mute == true;
          $(this).attr('checked', false);
        }
      });
  } else if(player.state == 'stopped') {
    $(button).change(function(){
      player.start();
      $(this).attr('checked', true);
    });
  }

Только для контекста: это все потому, что автозапуск разрешен или нет, зависит от браузера. В некоторых функциях автозапуска, которые у меня есть ранее в сценарии, это означает, что player начинается на странице load (), в других требуется явное действие пользователя ().

1 ответ

Решение

Я понял, что желаемое поведение выглядит следующим образом:

Всякий раз, когда player.state === 'начал' Нажатие на кнопку должно отключить звук, а повторное нажатие на него должно включить звук. и продолжайте переключаться до тех пор, пока player.state === 'началось' Если player.state === 'остановлено', нажатие на кнопку должно запустить звук, а затем быстро включить / выключить звук до тех пор, пока проигрыватель не будет в начальном состоянии.

Ниже приведена реализация того же. const button = $ ('# button');

//First set the button state to checked on unchecked depending on state
if(player.state == 'started') {
  button.attr('checked', true); //this means now the player is playing musing and is unmute.
} else if(player.state == 'stopped') {
    button.attr('checked', false); //this means now the player is stopped and is also mute
}

button.change(function(){
  if(player.state === 'started') {
    if(player.mute) {
      player.mute = false;
      button.attr('checked', false);
    } else {
      player.mute = true;
      $(this).attr('checked', true);
    }
  } else if (player.state === 'stopped') { //button was clicked and player is in stopped state. so start the player and turn on the checkbox so it displays that it is playing and is unmute
    player.start();
    button.attr('checked', true);
  }
});

// с этой реализацией флажок on подразумевает включение и отключение звука. // флажок выключен подразумевает остановлено или запущено + состояние отключения звука.

Другие вопросы по тегам