Last active
August 28, 2017 12:29
-
-
Save marchdown/5b0ea14d53bae69be773c4465f33f4ba to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!doctype html> | |
<html lang="en, ru"> | |
<head> | |
<meta charset="utf-8"> | |
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous"> | |
<title>Experiment</title> | |
<meta name="description" content="Исследование скорости узнавания предъявляемых на слух слов"> | |
<meta name="author" content="V"> | |
<!--link rel="stylesheet" href="css/styles.css?v=1.0"--> | |
<!--[if lt IE 9]> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.js"></script> | |
<![endif]--> | |
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> | |
<script type="text/javascript" src="https://static.filestackapi.com/v3/filestack.js"></script> | |
<script type="text/javascript" src="experiment filenames list.js"></script> | |
<script type="text/javascript" src="training filenames list.js"></script> | |
<script> | |
"use strict" | |
var currentLength = 0.250; /* до какого момента пригрывать запись - изначально 250ms */ | |
var inputArray = []; /* сюда складываются массивы ответов и данных о них */ | |
var firstTrainingRun = true; /* первое ли слово проигрывается */ | |
var firstExperimentRun = true; | |
var audioFinished = false; /* проиграно ли слово до конца */ | |
var wordsSolvedCounter = 0; /* количество решённых слов */ | |
var audio; | |
var rightAnswer; /* правильный ответ */ | |
var usersInput; /* username испытуемого */ | |
var userData; /* анкетные данные испытуемого */ | |
var fileText = ""; /* текст файла с результатами */ | |
var attempts = 0; /* число тренировочных попыток угадать слово */ | |
var training = true; | |
$(function(){ | |
audio = document.getElementById('sample'); /* текущее слово (аудио) */ | |
var trainingFunctionAudioFinished = function(){ /* когда аудио заканчивается */ | |
audioFinished = true; /* аудио закончилось */ | |
document.getElementById('trainingText').innerText = "Cлово проиграно до конца. Прочитайте инструкцию снова." /* изменить текст */ | |
document.getElementById('trainingPage').style="display: none"; /* скрыть consentPage */ | |
document.getElementById('instructionPage').style="display: block"; /* показать instructionPage */ | |
}; | |
var experimentFunctionAudioFinished = function(){ /* когда аудио заканчивается */ | |
if (audioFinished) return; | |
audioFinished = true; /* аудио закончилось */ | |
document.getElementById('text').innerText = "Слово проиграно до конца." /* изменить текст */ | |
getToTheNextWord(); | |
audio.play(); | |
}; | |
function createAndUploadCSVFile(text, name) { | |
var blob = new Blob([text], {type : 'text/csv'}); | |
var client = filestack.init('A7iAeWAkkSZ67VSjAJPuZz', { policy: 'policy', signature: 'gmryazanskaya' }); | |
client.upload(blob, {}, {filename: name}); | |
}; | |
function getToTheNextWord(){ /* перейти к следующему слову */ | |
audioFinished = false; | |
if (training == false){ /* экспериментальные задания */ | |
if (wordsSolvedCounter < fileSrcArray.length){ /* если решено слов меньше длины списка слов */ | |
wordsSolvedCounter += 1; /* прибавить 1 к числу решённых слов */ | |
currentLength = 0.250 /* сбросить текущую длину проигрывания до начальной */ | |
document.getElementById('sample').src = fileSrcArray[wordsSolvedCounter - 1]; /* положить в переменную audio следующий файл из спика адресов файлов */ | |
var source = decodeURI(document.getElementById('sample').src); /* обновить правильный ответ: адрес файла кладётся в текстовую переменную */ | |
rightAnswer = source.match( /_\d+_(.*)\./i )[1].toLowerCase(); /* положить эту текстовую переменную в правильный ответ */ | |
} else { /* если решено слов столько же или больше длины списка слов */ | |
document.getElementById('wordInputDiv').style="display: none"; /* скрыть инпут слов */ | |
$('#text').html("Эксперимент окончен, спасибо за участие! Пожалуйста, не рассказывайте никому о содержании эксперимента до его завершения."); /* изменить текст */ | |
$('#playButton').hide(); /* скрыть кнопку Play */ | |
audio.removeEventListener("ended", experimentFunctionAudioFinished); | |
var i, j, textLine = ""; | |
var convertedArray = []; | |
for(var i = 0; i < inputArray.length; i++){convertedArray.push(inputArray[i]);} | |
for (i = 0; i < convertedArray.length; i++) { | |
textLine = convertedArray[i].join(";"); | |
fileText += textLine + "\n"; | |
}; | |
var userDataCsv=""; $.each(userData, function(k,v) {userDataCsv+=k+":"+v+"; \n";}); | |
createAndUploadCSVFile(fileText, userData.userName+" answers.csv"); | |
createAndUploadCSVFile(userDataCsv, userData.userName+" user data.csv"); | |
}; | |
} else { /* тренировочные задания */ | |
if (wordsSolvedCounter < fileTrainingSrcArray.length){ /* если решено слов меньше длины списка слов */ | |
wordsSolvedCounter += 1; /* прибавить 1 к числу решённых слов */ | |
currentLength = 0.250; /* сбросить текущую длину проигрывания до начальной */ | |
document.getElementById('sample').src = fileTrainingSrcArray[wordsSolvedCounter - 1]; /* положить в переменную audio следующий файл из спика адресов файлов */ | |
var source = decodeURI(document.getElementById('sample').src); /* обновить правильный ответ: адрес файла кладётся в текстовую переменную */ | |
rightAnswer = source.match( /_\d+_(.*)\./i )[1].toLowerCase(); /* положить эту текстовую переменную в правильный ответ */ | |
} else { /* если решено слов столько же или больше длины списка слов */ | |
$('#trainingPage').hide(); /* скрыть trainingPage */ | |
document.getElementById('consentPage').style="display: block"; /* скрыть кнопку Play */ | |
training = false; | |
audio.removeEventListener("ended", trainingFunctionAudioFinished); | |
wordsSolvedCounter = 0; /* сбросить число решённых слов */ | |
}; | |
}; | |
}; | |
$("#verbForm").on("submit", function() { /* обработать введённое пользователем слово */ | |
if (event.preventDefault) event.preventDefault(); /* не переходить на новую страницу (отключить обработчик по умолчанию) */ | |
var currentInput = document.getElementById('input').value.toLowerCase(); /* положить в переменную текущий инпут */ | |
if (currentInput == rightAnswer) { /* если верный ответ */ | |
inputArray.push([userData.userName, rightAnswer, currentLength, currentInput, "true"]); /* сложить значения в массив ответов */ | |
document.getElementById('text').innerText = "Вы ввели верное слово. Для проигрывания следующего слова нажмите на Play."; /* изменить текст */ | |
getToTheNextWord() /* перейти к следующему слову */ | |
} | |
else{ /* если неверный ответ */ | |
inputArray.push([userData.userName, rightAnswer, currentLength, currentInput, "false"]); /* сложить значения в массив ответов */ | |
if (audioFinished == false){ /* если слово не проиграно до конца */ | |
currentLength += 0.050; /* прибавить 50ms */ | |
document.getElementById('text').innerText = "Вы ввели неверное слово. Для повторного проигрывания слова нажмите на Play."; /* изменить текст */ | |
}; | |
}; | |
document.getElementById('input').value = "" /* стереть значение инпута */ | |
if (wordsSolvedCounter < fileSrcArray.length) $("#playButton").click(); | |
return false; | |
}); | |
setInterval(function () { /* остановить аудио по нужному времени */ | |
if (currentLength && audio.currentTime >= currentLength) { /* если есть максимальная длина и она меньше текущей длины */ | |
audio.pause(); /* остановить аудио */ | |
}; | |
}, 30); /* проверять условие каждые 30ms */ | |
$("#playButton").on("click", function(){ | |
if (event.preventDefault) event.preventDefault(); /* не переходить на новую страницу (отключить обработчик по умолчанию) */ | |
audio.currentTime = 0.0; /* начать проигрываеть слово с начала */ | |
audio.play(); /* проиграть слово */ | |
if(firstExperimentRun == true){ /* если проигрывается первое слово */ | |
document.getElementById('text').innerText = "Введите слово. Если вы не знаете слова, нажмите на Play." /* изменить текст */ | |
audio.addEventListener("ended", experimentFunctionAudioFinished); | |
}; | |
firstExperimentRun = false; /* изменить значение на "проигрывается не первое слово" */ | |
}); | |
$("#trainingForm").on("submit", function() { /* обработать введённое пользователем слово */ | |
if (event.preventDefault) event.preventDefault(); /* не переходить на новую страницу (отключить обработчик по умолчанию) */ | |
var currentInput = document.getElementById('trainingInput').value.toLowerCase(); /* положить в переменную текущий инпут */ | |
if (currentInput == rightAnswer) { /* если верный ответ */ | |
document.getElementById('trainingText').innerText = "Вы ввели верное слово. Для проигрывания следующего слова нажмите на Play."; /* изменить текст */ | |
getToTheNextWord() /* перейти к следующему слову */ | |
} | |
else{ /* если неверный ответ */ | |
if (audioFinished == false){ /* если слово не проиграно до конца */ | |
currentLength += 0.050; /* прибавить 50ms */ | |
document.getElementById('trainingText').innerText = "Вы ввели неверное слово. Для повторного проигрывания слова нажмите на Play."; /* изменить текст */ | |
}; | |
}; | |
document.getElementById('trainingInput').value = "" /* стереть значение инпута */ | |
if (training) $("#trainingButton").click(); | |
return false; | |
}); | |
$("#trainingButton").on("click", function(){ | |
if (event.preventDefault) event.preventDefault(); /* не переходить на новую страницу (отключить обработчик по умолчанию) */ | |
audio.currentTime = 0.0; /* начать проигрываеть слово с начала */ | |
audio.play(); /* проиграть слово */ | |
if(firstTrainingRun == true){ /* если проигрывается первое слово */ | |
document.getElementById('trainingText').innerText = "Введите слово. Если вы не знаете слова, нажмите на Play." /* изменить текст */ | |
audio.addEventListener("ended", trainingFunctionAudioFinished); | |
}; | |
firstTrainingRun = false; /* изменить значение на "проигрывается не первое слово" */ | |
}); | |
$('#inqueryForm').on("submit", function() { | |
if (event.preventDefault) event.preventDefault(); /* не переходить на новую страницу (отключить обработчик по умолчанию) */ | |
/* if(document.forms['inqueryForm']['userName'].required) */ | |
userData = $('#inqueryForm').serializeArray().reduce(function(obj, item) { | |
obj[item.name] = obj[item.name]||item.value; /* username = userData[userName] - не работает */ | |
return obj; | |
}, {}); | |
document.getElementById('inqueryPage').style="display: none"; /* скрыть inqueryPage */ | |
document.getElementById('instructionPage').style="display: block"; /* показать instructionPage */ | |
}); | |
$('#consentForm').on("submit", function() { | |
if (event.preventDefault) event.preventDefault(); /* не переходить на новую страницу (отключить обработчик по умолчанию) */ | |
document.getElementById('consentPage').style="display: none"; /* скрыть consentPage */ | |
document.getElementById('experimentPage').style="display: block"; /* показать experimentPage */ | |
document.getElementById('text').innerText = "Для проигрывания слова нажмите на Play." /* изменить текст */ | |
getToTheNextWord(); | |
}); | |
$('#instructionForm').on("submit", function() { | |
if (event.preventDefault) event.preventDefault(); /* не переходить на новую страницу (отключить обработчик по умолчанию) */ | |
document.getElementById('instructionPage').style="display: none"; /* скрыть instructionPage */ | |
document.getElementById('trainingPage').style="display: block"; /* показать consentPage */ | |
document.getElementById('trainingText').innerText = "Для проигрывания слова нажмите на Play." /* изменить текст */ | |
getToTheNextWord(); | |
}); | |
}); | |
</script> | |
</head> | |
<body> | |
<div class="container"> | |
<div id="inqueryPage" > <!-- страница с анкетой --> | |
<div> | |
<span>Сначала, пожалуйста, заполните демографический блок, чтобы нам было, где искать интересные корреляции. Мы знаем, что он очень длинный и скучный и заранее говорим вам спасибо за долготерпение. </span> | |
</div> | |
<hr /> | |
<form id="inqueryForm"> | |
<div class="form-group"> | |
<label for="userNameInput">Имя и фамилия: </label><br> <input type="text" class="form-control" id="userNameInput" name="userName" required><!-- Имя и фамилия --> | |
</div> | |
<div class="form-group"> | |
<label for="ageInput">Возраст (полных лет): </label><br> <input class="form-control" id="userAgeInput" name="userAge" type="number" min="6" max="90" required><!-- Возраст (полных лет) --> | |
</div> | |
<div class="form-group"> | |
<label for="userSexRadio">Пол: </label> <!-- radio: Пол: м/ж/другое (укажите) --> | |
<div class="form-group" id="userSexRadio"> | |
<div> | |
<input type="radio" class="form-check-input" name="userSex" value="male" id="sexMale" required> | |
<label for="sexMale">мужской</label> | |
</div> | |
<div> | |
<input type="radio" class="form-check-input" name="userSex" value="female" id="sexFemale" required> | |
<label for="sexFemale">женский</label> | |
</div> | |
<div> | |
<input type="radio" class="form-check-input" name="userSex" value="" id="sexOther" required> | |
<label for="sexOther">другое (укажите):</label> | |
<input type="text" class="form-control" name="userSex"> | |
</div> | |
</div> | |
</div> | |
<div class="form-group" > | |
<label for="userEducationSelect">Образование: </label> | |
<select class="form-control" id="userEducationSelect" name="userEducation"> | |
<option value="school">среднее</option> | |
<option value="school special">среднее специальное</option> | |
<option value="higher undergraduate">неоконченное высшее</option> | |
<option value="graduate">высшее</option> | |
<option value="degree">ученая степень</option> | |
</select> | |
<div class="form-group"> | |
<div> | |
<label for="yearsOfEducationInput">Длительность образования в годах (например, школа+среднее специальное+высшее - 11+2+5=18 лет): </label><br> | |
<input class="form-control" id="yearsOfEducationInput" name="userYearsOfEducation" type="number" min="1" max="40" required><!-- Длительность образования в годах (например, школа+среднее специальное+высшее - 11+2+5=18 лет) --> | |
</div> | |
<div> | |
<label for="professionInput">Область профессиональной деятельности: </label><br> | |
<input type="text" class="form-control" id="userProfessionInput" name="userProfession" required><br> <!-- Область профессиональной деятельности --> | |
</div> | |
</div> | |
</div> | |
<div class="form-group"> | |
<label for="languageInput">Родной язык: </label><br> | |
<input type="text" class="form-control" id="userLanguageInput" name="userLanguage" required><!-- Родной язык --> | |
</div> | |
<div class="form-group"> | |
<label for="userHandSelect">Ведущая рука: </label> | |
<select class="form-control" id="userHandSelect" name="userHand"> | |
<option value="right">правша</option> | |
<option value="left">левша</option> | |
<option value="ambi">амбидекстер</option> | |
<option value="right to left">переученный левша</option> | |
</select> | |
</div> | |
<div class="form-group"> | |
<label for="userDisordersRadio">Имеются ли у вас неврологические/психиатрические расстройства?</label> <!-- radio: Имеются ли у вас неврологические/психиатрические расстройства?: нет/да(какие) --> | |
<div id="userDisordersRadio"> | |
<div> | |
<input type="radio" class="form-check-input" name="userDisorders" value="no" id="noDisorders" required> | |
<label for="noDisorders">нет</label> | |
</div> | |
<div> | |
<input type="radio" class="form-check-input" name="userDisorders" value="" id="disorders" required> | |
<label for="disorders">да (укажите какие):</label> | |
<input type="text" class="form-control" name="userDisorders"> | |
</div> | |
</div> | |
</div> | |
<div> | |
<label for="userMedicationRadio">Принимаете ли вы какие медицинские препараты, которые могут повлиять на концентрацию внимания и время реакции?</label> <!-- radio: Принимаете ли вы какие медицинские препараты, которые могут повлиять на концентрацию внимания и время реакции?: нет/да(какие) --> | |
<div id="userMedicationRadio"> | |
<div> | |
<input type="radio" class="form-check-input" name="userMedication" value="no" id="noMedication" required> | |
<label for="noMedication">нет</label> | |
</div> | |
<div> | |
<input type="radio" class="form-check-input" name="userMedication" value="" id="Medication" required> | |
<label for="Medication">да (укажите какие):</label> | |
<input type="text" class="form-control" name="userMedication"> | |
</div> | |
</div> | |
</div> | |
<div class="form-check"> | |
<label for="userPerceptionRadio">Есть ли у вас какие-то проблемы со зрением или слухом?:</label> <!-- radio: Есть ли у вас какие-то проблемы со зрением или слухом?: нет/да(какие) --> | |
<div id="userPerceptionRadio"> | |
<div> | |
<input type="radio" class="form-check-input" name="userPerception" value="no" id="noPerceptionDisorder" required> | |
<label for="noPerceptionDisorder">нет</label> | |
</div> | |
<div> | |
<input type="radio" class="form-check-input" name="userPerception" value="" id="perceptionDisorder" required> | |
<label for="perceptionDisorder">да (укажите какие):</label> | |
<input type="text" class="form-control" name="userPerception"> | |
</div> | |
</div> | |
</div> | |
<button type="submit" class="btn btn-primary">Готово</button> | |
</form> | |
</div> | |
<div id="instructionPage" style="display: none"> <!-- страница с инструкцией --> <!-- проверить инструкции --> | |
<h1>Пожалуйста, внимательно прочитайте инструкцию.</h1> <br> | |
В эксперименте Вам по нажатию на Play будут предъявляться на слух части слов. Если вам кажется что вы знаете проигрываемое слово — вы должны напечатать его на экране. Если не знаете — нажать Play, в этом случае повторно будет проиграна уже бо́льшая часть слова. <br> | |
Когда слово проиграно полностью (если до этого вы его не угадали) — вы обязаны вписать ту догадку, которая у вас есть. <br> | |
Среди предъявляемых слов могут быть слова во множественном числе, не в именительном падеже и жаргонные слова. Все слова — существительные. Ваша задача — угадать звучащее слово, которое является продолжением для "Там был(-а,-о) ... / Я заметил(а)...". <br> | |
Если вы не знаете слова, снова нажмите на Play. После того, как вы угадаете слово, по нажатию на Play, Вам будет предъявлено следующее слово. <br> | |
<form id="instructionForm" class="form-group"> | |
<button id="instructionCheck" type="submit" class="btn btn-primary">Я понял инструкцию</button> <!-- кнопочочка подтверждения понимания инструкции --> | |
</form> | |
</div> | |
<div id="trainingPage" style="display: none"> <!-- страница с экспериментом --> | |
<audio id="sample" preload></audio> | |
<a id="trainingButton" href="#" class="btn btn-primary" >Play</a> <!-- кнопка Play --> | |
<div id="trainingText"> <!-- текстовый блок --> | |
Для проигривания слова нажмите на Play. | |
</div> | |
<form id="trainingForm" class="form-group"> <!-- Форма с инпутом для глаголов--> | |
<div id="trainingInputDiv"> <!-- невидимый блок с инпутом и кнопкой go --> | |
<input type="text" class="form-control" id="trainingInput" name="in" value=""/> | |
<button type="submit" class="btn btn-primary">Go</button> | |
</div> | |
</form> | |
</div> | |
<div id="consentPage" style="display: none"> <!-- страница с формой информированного согласия --> | |
<div id="consentText"> | |
Тренировка окончена. Пожалуйста, прочтите заявление об информированном согласии на участие в эксперименте: <br> | |
Я заявляю о добровольном участии в лингвистическом исследовании «Исследование скорости узнавания предъявляемых на слух слов», проводимом лабораторией нейролингвистики НИУ «Высшая школа экономики». Я согласен с тем, что данные, полученные от меня в ходе исследования (личные данные, результаты теста), могут быть опубликованы и использованы в научных целях при условии, что моё имя останется в тайне. <br> | |
Я проинформирован о процедуре исследования, которая заключается в выполнении речевого задания на компьютере (узнавание слов, предъявленных на слух по частям). Я также проинформирован, что могу прекратить участие в исследовании в любое время. <br> | |
Я также подтверждаю, что на момент исследования: <br> | |
1. Не имею нескорректированных проблем со слухом и зрением; <br> | |
2. Не принимаю медицинские препараты, влияющие на концентрацию внимания и время реакции, или указал название принимаемых мною препаратов; <br> | |
3. Не нахожусь под воздействием алкоголя и иных психотропных веществ. <br> | |
</div> | |
<form id="consentForm" class="form-group"> | |
<button type="submit" class="btn btn-primary" >Согласен</button> <!-- кнопочка согласия --> | |
</form> | |
</div> <!-- прилепить переход на след. страницу --> | |
<div id="experimentPage" style="display: none"> <!-- страница с экспериментом --> | |
<audio id="sample" preload></audio> | |
<a id="playButton" href="#" class="btn btn-primary">Play</a> <!-- кнопка Play --> | |
<div id="text"> <!-- текстовый блок --> | |
Для проигривания слова нажмите на Play. | |
</div> | |
<form id="verbForm" class="form-group"> <!-- Форма с инпутом для глаголов--> | |
<div id="wordInputDiv"> <!-- невидимый блок с инпутом и кнопкой go --> | |
<input type="text" class="form-control" id="input" name="in" value=""/> | |
<button type="submit" class="btn btn-primary">Go</button> | |
</div> | |
</form> | |
</div> | |
</div> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment