Событие Audio.onplay (и onended) не запускается, когда пользователь быстро воспроизводит аудиофайл - PullRequest
0 голосов
/ 17 июня 2020

У меня есть пользовательский интерфейс, который воспроизводит короткий аудиофайл в ответ на нажатие клавиши пробела. Пользователь может воспроизводить звук так, как ему нравится, и я пытаюсь зафиксировать, сколько раз они это делают.

В моем текущем коде я установил атрибут onplay для элемента audio , который увеличивает переменную numberOfPlays. (Я также пробовал ту же стратегию, используя атрибут onended. Он дает такое же поведение, как я описываю ниже.)

Код работает примерно 95% времени, но иногда он пропускает игру все вместе. Это происходит всякий раз, когда пользователь повторяет стимул в течение нескольких миллисекунд после его окончания. Это похоже на то, как если бы ручное воспроизведение звука в нужное время каким-то образом не позволяло сценарию регистрировать, что звук вообще закончился (и, следовательно, не запускает соответствующие события).

Вы можете увидеть это на связанный образец . Вы увидите, что подсчет воспроизведений работает нормально, если вы не рассчитываете правильное время нажатия клавиш (то есть просто неправильно ...). Самый простой способ добиться плохого поведения - просто удерживать клавишу пробела, хотя я могу заверить вас, что это иногда случается и в более «невинных» ситуациях.

var numberOfPlays=0
var thisStimulus=new Audio()
thisStimulus.src="https://jeremydayoconnell.com/SpeechExperiments2020/Audio_files/I-see_S+3_D0_T0.mp3"
thisStimulus.setAttribute("onplay","numberOfPlays++;document.getElementById(\"container\").innerHTML=\"Counting the plays: \"+numberOfPlays")

document.addEventListener('keydown',keyPressed)
function keyPressed(e){ // Play stimulus when space bar is pressed
  if (e.key==" "){
    thisStimulus.play() 
  }
}
<div id="container">
Press the space bar to hear stimulus.
</div>

(Обратите внимание, что я пытаюсь записать количество воспроизведений фактического стимула, а не просто количество нажатий клавиш, которое Это важное различие, поскольку нажатие клавиши пробела во время воспроизведения звука не должно воспроизводить его повторно.)

Если у кого-то есть какие-либо идеи или предложения, я был бы признателен. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...