annotate docs/Instructions/Instructions.tex @ 753:66d732c2bc14

Index page now links to example APE project, example MUSHRA project, test creator, analysis page, citing info, GNU license, and instructions. Instructions and example project contain info on checkboxes.
author Brecht De Man <BrechtDeMan@users.noreply.github.com>
date Fri, 18 Dec 2015 18:26:46 +0000
parents
children 8540d153caec
rev   line source
BrechtDeMan@753 1 \documentclass[11pt, oneside]{article} % use "amsart" instead of "article" for AMSLaTeX format
BrechtDeMan@753 2 \usepackage{geometry} % See geometry.pdf to learn the layout options. There are lots.
BrechtDeMan@753 3 \geometry{letterpaper} % ... or a4paper or a5paper or ...
BrechtDeMan@753 4 %\geometry{landscape} % Activate for rotated page geometry
BrechtDeMan@753 5 \usepackage[parfill]{parskip} % Activate to begin paragraphs with an empty line rather than an indent
BrechtDeMan@753 6 \usepackage{graphicx} % Use pdf, png, jpg, or eps§ with pdflatex; use eps in DVI mode
BrechtDeMan@753 7 % TeX will automatically convert eps --> pdf in pdflatex
BrechtDeMan@753 8
BrechtDeMan@753 9 \usepackage{listings} % Source code
BrechtDeMan@753 10 \usepackage{xcolor} % colour (source code for instance)
BrechtDeMan@753 11 \definecolor{grey}{rgb}{0.1,0.1,0.1}
BrechtDeMan@753 12 \definecolor{darkblue}{rgb}{0.0,0.0,0.6}
BrechtDeMan@753 13 \definecolor{cyan}{rgb}{0.0,0.6,0.6}
BrechtDeMan@753 14
BrechtDeMan@753 15 \usepackage{amssymb}
BrechtDeMan@753 16 \usepackage{cite}
BrechtDeMan@753 17 \usepackage{hyperref} % Hyperlinks
BrechtDeMan@753 18 \usepackage[nottoc,numbib]{tocbibind} % 'References' in TOC
BrechtDeMan@753 19
BrechtDeMan@753 20 \graphicspath{{img/}} % Relative path where the images are stored.
BrechtDeMan@753 21
BrechtDeMan@753 22 \title{Instructions for \\ Web Audio Evaluation Tool}
BrechtDeMan@753 23 \author{Nicholas Jillings, Brecht De Man and David Moffat}
BrechtDeMan@753 24 \date{7 December 2015} % Activate to display a given date or no date
BrechtDeMan@753 25
BrechtDeMan@753 26 \begin{document}
BrechtDeMan@753 27 \maketitle
BrechtDeMan@753 28
BrechtDeMan@753 29 These instructions are about use of the Web Audio Evaluation Tool on Windows and Mac OS X platforms.
BrechtDeMan@753 30
BrechtDeMan@753 31 We request that you acknowledge the authors and cite our work when using it \cite{waet}, see also CITING.txt.
BrechtDeMan@753 32
BrechtDeMan@753 33 The tool is available in its entirety including source code on \url{https://code.soundsoftware.ac.uk/projects/webaudioevaluationtool/}, under the GNU General Public License v3.0 (\url{http://choosealicense.com/licenses/gpl-3.0/}), see also LICENSE.txt.
BrechtDeMan@753 34
BrechtDeMan@753 35 % TO DO: Linux (Android, iOS)
BrechtDeMan@753 36
BrechtDeMan@753 37 \tableofcontents
BrechtDeMan@753 38
BrechtDeMan@753 39 \clearpage
BrechtDeMan@753 40
BrechtDeMan@753 41 \section{Installation}
BrechtDeMan@753 42 Download the folder (\url{https://code.soundsoftware.ac.uk/hg/webaudioevaluationtool/archive/tip.zip}) and unzip in a location of your choice, or pull the source code from \url{https://code.soundsoftware.ac.uk/hg/webaudioevaluationtool} (Mercurial).
BrechtDeMan@753 43
BrechtDeMan@753 44 \subsection{Contents}
BrechtDeMan@753 45 The folder should contain the following elements: \\
BrechtDeMan@753 46
BrechtDeMan@753 47 \textbf{Main folder:}
BrechtDeMan@753 48 \begin{itemize}
BrechtDeMan@753 49 \item \texttt{analyse.html}: analysis and diagnostics of a set of result XML files
BrechtDeMan@753 50 \item \texttt{ape.css, core.css, graphics.css, mushra.css, structure.css}: style files (edit to change appearance)
BrechtDeMan@753 51 \item \texttt{ape.js}: JavaScript file for APE-style interface \cite{ape}
BrechtDeMan@753 52 \item \texttt{CITING.txt, LICENSE.txt, README.txt}: text files with, respectively, the citation which we ask to include in any work where this tool or any portion thereof is used, modified or otherwise; the license under which the software is shared; and a general readme file referring to these instructions.
BrechtDeMan@753 53 \item \texttt{core.js}: JavaScript file with core functionality
BrechtDeMan@753 54 \item \texttt{index.html}: webpage where interface should appear (includes link to test configuration XML)
BrechtDeMan@753 55 \item \texttt{jquery-2.1.4.js}: jQuery JavaScript Library
BrechtDeMan@753 56 \item \texttt{loudness.js}: Allows for automatic calculation of loudness of Web Audio API Buffer objects, return gain values to correct for a target loudness or match loudness between multiple objects
BrechtDeMan@753 57 \item \texttt{mushra.js}: JavaScript file for MUSHRA-style interface \cite{mushra}
BrechtDeMan@753 58 \item \texttt{pythonServer.py}: webserver for running tests locally
BrechtDeMan@753 59 \item \texttt{pythonServer-legacy.py}: webserver with limited functionality (no automatic storing of output XML files)
BrechtDeMan@753 60 \item \texttt{save.php}: PHP script to store result XML files to web server\\
BrechtDeMan@753 61 \end{itemize}
BrechtDeMan@753 62 \textbf{Documentation (./docs/)}
BrechtDeMan@753 63 \begin{itemize}
BrechtDeMan@753 64 \item \href{http://c4dm.eecs.qmul.ac.uk/dmrn/events/dmrnp10/#posters}{DMRN+10}: PDF and \LaTeX source of poster for 10\textsuperscript{th} Digital Music Research Network One-Day workshop (``soft launch'')
BrechtDeMan@753 65 \item Instructions: PDF and \LaTeX source of these instructions
BrechtDeMan@753 66 \item Project Specification Document (\LaTeX/PDF)
BrechtDeMan@753 67 \item Results Specification Document (\LaTeX/PDF)
BrechtDeMan@753 68 \item SMC15: PDF and \LaTeX source of 12th Sound and Music Computing Conference paper \cite{waet}
BrechtDeMan@753 69 \item WAC2016: PDF and \LaTeX source of 2nd Web Audio Conference paper\\
BrechtDeMan@753 70 \end{itemize}
BrechtDeMan@753 71 \textbf{Example project (./example\_eval/)}
BrechtDeMan@753 72 \begin{itemize}
BrechtDeMan@753 73 \item An example of what the set up XML should look like, with example audio files 0.wav-10.wav which are short recordings at 44.1kHz, 16bit of a woman saying the corresponding number (useful for testing randomisation and general familiarisation with the interface).\\
BrechtDeMan@753 74 \end{itemize}
BrechtDeMan@753 75 \textbf{Output files (./saves/)}
BrechtDeMan@753 76 \begin{itemize}
BrechtDeMan@753 77 \item The output XML files of tests will be stored here by default by the \texttt{pythonServer.py} script.\\
BrechtDeMan@753 78 \end{itemize}
BrechtDeMan@753 79 \textbf{Auxiliary scripts (./scripts/)}
BrechtDeMan@753 80 \begin{itemize}
BrechtDeMan@753 81 \item Helpful Python scripts for extraction and visualisation of data.\\
BrechtDeMan@753 82 \end{itemize}
BrechtDeMan@753 83 \textbf{Test creation tool (./test\_create/)}
BrechtDeMan@753 84 \begin{itemize}
BrechtDeMan@753 85 \item Webpage for easily setting up your own test without having to delve into the XML.\\
BrechtDeMan@753 86 \end{itemize}
BrechtDeMan@753 87
BrechtDeMan@753 88 \subsection{Compatibility}
BrechtDeMan@753 89 As Microsoft Internet Explorer doesn't support the Web Audio API\footnote{\url{http://caniuse.com/\#feat=audio-api}}, you will need another browser like Google Chrome, Safari or Firefox (all three are tested and confirmed to work).
BrechtDeMan@753 90
BrechtDeMan@753 91 Firefox does not currently support other bit depths than 8 or 16 bit for PCM wave files. In the future, this will throw a warning message to tell the user that their content is being quantised automatically. %Nick? Right? To be removed if and when actually implemented
BrechtDeMan@753 92
BrechtDeMan@753 93 The tool is platform-independent and works in any browser that supports the Web Audio API. It does not require any specific, proprietary software. However, in case the tool is hosted locally (i.e. you are not hosting it on an actual webserver) you will need Python (2.7), which is a free programming language - see the next paragraph.
BrechtDeMan@753 94
BrechtDeMan@753 95 \clearpage
BrechtDeMan@753 96
BrechtDeMan@753 97
BrechtDeMan@753 98 \section{Test setup}
BrechtDeMan@753 99
BrechtDeMan@753 100 \subsection{Sample rate}
BrechtDeMan@753 101 Depending on how the experiment is set up, audio is resampled automatically (the Web Audio default) or the sample rate is enforced. In the latter case, you will need to make sure that the sample rate of the system is equal to the sample rate of these audio files. For this reason, all audio files in the experiment will have to have the same sample rate.
BrechtDeMan@753 102
BrechtDeMan@753 103 Always make sure that all other digital equipment in the playback chain (clock, audio interface, digital-to-analog converter, ...) is set to this same sample rate.
BrechtDeMan@753 104
BrechtDeMan@753 105 Note that upon changing the sampling rate, the browser will have to be restarted for the change to take effect.
BrechtDeMan@753 106
BrechtDeMan@753 107 \subsubsection{Mac OS X}
BrechtDeMan@753 108 To change the sample rate in Mac OS X, go to \textbf{Applications/Utilities/Audio MIDI Setup} or find this application with Spotlight (see Figure \ref{fig:audiomidisetup}). Then select the output of the audio interface you are using and change the `Format' to the appropriate number. Also make sure the bit depth and channel count are as desired.
BrechtDeMan@753 109 If you are using an external audio interface, you may have to go to the preference pane of that device to change the sample rate.
BrechtDeMan@753 110
BrechtDeMan@753 111 Also make sure left and right channel gains are equal, as some applications alter this without changing it back, leading to a predominantly louder left or right channel. See Figure \ref{fig:audiomidisetup} for an example where the channel gains are different.
BrechtDeMan@753 112
BrechtDeMan@753 113 \begin{figure}[tb]
BrechtDeMan@753 114 \centering
BrechtDeMan@753 115 \includegraphics[width=.65\textwidth]{img/audiomidisetup.png}
BrechtDeMan@753 116 \caption{The Audio MIDI Setup window in Mac OS X}
BrechtDeMan@753 117 \label{fig:audiomidisetup}
BrechtDeMan@753 118 \end{figure}
BrechtDeMan@753 119
BrechtDeMan@753 120 \subsubsection{Windows}
BrechtDeMan@753 121 To change the sample rate in Windows, right-click on the speaker icon in the lower-right corner of your desktop and choose `Playback devices'. Right-click the appropriate playback device and click `Properties'. Click the `Advanced' tab and verify or change the sample rate under `Default Format'. % NEEDS CONFIRMATION
BrechtDeMan@753 122 If you are using an external audio interface, you may have to go to the preference pane of that device to change the sample rate.
BrechtDeMan@753 123
BrechtDeMan@753 124 \subsection{Local test}
BrechtDeMan@753 125 If the test is hosted locally, you will need to run the local webserver provided with this tool.
BrechtDeMan@753 126
BrechtDeMan@753 127 \subsubsection{Mac OS X}
BrechtDeMan@753 128
BrechtDeMan@753 129 On Mac OS X, Python comes preinstalled.
BrechtDeMan@753 130
BrechtDeMan@753 131 Open the Terminal (find it in \textbf{Applications/Terminal} or via Spotlight), and go to the folder you downloaded. To do this, type \texttt{cd [folder]}, where \texttt{[folder]} is the folder where to find the \texttt{pythonServer.py} script you downloaded. For instance, if the location is \texttt{/Users/John/Documents/test/}, then type
BrechtDeMan@753 132
BrechtDeMan@753 133 \texttt{cd /Users/John/Documents/test/}
BrechtDeMan@753 134
BrechtDeMan@753 135 Then hit enter and run the Python script by typing
BrechtDeMan@753 136
BrechtDeMan@753 137 \texttt{python pythonServer.py}
BrechtDeMan@753 138
BrechtDeMan@753 139 and hit enter again. See also Figure \ref{fig:terminal}.
BrechtDeMan@753 140
BrechtDeMan@753 141 \begin{figure}[htbp]
BrechtDeMan@753 142 \begin{center}
BrechtDeMan@753 143 \includegraphics[width=.75\textwidth]{pythonServer.png}
BrechtDeMan@753 144 \caption{Mac OS X: The Terminal window after going to the right folder (\texttt{cd [folder\_path]}) and running \texttt{pythonServer.py}.}
BrechtDeMan@753 145 \label{fig:terminal}
BrechtDeMan@753 146 \end{center}
BrechtDeMan@753 147 \end{figure}
BrechtDeMan@753 148
BrechtDeMan@753 149 Alternatively, you can simply type \texttt{python} (follwed by a space) and drag the file into the Terminal window from Finder. % DOESN'T WORK YET
BrechtDeMan@753 150
BrechtDeMan@753 151 You can leave this running throughout the different experiments (i.e. leave the Terminal open).
BrechtDeMan@753 152
BrechtDeMan@753 153 To start the test, open the browser and type
BrechtDeMan@753 154
BrechtDeMan@753 155 \texttt{localhost:8000}
BrechtDeMan@753 156
BrechtDeMan@753 157 and hit enter. The test should start (see Figure \ref{fig:test}).
BrechtDeMan@753 158
BrechtDeMan@753 159 To quit the server, either close the terminal window or press Ctrl+C on your keyboard to forcibly shut the server.
BrechtDeMan@753 160
BrechtDeMan@753 161 \subsubsection{Windows}
BrechtDeMan@753 162
BrechtDeMan@753 163 On Windows, Python 2.7 is not generally preinstalled and therefore has to be downloaded\footnote{\url{https://www.python.org/downloads/windows/}} and installed to be able to run scripts such as the local webserver, necessary if the tool is hosted locally.
BrechtDeMan@753 164
BrechtDeMan@753 165 Simply double click the Python script \texttt{pythonServer.py} in the folder you downloaded.
BrechtDeMan@753 166
BrechtDeMan@753 167 You may see a warning like the one in Figure \ref{fig:warning}. Click `Allow access'.
BrechtDeMan@753 168
BrechtDeMan@753 169 \begin{figure}[htbp]
BrechtDeMan@753 170 \begin{center}
BrechtDeMan@753 171 \includegraphics[width=.6\textwidth]{warning.png}
BrechtDeMan@753 172 \caption{Windows: Potential warning message when executing \texttt{pythonServer.py}.}
BrechtDeMan@753 173 \label{fig:warning}
BrechtDeMan@753 174 \end{center}
BrechtDeMan@753 175 \end{figure}
BrechtDeMan@753 176
BrechtDeMan@753 177 The process should now start, in the Command prompt that opens - see Figure \ref{fig:python}.
BrechtDeMan@753 178
BrechtDeMan@753 179 \begin{figure}[htbp]
BrechtDeMan@753 180 \begin{center}
BrechtDeMan@753 181 \includegraphics[width=.75\textwidth]{python.png}
BrechtDeMan@753 182 \caption{Windows: The Command Prompt after running \texttt{pythonServer.py} and opening the corresponding website.}
BrechtDeMan@753 183 \label{fig:python}
BrechtDeMan@753 184 \end{center}
BrechtDeMan@753 185 \end{figure}
BrechtDeMan@753 186
BrechtDeMan@753 187 You can leave this running throughout the different experiments (i.e. leave the Command Prompt open).
BrechtDeMan@753 188
BrechtDeMan@753 189 To start the test, open the browser and type
BrechtDeMan@753 190
BrechtDeMan@753 191 \texttt{localhost:8000}
BrechtDeMan@753 192
BrechtDeMan@753 193 and hit enter. The test should start (see Figure \ref{fig:test}).
BrechtDeMan@753 194
BrechtDeMan@753 195 \begin{figure}[htb]
BrechtDeMan@753 196 \begin{center}
BrechtDeMan@753 197 \includegraphics[width=.8\textwidth]{test.png}
BrechtDeMan@753 198 \caption{The start of the test in Google Chrome on Windows 7.}
BrechtDeMan@753 199 \label{fig:test}
BrechtDeMan@753 200 \end{center}
BrechtDeMan@753 201 \end{figure}
BrechtDeMan@753 202
BrechtDeMan@753 203 If at any point in the test the participant reports weird behaviour or an error of some kind, or the test needs to be interrupted, please notify the experimenter and/or refer to Section \ref{sec:troubleshooting}.
BrechtDeMan@753 204
BrechtDeMan@753 205 When the test is over (the subject should see a message to that effect, and click `Submit' one last time), the output XML file containing all collected data should have appeared in `saves/'. The names of these files are `test-0.xml', `test-1.xml', etc., in ascending order. The Terminal or Command prompt running the local web server will display the following file name. If such a file did not appear, please again refer to Section \ref{sec:troubleshooting}.
BrechtDeMan@753 206
BrechtDeMan@753 207 It is advised that you back up these results as often as possible, as a loss of this data means that the time and effort spent by the subject(s) has been in vain. Save the results to an external or network drive, and/or send them to the experimenter regularly.
BrechtDeMan@753 208
BrechtDeMan@753 209 To start the test again for a new participant, you do not need to close the browser or shut down the Terminal or Command Prompt. Simply refresh the page or go to \texttt{localhost:8000} again.
BrechtDeMan@753 210
BrechtDeMan@753 211
BrechtDeMan@753 212 \subsection{Remote test}
BrechtDeMan@753 213 Put all files on a web server which supports PHP. This allows the `save.php' script to store the XML result files in the `saves/' folder. If the web server is not able to store the XML file there at the end of the test, it will present the XML file locally to the user, as a `Save file' link.
BrechtDeMan@753 214
BrechtDeMan@753 215 Make sure the \texttt{projectReturn} attribute of the \texttt{setup} node is set to the \texttt{save.php} script.
BrechtDeMan@753 216
BrechtDeMan@753 217 Then, just go to the URL of the corresponding HTML file, e.g. \texttt{http://server.com/path/to/WAET/index.html?url=test/my-test.xml}. If storing on the server doesn't work at submission (e.g. if the \texttt{projectReturn} attribute isn't properly set), the result XML file will be presented to the subject on the client side, as a `Save file' link.
BrechtDeMan@753 218
BrechtDeMan@753 219
BrechtDeMan@753 220 \clearpage
BrechtDeMan@753 221
BrechtDeMan@753 222 \section{Interfaces}
BrechtDeMan@753 223
BrechtDeMan@753 224 The Web Audio Evaluation Tool comes with a number of interface styles, each of which can be customised extensively, either by configuring them differently using the many optional features, or by modifying the JavaScript files.
BrechtDeMan@753 225
BrechtDeMan@753 226 To set the interface style for the whole test, %Nick? change when this is not the case anymore, i.e. when the interface can be set per page
BrechtDeMan@753 227 add \texttt{interface="APE"} to the \texttt{setup} node, where \texttt{"APE"} is one of the interface names below.
BrechtDeMan@753 228
BrechtDeMan@753 229 \subsection{APE}
BrechtDeMan@753 230 The APE interface is based on \cite{ape}, and consists of one or more axes, each corresponding with an attribute to be rated, on which markers are placed. As such, it is a multiple stimulus interface where (for each dimension or attribute) all elements are on one axis so that they can be maximally compared against each other, as opposed to rated individually or with regards to a single reference.
BrechtDeMan@753 231 It also contains an optional text box for each element, to allow for clarification by the subject, tagging, and so on.
BrechtDeMan@753 232
BrechtDeMan@753 233 \subsection{MUSHRA}
BrechtDeMan@753 234 This is a straightforward implementation of \cite{mushra}, especially common for the rating of audio quality, for instance for the evaluation of audio codecs.
BrechtDeMan@753 235
BrechtDeMan@753 236
BrechtDeMan@753 237 \clearpage
BrechtDeMan@753 238
BrechtDeMan@753 239 \section{Features}
BrechtDeMan@753 240
BrechtDeMan@753 241 This section goes over the different features implemented in the Web Audio Evaluation Tool, how to use them, and what to know about them.
BrechtDeMan@753 242
BrechtDeMan@753 243 Unless otherwise specified, \emph{each} feature described here is optional, i.e. it can be enabled or disabled and adjusted to some extent.
BrechtDeMan@753 244
BrechtDeMan@753 245 As the example project showcases (nearly) all of these features, please refer to its configuration XML document for a demonstration of how to enable and adjust them.
BrechtDeMan@753 246
BrechtDeMan@753 247 \subsection{Surveys}
BrechtDeMan@753 248 \subsubsection{Pre- and post-page surveys}
BrechtDeMan@753 249
BrechtDeMan@753 250 \subsubsection{Pre- and post-test surveys}
BrechtDeMan@753 251
BrechtDeMan@753 252 \subsubsection{Survey elements}
BrechtDeMan@753 253 All survey elements (which `pop up' in the centre of the browser) have an \texttt{id} attribute, for retrieval of the responses in post-processing of the results, and a \texttt{mandatory} attribute, which if set to ``true'' requires the subjects to respond before they can continue.
BrechtDeMan@753 254
BrechtDeMan@753 255 \begin{description}
BrechtDeMan@753 256 \item[statement] Simply shows text to the subject until `Next' or `Start' is clicked.
BrechtDeMan@753 257 \item[question] Expects a text answer (in a text box). Has the \texttt{boxsize} argument: set to ``large'' or ``huge'' for a bigger box size.
BrechtDeMan@753 258 \item[number] Expects a numerical value. Attribute \texttt{min="0"} specifies the minimum value - in this case the answer must be stricly positive before the subject can continue.
BrechtDeMan@753 259 \item[radio] Radio buttons.
BrechtDeMan@753 260 \item[checkbox] Checkboxes. Note that when making a checkbox question ``mandatory'', the subject is forced to select at least one option (which could be e.g. `Other' or `None').\\
BrechtDeMan@753 261 \end{description}
BrechtDeMan@753 262
BrechtDeMan@753 263 \textbf{Example usage:}\\
BrechtDeMan@753 264
BrechtDeMan@753 265 \lstset{
BrechtDeMan@753 266 basicstyle=\ttfamily,
BrechtDeMan@753 267 columns=fullflexible,
BrechtDeMan@753 268 showstringspaces=false,
BrechtDeMan@753 269 commentstyle=\color{grey}\upshape
BrechtDeMan@753 270 }
BrechtDeMan@753 271
BrechtDeMan@753 272 \lstdefinelanguage{XML}
BrechtDeMan@753 273 {
BrechtDeMan@753 274 morestring=[b]",
BrechtDeMan@753 275 morestring=[s]{>}{<},
BrechtDeMan@753 276 morecomment=[s]{<?}{?>},
BrechtDeMan@753 277 stringstyle=\color{black} \bfseries,
BrechtDeMan@753 278 identifierstyle=\color{darkblue} \bfseries,
BrechtDeMan@753 279 keywordstyle=\color{cyan} \bfseries,
BrechtDeMan@753 280 morekeywords={xmlns,version,type},
BrechtDeMan@753 281 breaklines=true% list your attributes here
BrechtDeMan@753 282 }
BrechtDeMan@753 283 \scriptsize
BrechtDeMan@753 284 \lstset{language=XML}
BrechtDeMan@753 285
BrechtDeMan@753 286 \begin{lstlisting}
BrechtDeMan@753 287 <PostTest>
BrechtDeMan@753 288 <question id="location" mandatory="true" boxsize="large">Please enter your location. (example mandatory text question)</question>
BrechtDeMan@753 289 <number id="age" min="0">Please enter your age (example non-mandatory number question)</number>
BrechtDeMan@753 290 <radio id="rating">
BrechtDeMan@753 291 <statement>Please rate this interface (example radio button question)</statement>
BrechtDeMan@753 292 <option name="bad">Bad</option>
BrechtDeMan@753 293 <option name="poor">Poor</option>
BrechtDeMan@753 294 <option name="good">Good</option>
BrechtDeMan@753 295 <option name="great">Great</option>
BrechtDeMan@753 296 </radio>
BrechtDeMan@753 297 <checkbox id="checkboxtest" mandatory="true">
BrechtDeMan@753 298 <statement>Please select with which activities you have any experience (example checkbox question)</statement>
BrechtDeMan@753 299 <option name="musician">Playing a musical instrument</option>
BrechtDeMan@753 300 <option name="soundengineer">Recording or mixing audio</option>
BrechtDeMan@753 301 </checkbox>
BrechtDeMan@753 302 <statement>Thank you for taking this listening test. Please click 'Submit' and your results will appear in the 'saves/' folder.</statement>
BrechtDeMan@753 303 </PostTest>
BrechtDeMan@753 304 \end{lstlisting}
BrechtDeMan@753 305
BrechtDeMan@753 306
BrechtDeMan@753 307 \subsection{Randomisation}
BrechtDeMan@753 308
BrechtDeMan@753 309 \subsubsection{Randomisation of configuration XML files}
BrechtDeMan@753 310 % how to
BrechtDeMan@753 311 % explain how this is implemented in the pythonServer
BrechtDeMan@753 312 %Nick? already implemented in the PHP?
BrechtDeMan@753 313
BrechtDeMan@753 314
BrechtDeMan@753 315 \subsubsection{Randomsation of page order}
BrechtDeMan@753 316
BrechtDeMan@753 317
BrechtDeMan@753 318 \subsubsection{Randomisation of axis order}
BrechtDeMan@753 319
BrechtDeMan@753 320 \subsubsection{Randomisation of fragment order}
BrechtDeMan@753 321
BrechtDeMan@753 322
BrechtDeMan@753 323 \subsubsection{Randomisation of initial slider position}
BrechtDeMan@753 324
BrechtDeMan@753 325 % /subsubsection{Randomisation of survey question order}
BrechtDeMan@753 326 % should be an attribute of the individual 'pretest' and 'posttest' elements
BrechtDeMan@753 327 % uncomment once we have it
BrechtDeMan@753 328
BrechtDeMan@753 329 \subsection{Looping}
BrechtDeMan@753 330 Loops the fragments
BrechtDeMan@753 331 % how to enable?
BrechtDeMan@753 332 If the fragments are not of equal length initially, they are padded with zeros so that they are equal length, to enable looping without the fragments going out of sync relative to each other.
BrechtDeMan@753 333
BrechtDeMan@753 334 Note that fragments cannot be played until all fragments are loaded when in looped mode, as the engine needs to assess whether all %Nick? Is this accurate?
BrechtDeMan@753 335
BrechtDeMan@753 336 \subsection{Sample rate}
BrechtDeMan@753 337 If you require the test to be conducted at a certain sample rate (i.e. you do not tolerate resampling of the elements to correspond with the system's sample rate), add \texttt{sampleRate="96000"} - where ``96000'' can be any support sample rate - so that a warning message is shown alerting the subject the system's sample rate is different from this enforced sample rate. This of course means that in one test, all sample rates must be equal as it is impossible to change the system's sample rates during the test (even if you were to manually change it, then the browser must be restarted for it to take effect).
BrechtDeMan@753 338
BrechtDeMan@753 339 \subsection{Scrubber bar}
BrechtDeMan@753 340 The scrubber bar, or transport bar (that is the name of the visualisation of the playhead thing with an indication of time and showing the portion of the file played so far) is at this point just a visual, and not a controller to adjust the playhead position.
BrechtDeMan@753 341
BrechtDeMan@753 342 Make visible by adding \texttt{<option name='playhead'/>} to the \texttt{interface} node (see Section \ref{sec:checks}: Checks).
BrechtDeMan@753 343
BrechtDeMan@753 344 \subsection{Metrics}
BrechtDeMan@753 345 Enable the collection of metrics by adding \texttt{collectMetrics=`true'} in the \texttt{setup} node.
BrechtDeMan@753 346
BrechtDeMan@753 347 The \texttt{Metric} node, which contains the metrics to be tracked during the complete test, is a child of the \texttt{setup} node, and it could look as follows.
BrechtDeMan@753 348
BrechtDeMan@753 349 \begin{lstlisting}
BrechtDeMan@753 350 <Metric>
BrechtDeMan@753 351 <metricEnable>testTimer</metricEnable>
BrechtDeMan@753 352 <metricEnable>elementTimer</metricEnable>
BrechtDeMan@753 353 <metricEnable>elementInitialPosition</metricEnable>
BrechtDeMan@753 354 <metricEnable>elementTracker</metricEnable>
BrechtDeMan@753 355 <metricEnable>elementFlagListenedTo</metricEnable>
BrechtDeMan@753 356 <metricEnable>elementFlagMoved</metricEnable>
BrechtDeMan@753 357 <metricEnable>elementListenTracker</metricEnable>
BrechtDeMan@753 358 </Metric>
BrechtDeMan@753 359 \end{lstlisting}
BrechtDeMan@753 360
BrechtDeMan@753 361 When in doubt, err on the inclusive side, as one never knows which information is needed in the future. Most of these metrics are necessary for post-processing scripts such as timeline\_view\_movement.py.
BrechtDeMan@753 362
BrechtDeMan@753 363 \subsubsection{Time test duration}
BrechtDeMan@753 364 \texttt{testTimer}\\
BrechtDeMan@753 365
BrechtDeMan@753 366 \subsubsection{Time fragment playback}
BrechtDeMan@753 367 \texttt{elementTimer}\\
BrechtDeMan@753 368 This keeps track of when each fragment is played back and stopped again, \emph{and} which part of the fragment has been played back at that time.
BrechtDeMan@753 369 % example output?
BrechtDeMan@753 370
BrechtDeMan@753 371 \subsubsection{Initial positions}
BrechtDeMan@753 372 \texttt{elementInitialPosition}\\
BrechtDeMan@753 373 Tracks the initial position of the sliders, especially relevant when these are randomised, so their influence
BrechtDeMan@753 374
BrechtDeMan@753 375 \subsubsection{Track movements}
BrechtDeMan@753 376
BrechtDeMan@753 377 \subsubsection{Which fragments listened to}
BrechtDeMan@753 378
BrechtDeMan@753 379 \subsubsection{Which fragments moved}
BrechtDeMan@753 380 Binary check whether or not a the marker corresponding with a particular fragment was moved at all throughout the experiment.
BrechtDeMan@753 381
BrechtDeMan@753 382 \subsubsection{elementListenTracker} %Nick? No idea what this does, if it's not what I wrote under 'Time fragment playback'
BrechtDeMan@753 383
BrechtDeMan@753 384 \subsection{References and anchors}
BrechtDeMan@753 385 \subsubsection{Reference}
BrechtDeMan@753 386 %...
BrechtDeMan@753 387 \subsubsection{Hidden reference}
BrechtDeMan@753 388 %...
BrechtDeMan@753 389 \subsubsection{Hidden anchor}
BrechtDeMan@753 390 %...
BrechtDeMan@753 391
BrechtDeMan@753 392 \subsection{Checks}
BrechtDeMan@753 393 \label{sec:checks}
BrechtDeMan@753 394
BrechtDeMan@753 395 %blabla
BrechtDeMan@753 396 These checks are enabled in the \texttt{interface} node, which is a child of the \texttt{setup} node.
BrechtDeMan@753 397 \subsubsection{Playback checks}
BrechtDeMan@753 398 % what it does/is
BrechtDeMan@753 399 Enforce playing each sample at least once, for at least a little bit (e.g. this test is satisfied even if you only play a tiny portion of the file), by alerting the user to which samples have not been played upon clicking `Submit'. When enabled, one cannot proceed to the next page, answer a survey question, or finish the test, before clicking each sample at least once.
BrechtDeMan@753 400 % how to enable/disable
BrechtDeMan@753 401
BrechtDeMan@753 402 Alternatively, one can check whether the \emph{entire} fragment was listened to at least once.
BrechtDeMan@753 403 % how to enable
BrechtDeMan@753 404
BrechtDeMan@753 405 Add \texttt{<check name="fragmentPlayed"/>} to the \texttt{interface} node.
BrechtDeMan@753 406
BrechtDeMan@753 407
BrechtDeMan@753 408 \subsubsection{Movement check}
BrechtDeMan@753 409 Enforce moving each sample at least once, for at least a little bit (e.g. this test is satisfied even if you only play a tiny portion of the file), by alerting the user to which samples have not been played upon clicking `Submit'. When enabled, one cannot proceed to the next page, answer a survey question, or finish the test, before clicking each sample at least once.
BrechtDeMan@753 410 If there are several axes, the warning will specify which samples have to be moved on which axis.
BrechtDeMan@753 411
BrechtDeMan@753 412 Add \texttt{<check name="fragmentMoved"/>} to the \texttt{interface} node.
BrechtDeMan@753 413
BrechtDeMan@753 414 \subsubsection{Comment check}
BrechtDeMan@753 415 % How to enable/disable?
BrechtDeMan@753 416
BrechtDeMan@753 417 Enforce commenting, by alerting the user to which samples have not been commented on upon clicking `Submit'. When enabled, one cannot proceed to the next page, answer a survey question, or finish the test, before putting at least one character in each comment box.
BrechtDeMan@753 418
BrechtDeMan@753 419 Note that this does not apply to any extra (text, radio button, checkbox) elements, unless these have the `mandatory' option enabled. %Nick? is this extra 'mandatory' option implemented?
BrechtDeMan@753 420
BrechtDeMan@753 421 Add \texttt{<check name="fragmentComments"/>} to the \texttt{interface} node.
BrechtDeMan@753 422
BrechtDeMan@753 423 %ADD: how to add a custom comment box
BrechtDeMan@753 424
BrechtDeMan@753 425 \subsubsection{Scale use check}
BrechtDeMan@753 426 It is possible to enforce a certain usage of the scale, meaning that at least one slider needs to be below and/or above a certain percentage of the slider.
BrechtDeMan@753 427
BrechtDeMan@753 428 Add \texttt{<check name="scalerange" min="25" max="75"/>} to the \texttt{interface} node.
BrechtDeMan@753 429
BrechtDeMan@753 430 \subsubsection{Note on the use of multiple rating axes}
BrechtDeMan@753 431 I.e. what if more than one axis? How to specify which axis the checks relate to? %Nick? to add?
BrechtDeMan@753 432
BrechtDeMan@753 433 \subsection{Layout options}
BrechtDeMan@753 434 \texttt{title}, \texttt{scale}, \texttt{position}, \texttt{commentBoxPrefix}
BrechtDeMan@753 435
BrechtDeMan@753 436 \subsection{Multiple sliders}
BrechtDeMan@753 437 (APE example)
BrechtDeMan@753 438
BrechtDeMan@753 439 \begin{lstlisting}
BrechtDeMan@753 440 <interface name="preference">
BrechtDeMan@753 441 <title>Preference</title>
BrechtDeMan@753 442 <scale position="0">Min</scale>
BrechtDeMan@753 443 <scale position="100">Max</scale>
BrechtDeMan@753 444 <scale position="50">Middle</scale>
BrechtDeMan@753 445 <commentBoxPrefix>Comment on fragment</commentBoxPrefix>
BrechtDeMan@753 446 </interface>
BrechtDeMan@753 447 <interface name="depth">
BrechtDeMan@753 448 <title>Depth</title>
BrechtDeMan@753 449 <scale position="0">Low</scale>
BrechtDeMan@753 450 <scale position="100">High</scale>
BrechtDeMan@753 451 <scale position="50">Middle</scale>
BrechtDeMan@753 452 <commentBoxPrefix>Comment on fragment</commentBoxPrefix>
BrechtDeMan@753 453 </interface>
BrechtDeMan@753 454 \end{lstlisting}
BrechtDeMan@753 455 where the \texttt{interface} nodes are children of the \texttt{audioholder} node.
BrechtDeMan@753 456
BrechtDeMan@753 457 \subsection{Platform information}
BrechtDeMan@753 458 % what does it do, what does it look like
BrechtDeMan@753 459 % limitations?
BrechtDeMan@753 460
BrechtDeMan@753 461 \subsection{Show progress}
BrechtDeMan@753 462 Add \texttt{<option name="page-count"/>} to the \texttt{interface} node (see Section \ref{sec:checks}: Checks) to add the current page number and the total number of pages to the interface.
BrechtDeMan@753 463
BrechtDeMan@753 464 \subsection{Gain}
BrechtDeMan@753 465 It is possible to set the gain (in decibel) applied to the different audioelements, as an attribute of the \texttt{audioelement} nodes in the configuration XML file:
BrechtDeMan@753 466
BrechtDeMan@753 467 \texttt{<audioElements url="sample-01.wav" gain="-6" id="sample01quieter" />}
BrechtDeMan@753 468
BrechtDeMan@753 469 \subsection{Loudness}
BrechtDeMan@753 470 % automatic loudness equalisation
BrechtDeMan@753 471 % guide to loudness.js
BrechtDeMan@753 472 Set the loudness for a complete test by adding \texttt{loudness="-23"} to the \texttt{setup} node in the configuration XML file, where -23 is an example loudness in LUFS.
BrechtDeMan@753 473
BrechtDeMan@753 474 \clearpage
BrechtDeMan@753 475
BrechtDeMan@753 476
BrechtDeMan@753 477 \section{Using the test create tool}
BrechtDeMan@753 478 We provide a test creation tool, available in the directory test\_create. This tool is a self-contained web page, so doubling clicking will launch the page in your system default browser.
BrechtDeMan@753 479
BrechtDeMan@753 480 The test creation tool can help you build a simple test very quickly. By simply selecting your interface and clicking check-boxes you can build a test in minutes.
BrechtDeMan@753 481
BrechtDeMan@753 482 Include audio by dragging and dropping the stimuli you wish to include.
BrechtDeMan@753 483
BrechtDeMan@753 484 The tool examines your XML before exporting to ensure you do not export an invalid XML structure which would crash the test.
BrechtDeMan@753 485
BrechtDeMan@753 486 This guide will help you to construct your own interface on top of the WAET (Web Audio Evaluation Tool) engine. The WAET engine resides in the core.js file, this contains prototype objects to handle most of the test creation, operation and data collection. The interface simply has to link into this at the correct points.
BrechtDeMan@753 487
BrechtDeMan@753 488 \subsection{Nodes to familiarise}
BrechtDeMan@753 489 Core.js handles several very important nodes which you should become familiar with. The first is the Audio Engine, initialised and stored in variable `AudioEngineContext'. This handles the playback of the web audio nodes as well as storing the `AudioObjects'. The `AudioObjects' are custom nodes which hold the audio fragments for playback. These nodes also have a link to two interface objects, the comment box if enabled and the interface providing the ranking. On creation of an `AudioObject' the interface link will be nulled, it is up to the interface to link these correctly.
BrechtDeMan@753 490
BrechtDeMan@753 491 The specification document will be decoded and parsed into an object called `specification'. This will hold all of the specifications various nodes. The test pages and any pre/post test objects are processed by a test state which will proceed through the test when called to by the interface. Any checks (such as playback or movement checks) are to be completed by the interface before instructing the test state to proceed. The test state will call the interface on each page load with the page specification node.
BrechtDeMan@753 492
BrechtDeMan@753 493 \subsection{Modifying \texttt{core.js}}
BrechtDeMan@753 494 Whilst there is very little code actually needed, you do need to instruct core.js to load your interface file when called for from a specification node. There is a function called `loadProjectSpecCallback' which handles the decoding of the specification and setting any external items (such as metric collection). At the very end of this function there is an if statement, add to this list with your interface string to link to the source. There is an example in there for both the APE and MUSHRA tests already included. Note: Any updates to core.js in future work will most likely overwrite your changes to this file, so remember to check your interface is still here after any update that interferes with core.js.
BrechtDeMan@753 495 Any further files can be loaded here as well, such as css styling files. jQuery is already included.
BrechtDeMan@753 496
BrechtDeMan@753 497 \subsection{Building the Interface}
BrechtDeMan@753 498 Your interface file will get loaded automatically when the `interface' attribute of the setup node matches the string in the `loadProjectSpecCallback' function. The following functions must be defined in your interface file.
BrechtDeMan@753 499 \begin{itemize}
BrechtDeMan@753 500 \item \texttt{loadInterface} - Called once when the document is parsed. This creates any necessary bindings, such as to the metric collection classes and any check commands. Here you can also start the structure for your test such as placing in any common nodes (such as the title and empty divs to drop content into later).
BrechtDeMan@753 501 \item \texttt{loadTest(audioHolderObject)} - Called for each page load. The audioHolderObject contains a specification node holding effectively one of the audioHolder nodes.
BrechtDeMan@753 502 \item \texttt{resizeWindow(event)} - Handle for any window resizing. Simply scale your interface accordingly. This function must be here, but can me an empty function call.
BrechtDeMan@753 503 \end{itemize}
BrechtDeMan@753 504
BrechtDeMan@753 505 \subsubsection{loadInterface}
BrechtDeMan@753 506 This function is called by the interface once the document has been parsed since some browsers may parse files asynchronously. The best method is simply to put `loadInterface()' at the top of your interface file, therefore when the JavaScript engine is ready the function is called.
BrechtDeMan@753 507
BrechtDeMan@753 508 By default the HTML file has an element with id ``topLevelBody'' where you can build your interface. Make sure you blank the contents of that object. This function is the perfect time to build any fixed items, such as the page title, session titles, interface buttons (Start, Stop, Submit) and any holding and structure elements for later on.
BrechtDeMan@753 509
BrechtDeMan@753 510 At the end of the function, insert these two function calls: testState.initialise() and testState.advanceState();. This will actually begin the test sequence, including the pre-test options (if any are included in the specification document).
BrechtDeMan@753 511
BrechtDeMan@753 512 \subsubsection{loadTest(audioHolderObject)}
BrechtDeMan@753 513 This function is called on each new test page. It is this functions job to clear out the previous test and set up the new page. Use the function audioEngineContext.newTestPage(); to instruct the audio engine to prepare for a new page. ``audioEngineContext.audioObjects = [];'' will delete any audioObjects, interfaceContext.deleteCommentBoxes(); will delete any comment boxes and interfaceContext.deleteCommentQuestions(); will delete any extra comment boxes specified by commentQuestion nodes.
BrechtDeMan@753 514
BrechtDeMan@753 515 This function will need to instruct the audio engine to build each fragment. Just passing the constructor each element from the audioHolderObject will build the track, audioEngineContext.newTrack(element) (where element is the audioHolderObject audio element). This will return a reference to the constructed audioObject. Decoding of the audio will happen asynchronously.
BrechtDeMan@753 516
BrechtDeMan@753 517 You also need to link audioObject.interfaceDOM with your interface object for that audioObject. The interfaceDOM object has a few default methods. Firstly it must start disabled and become enabled once the audioObject has decoded the audio (function call: enable()). Next it must have a function exportXMLDOM(), this will return the xml node for your interface, however the default is for it to return a value node, with textContent equal to the normalised value. You can perform other functions, but our scripts may not work if something different is specified (as it will breach our results specifications). Finally it must also have a method getValue, which returns the normalised value.
BrechtDeMan@753 518
BrechtDeMan@753 519 It is also the job the interfaceDOM to call any metric collection functions necessary, however some functions may be better placed outside (for example, the APE interface uses drag and drop, therefore the best way was to call the metric functions from the dragEnd function, which is called when the interface object is dropped). Metrics based upon listening are handled by the audioObject. The interfaceDOM object must manage any movement metrics. For a list of valid metrics and their behaviours, look at the project specification document included in the repository/docs location. The same goes for any checks required when pressing the submit button, or any other method to proceed the test state.
BrechtDeMan@753 520
BrechtDeMan@753 521 \clearpage
BrechtDeMan@753 522 \section{Analysis and diagnostics}
BrechtDeMan@753 523 \subsection{In the browser}
BrechtDeMan@753 524 See `analysis.html' in the main folder: immediate visualisation of (by default) all results in the `saves/' folder.
BrechtDeMan@753 525
BrechtDeMan@753 526 \subsection{Python scripts}
BrechtDeMan@753 527 The package includes Python (2.7) scripts (in `scripts/') to extract ratings and comments, generate visualisations of ratings and timelines, and produce a fully fledged report.
BrechtDeMan@753 528
BrechtDeMan@753 529 Visualisation requires the free matplotlib toolbox (http://matplotlib.org), numpy and scipy.
BrechtDeMan@753 530 By default, the scripts can be run from the `scripts' folder, with the result files in the `saves' folder (the default location where result XMLs are stored). Each script takes the XML file folder as an argument, along with other arguments in some cases.
BrechtDeMan@753 531 Note: to avoid all kinds of problems, please avoid using spaces in file and folder names (this may work on some systems, but others don't like it).
BrechtDeMan@753 532
BrechtDeMan@753 533 \subsubsection{comment\_parser.py}
BrechtDeMan@753 534 Extracts comments from the output XML files corresponding with the different subjects found in `saves/'. It creates a folder per `audioholder'/page it finds, and stores a CSV file with comments for every `audioelement'/fragment within these respective `audioholders'/pages. In this CSV file, every line corresponds with a subject/output XML file. Depending on the settings, the first column containing the name of the corresponding XML file can be omitted (for anonymisation).
BrechtDeMan@753 535 Beware of Excel: sometimes the UTF-8 is not properly imported, leading to problems with special characters in the comments (particularly cumbersome for foreign languages).
BrechtDeMan@753 536
BrechtDeMan@753 537 \subsubsection{evaluation\_stats.py}
BrechtDeMan@753 538 Shows a few statistics of tests in the `saves/' folder so far, mainly for checking for errors. Shows the number of files that are there, the audioholder IDs that were tested (and how many of each separate ID), the duration of each page, the duration of each complete test, the average duration per page, and the average duration in function of the page number.
BrechtDeMan@753 539
BrechtDeMan@753 540 \subsubsection{generate\_report.py}
BrechtDeMan@753 541 Similar to `evaluation\_stats.py', but generates a PDF report based on the output files in the `saves/' folder - or any folder specified as command line argument. Uses pdflatex to write a LaTeX document, then convert to a PDF.
BrechtDeMan@753 542
BrechtDeMan@753 543 \subsubsection{score\_parser.py}
BrechtDeMan@753 544 Extracts rating values from the XML to CSV - necessary for running visualisation of ratings. Creates the folder `saves/ratings/' if not yet created, to which it writes a separate file for every `audioholder'/page in any of the output XMLs it finds in `saves/'. Within each file, rows represent different subjects (output XML file names) and columns represent different `audioelements'/fragments.
BrechtDeMan@753 545
BrechtDeMan@753 546 \subsubsection{score\_plot.py}
BrechtDeMan@753 547 Plots the ratings as stored in the CSVs created by score\_parser.py
BrechtDeMan@753 548 Depending on the settings, it displays and/or saves (in `saves/ratings/') a boxplot, confidence interval plot, scatter plot, or a combination of the aforementioned.
BrechtDeMan@753 549 Requires the free matplotlib library.
BrechtDeMan@753 550 At this point, more than one subjects are needed for this script to work.
BrechtDeMan@753 551
BrechtDeMan@753 552 \subsubsection{timeline\_view\_movement.py}
BrechtDeMan@753 553 Creates a timeline for every subject, for every `audioholder'/page, corresponding with any of the output XML files found in `saves/'. It shows the marker movements of the different fragments, along with when each fragment was played (red regions). Automatically takes fragment names, rating axis title, rating axis labels, and audioholder name from the XML file (if available).
BrechtDeMan@753 554
BrechtDeMan@753 555 \subsubsection{timeline\_view.py} % should be omitted or absorbed by the above soon
BrechtDeMan@753 556 Creates a timeline for every subject, for every `audioholder'/page, corresponding with any of the output XML files found in `saves/'. It shows when and for how long the subject listened to each of the fragments.
BrechtDeMan@753 557
BrechtDeMan@753 558
BrechtDeMan@753 559
BrechtDeMan@753 560 \clearpage
BrechtDeMan@753 561 \section{Troubleshooting} \label{sec:troubleshooting}
BrechtDeMan@753 562 \subsection{Reporting bugs and requesting features}
BrechtDeMan@753 563 Thanks to feedback from using the interface in experiments by the authors and others, many bugs have been caught and fatal crashes due to the interface seem to be a thing of the past entirely.
BrechtDeMan@753 564
BrechtDeMan@753 565 We continually develop this tool to fix issues and implement features useful to us or our user base. See \url{https://code.soundsoftware.ac.uk/projects/webaudioevaluationtool/issues} for a list of feature requests and bug reports, and their status.
BrechtDeMan@753 566
BrechtDeMan@753 567 Please contact the authors if you experience any bugs, if you would like additional functionality, if you spot any errors or gaps in the documentation, if you have questions about using the interface, or if you would like to give any feedback (even positive!) about the interface. We look forward to learning how the tool has (not) been useful to you.
BrechtDeMan@753 568
BrechtDeMan@753 569
BrechtDeMan@753 570 \subsection{First aid}
BrechtDeMan@753 571 Meanwhile, if things do go wrong or the test needs to be interrupted for whatever reason, all data is not lost. In a normal scenario, the test needs to be completed until the end (the final `Submit'), at which point the output XML is stored in the \texttt{saves/}. If this stage is not reached, open the JavaScript Console (see below for how to find it) and type
BrechtDeMan@753 572
BrechtDeMan@753 573 \texttt{createProjectSave()}
BrechtDeMan@753 574
BrechtDeMan@753 575 to present the result XML file on the client side, or
BrechtDeMan@753 576
BrechtDeMan@753 577 \texttt{createProjectSave(specification.projectReturn)}
BrechtDeMan@753 578
BrechtDeMan@753 579 to try to store it to the specified location, e.g. the `saves/' folder on the web server or the local machine (on failure the result XML should be presented directly in the web browser instead)
BrechtDeMan@753 580
BrechtDeMan@753 581 and hit enter. This will open a pop-up window with a hyperlink that reads `Save File'; click it and an XML file with results until that point should be stored in your download folder.
BrechtDeMan@753 582
BrechtDeMan@753 583 Alternatively, a lot of data can be read from the same console, in which the tool prints a lot of debug information. Specifically:
BrechtDeMan@753 584 \begin{itemize}
BrechtDeMan@753 585 \item the randomisation of pages and fragments are logged;
BrechtDeMan@753 586 \item any time a slider is played, its ID and the time stamp (in seconds since the start of the test) are displayed;
BrechtDeMan@753 587 \item any time a slider is dragged and dropped, the location where it is dropped including the time stamp are shown;
BrechtDeMan@753 588 \item any comments and pre- or post-test questions and their answers are logged as well.
BrechtDeMan@753 589 \end{itemize}
BrechtDeMan@753 590
BrechtDeMan@753 591 You can select all this and save into a text file, so that none of this data is lost. You may to choose to do this even when a test was successful as an extra precaution.
BrechtDeMan@753 592
BrechtDeMan@753 593 If you encounter any issue which you believe to be caused by any aspect of the tool, and/or which the documentation does not mention, please do let us know!
BrechtDeMan@753 594
BrechtDeMan@753 595 \subsubsection*{Opening the JavaScript Console}
BrechtDeMan@753 596 \begin{itemize}
BrechtDeMan@753 597 \item In Google Chrome, the JavaScript Console can be found in \textbf{View$>$Developer$>$JavaScript Console}, or via the keyboard shortcut Cmd + Alt + J (Mac OS X).
BrechtDeMan@753 598 \item In Safari, the JavaScript Console can be found in \textbf{Develop$>$Show Error Console}, or via the keyboard shortcut Cmd + Alt + C (Mac OS X). Note that for the Developer menu to be visible, you have to go to Preferences (Cmd + ,) and enable `Show Develop menu in menu bar' in the `Advanced' tab. \textbf{Note that as long as the Developer menu is not visible, nothing is logged to the console, i.e. you will only be able to see diagnostic information from when you switched on the Developer tools onwards.}
BrechtDeMan@753 599 \item In Firefox, go to \textbf{Tools$>$Web Developer$>$Web Console}, or hit Cmd + Alt + K.
BrechtDeMan@753 600 \end{itemize}
BrechtDeMan@753 601
BrechtDeMan@753 602 \subsection{Known issues and limitations}
BrechtDeMan@753 603 \label{sec:knownissues}
BrechtDeMan@753 604
BrechtDeMan@753 605 The following is a non-exhaustive list of problems and limitations you may experience using this tool, due to not being supported yet by us, or by the Web Audio API and/or (some) browsers.
BrechtDeMan@753 606
BrechtDeMan@753 607 \begin{itemize}
BrechtDeMan@753 608 \item Issue \href{https://code.soundsoftware.ac.uk/issues/1463}{\textbf{\#1463}}: \textbf{Firefox} only supports 8 bit and 16 bit WAV files. Pending automatic requantisation (which deteriorates the audio signal's dynamic range to some extent), WAV format stimuli need to adhere to these limitations in order for the test to be compatible with Firefox.
BrechtDeMan@753 609 \item Issues \href{https://code.soundsoftware.ac.uk/issues/1474}{\textbf{\#1474}} and \href{https://code.soundsoftware.ac.uk/issues/1462}{\textbf{\#1462}}: On occasions, audio is not working - or only a continuous `beep' can be heard - notably in \textbf{Safari}. Refreshing, quitting the browser and even enabling Developer tools in Safari's Preferences pane (`Advanced' tab: ``Show `Develop' menu in menu bar'') has helped resolve this. If no (high quality) audio can be heard, make sure your entire playback system's settings are all correct.
BrechtDeMan@753 610 \end{itemize}
BrechtDeMan@753 611
BrechtDeMan@753 612 \clearpage
BrechtDeMan@753 613 \bibliographystyle{ieeetr}
BrechtDeMan@753 614 \bibliography{Instructions}{}
BrechtDeMan@753 615
BrechtDeMan@753 616
BrechtDeMan@753 617 \clearpage
BrechtDeMan@753 618 \appendix
BrechtDeMan@753 619
BrechtDeMan@753 620 \section{Legacy}
BrechtDeMan@753 621 The APE interface and most of the functionality of the first WAET editions are inspired by the APE toolbox for MATLAB \cite{ape}. See \url{https://code.soundsoftware.ac.uk/projects/ape} for the source code and \url{http://brechtdeman.com/publications/aes136.pdf} for the corresponding paper.
BrechtDeMan@753 622
BrechtDeMan@753 623 \clearpage
BrechtDeMan@753 624
BrechtDeMan@753 625 \section{Listening test instructions example}
BrechtDeMan@753 626
BrechtDeMan@753 627 Before each test, show the instructions below or similar and make sure it is available to the subject throughout the test. Make sure to ask whether the participant has any questions upon seeing and/or reading the instructions.
BrechtDeMan@753 628
BrechtDeMan@753 629 \begin{itemize}
BrechtDeMan@753 630 \item You will be asked for your name (``John Smith'') and location (room identifier).
BrechtDeMan@753 631 \item An interface will appear, where you are asked to
BrechtDeMan@753 632 \begin{itemize}
BrechtDeMan@753 633 \item click green markers to play the different mixes;
BrechtDeMan@753 634 \item drag the markers on a scale to reflect your preference for the mixes;
BrechtDeMan@753 635 \item comment on these mixes, using text boxes with corresponding numbers (in your \textbf{native language});
BrechtDeMan@753 636 \item optionally comment on all mixes together, or on the song, in `General comments'.
BrechtDeMan@753 637 \end{itemize}
BrechtDeMan@753 638 \item You are asked for your personal, honest opinion. Feel free to use the full range of the scale to convey your opinion of the various mixes. Don?t be afraid to be harsh and direct.
BrechtDeMan@753 639 \item The markers appear at random positions at first (which means some markers may hide behind others).
BrechtDeMan@753 640 \item The interface can take a few seconds to start playback, but switching between mixes should be instantaneous.
BrechtDeMan@753 641 \item This is a research experiment, so please forgive us if things go wrong. Let us know immediately and we will fix it or restart the test.
BrechtDeMan@753 642 \item When the test is finished (after all songs have been evaluated), just call the experimenter, do NOT close the window.
BrechtDeMan@753 643 \item After the test, please fill out our survey about your background, experience and feedback on the test.
BrechtDeMan@753 644 \item By participating, you consent to us using all collected data for research. Unless asked explicitly, all data will be anonymised when shared.
BrechtDeMan@753 645 \end{itemize}
BrechtDeMan@753 646
BrechtDeMan@753 647 \clearpage
BrechtDeMan@753 648
BrechtDeMan@753 649 \section{Terminology} % just to keep track of what exactly we call things. Don't use terms that are too different, to avoid confusion.
BrechtDeMan@753 650 As a guide to better understand the Instructions, and to expand them later, here is a list of terms that may be unclear or ambiguous unless properly defined.
BrechtDeMan@753 651 \begin{description}
BrechtDeMan@753 652 \item[Subject] The word we use for a participant, user, ... of the test, i.e. not the experimenter who designs the test but the person who evaluates the audio under test as part of an experiment (or the preparation of one).
BrechtDeMan@753 653 \item[User] The person who uses the tool to configure, run and analyse the test - i.e. the experimenter, most likely a researcher - or at least
BrechtDeMan@753 654 \item[Page] A screen in a test; corresponds with an \texttt{audioholder}
BrechtDeMan@753 655 \item[Fragment] An element or sample in a test; corresponds with an \texttt{audioelement}
BrechtDeMan@753 656 \item[Test] A complete test which can consist of several pages; corresponds with an entire configuration XML file
BrechtDeMan@753 657 \item[Configuration XML file] The XML file containing the necessary information on interface, samples, survey questions, configurations, ... which the JavaScript modules read to produce the desired test.
BrechtDeMan@753 658 \item[Results XML file] The output of a successful test, including ratings, comments, survey responses, timing information, and the complete configuration XML file with which the test was generated in the first place.
BrechtDeMan@753 659 \end{description}
BrechtDeMan@753 660
BrechtDeMan@753 661 \clearpage
BrechtDeMan@753 662
BrechtDeMan@753 663 \setcounter{secnumdepth}{0} % don't number this last bit
BrechtDeMan@753 664 \section{Contact details} % maybe add web pages, Twitter accounts, whatever you like
BrechtDeMan@753 665 \label{sec:contact}
BrechtDeMan@753 666
BrechtDeMan@753 667 \begin{itemize}
BrechtDeMan@753 668 \item Nicholas Jillings: \texttt{nicholas.jillings@mail.bcu.ac.uk}
BrechtDeMan@753 669 \item Brecht De Man: \texttt{b.deman@qmul.ac.uk}
BrechtDeMan@753 670 \item David Moffat: \texttt{d.j.moffat@qmul.ac.uk}
BrechtDeMan@753 671 \end{itemize}
BrechtDeMan@753 672
BrechtDeMan@753 673 \end{document}