У меня есть пользовательский интерфейс, который воспроизводит короткий аудиофайл в ответ на нажатие клавиши пробела. Пользователь может воспроизводить звук так, как ему нравится, и я пытаюсь зафиксировать, сколько раз они это делают.
В моем текущем коде я установил атрибут 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>
(Обратите внимание, что я пытаюсь записать количество воспроизведений фактического стимула, а не просто количество нажатий клавиш, которое Это важное различие, поскольку нажатие клавиши пробела во время воспроизведения звука не должно воспроизводить его повторно.)
Если у кого-то есть какие-либо идеи или предложения, я был бы признателен. Спасибо.