diff --git a/docs/jspsych-audio-sequence-button-response.md b/docs/jspsych-audio-sequence-button-response.md index 7690171..056623f 100644 --- a/docs/jspsych-audio-sequence-button-response.md +++ b/docs/jspsych-audio-sequence-button-response.md @@ -10,6 +10,8 @@ The trial can end when the subject responds, when the audio file has finished pl Note that the buttons are disabled during playing so the subject cannot press any button during that time. +Make sure to define a CSS style for `.jspsych-audio-sequence-button-response button.highlighted` to see the button light up, and you may have to use `!important` for it to show up. + ## Parameters Parameters with a default value of *undefined* must be specified. Other parameters can be left unspecified if the default value is acceptable. @@ -72,6 +74,18 @@ The animation of the visual feedback can make use of [Semantic UI's transitions] #### Three alternative forced choice (3AFC) +CSS: +```css +.jspsych-audio-sequence-button-response button { + min-width: 5em; + min-height: 4em; +} +.jspsych-audio-sequence-button-response button.highlighted { + background-color: #ffff00 !important; +} +``` + +Javascript: ```javascript var trial = { type: 'audio-button-response', diff --git a/plugins/jspsych-audio-sequence-button-response.js b/plugins/jspsych-audio-sequence-button-response.js index 15b5b40..250664d 100644 --- a/plugins/jspsych-audio-sequence-button-response.js +++ b/plugins/jspsych-audio-sequence-button-response.js @@ -1,10 +1,12 @@ /** - * jspsych-audio-sequence-button-response - * Etienne Gaudrain + * jspsych-audio-sequence-button-response for jsPsych v6.3 + * Etienne Gaudrain 2021-10-15 * * Plugin for playing a sequence of audio files and getting an HTML button response * * Based on jspsych-audio-button-response. + * + * 2022-03-19: Fixed bug that ISI was applied also to last item. **/ jsPsych.plugins["audio-sequence-button-response"] = (function() { @@ -103,11 +105,7 @@ jsPsych.plugins["audio-sequence-button-response"] = (function() { plugin.trial = function(display_element, trial) { var context = jsPsych.pluginAPI.audioContext(); - if(context !== null) { - var source; - } else { - var audio; - } + var audio; if(trial.visual_feedback===true && trial.i_correct===null) throw "'i_correct' has to be defined if visual feedback is requested."; @@ -125,12 +123,6 @@ jsPsych.plugins["audio-sequence-button-response"] = (function() { play_next_audio.i = 0; } - /* - // We un-highlight the previous button - if(play_next_audio.i>0) - $(display_element).find('#jspsych-audio-sequence-button-response-' + (play_next_audio.i-1) +' button').toggleClass('highlighted'); - */ - // Is it the last stimulus, do we need to end trial? if(play_next_audio.i >= trial.stimuli.length) { $(display_element).find(".jspsych-audio-sequence-button-response button").removeClass("disabled").prop('disabled', false); @@ -141,34 +133,37 @@ jsPsych.plugins["audio-sequence-button-response"] = (function() { } // Prepare the next sound to play - if(context !== null) { - source = context.createBufferSource(); - source.buffer = jsPsych.pluginAPI.getAudioBuffer(trial.stimuli[play_next_audio.i]); - source.connect(context.destination); - source.onended = function(){ + jsPsych.pluginAPI.getAudioBuffer(trial.stimuli[play_next_audio.i]).then(function(buffer){ + if(context !== null) { + audio = context.createBufferSource(); + audio.buffer = buffer; + audio.connect(context.destination); + } else { + audio = buffer; + audio.currentTime = 0; + } + audio.addEventListener('ended', function _audio_ended(){ $(display_element).find('.jspsych-audio-sequence-button-response button.highlighted').removeClass('highlighted'); - setTimeout(play_next_audio, trial.isi); - }; - } else { - audio = jsPsych.pluginAPI.getAudioBuffer(trial.stimuli[play_next_audio.i]); - audio.currentTime = 0; - audio.addEventListener('ended', function(){ - $(display_element).find('.jspsych-audio-sequence-button-response button.highlighted').removeClass('highlighted'); - setTimeout(play_next_audio, trial.isi); + if(play_next_audio.i + + + + Test for jspsych-html-keyboard-response-clickable + + + + + + + + + + + + +