annotate docs/Instructions/Instructions.tex @ 798:397f19747594

Instructions update (WIP); removed basic instructions from README.
author Brecht De Man <BrechtDeMan@users.noreply.github.com>
date Fri, 18 Dec 2015 01:45:54 +0000
parents 17b550310734
children 9bf8ecbcdc8a 43801b3d6131
rev   line source
BrechtDeMan@765 1 \documentclass[11pt, oneside]{article} % use "amsart" instead of "article" for AMSLaTeX format
BrechtDeMan@765 2 \usepackage{geometry} % See geometry.pdf to learn the layout options. There are lots.
BrechtDeMan@765 3 \geometry{letterpaper} % ... or a4paper or a5paper or ...
BrechtDeMan@765 4 %\geometry{landscape} % Activate for rotated page geometry
BrechtDeMan@765 5 \usepackage[parfill]{parskip} % Activate to begin paragraphs with an empty line rather than an indent
BrechtDeMan@765 6 \usepackage{graphicx} % Use pdf, png, jpg, or eps§ with pdflatex; use eps in DVI mode
BrechtDeMan@765 7 % TeX will automatically convert eps --> pdf in pdflatex
BrechtDeMan@765 8
BrechtDeMan@765 9 \usepackage{listings} % Source code
BrechtDeMan@798 10 \usepackage{xcolor} % colour (source code for instance)
BrechtDeMan@798 11 \definecolor{grey}{rgb}{0.1,0.1,0.1}
BrechtDeMan@798 12 \definecolor{darkblue}{rgb}{0.0,0.0,0.6}
BrechtDeMan@798 13 \definecolor{cyan}{rgb}{0.0,0.6,0.6}
BrechtDeMan@798 14
BrechtDeMan@765 15 \usepackage{amssymb}
BrechtDeMan@765 16 \usepackage{cite}
BrechtDeMan@765 17 \usepackage{hyperref} % Hyperlinks
BrechtDeMan@765 18 \usepackage[nottoc,numbib]{tocbibind} % 'References' in TOC
BrechtDeMan@765 19
BrechtDeMan@765 20 \graphicspath{{img/}} % Relative path where the images are stored.
BrechtDeMan@765 21
BrechtDeMan@765 22 \title{Instructions for \\ Web Audio Evaluation Tool}
BrechtDeMan@765 23 \author{Nicholas Jillings, Brecht De Man and David Moffat}
BrechtDeMan@765 24 \date{7 December 2015} % Activate to display a given date or no date
BrechtDeMan@765 25
BrechtDeMan@765 26 \begin{document}
BrechtDeMan@765 27 \maketitle
BrechtDeMan@765 28
BrechtDeMan@798 29 These instructions are about use of the Web Audio Evaluation Tool on Windows and Mac OS X platforms.
BrechtDeMan@798 30
BrechtDeMan@798 31 We request that you acknowledge the authors and cite our work when using it \cite{waet}, see also CITING.txt.
BrechtDeMan@798 32
BrechtDeMan@798 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@798 34
BrechtDeMan@765 35 % TO DO: Linux
BrechtDeMan@765 36
BrechtDeMan@765 37 \tableofcontents
BrechtDeMan@765 38
BrechtDeMan@765 39 \clearpage
BrechtDeMan@765 40
BrechtDeMan@765 41 \section{Installation}
BrechtDeMan@798 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@765 43
BrechtDeMan@765 44 \subsection{Contents}
BrechtDeMan@765 45 The folder should contain the following elements: \\
BrechtDeMan@765 46
BrechtDeMan@765 47 \textbf{Main folder:}
BrechtDeMan@765 48 \begin{itemize}
BrechtDeMan@765 49 \item \texttt{analyse.html}: analysis and diagnostics of a set of result XML files
BrechtDeMan@765 50 \item \texttt{ape.css, core.css, graphics.css, mushra.css, structure.css}: style files (edit to change appearance)
BrechtDeMan@765 51 \item \texttt{ape.js}: JavaScript file for APE-style interface \cite{ape}
BrechtDeMan@798 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@765 53 \item \texttt{core.js}: JavaScript file with core functionality
BrechtDeMan@765 54 \item \texttt{index.html}: webpage where interface should appear (includes link to test configuration XML)
BrechtDeMan@765 55 \item \texttt{jquery-2.1.4.js}: jQuery JavaScript Library
BrechtDeMan@798 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@798 57 \item \texttt{mushra.js}: JavaScript file for MUSHRA-style interface \cite{mushra}
BrechtDeMan@765 58 \item \texttt{pythonServer.py}: webserver for running tests locally
BrechtDeMan@765 59 \item \texttt{pythonServer-legacy.py}: webserver with limited functionality (no automatic storing of output XML files)
BrechtDeMan@765 60 \item \texttt{save.php}: PHP script to store result XML files to web server\\
BrechtDeMan@765 61 \end{itemize}
BrechtDeMan@765 62 \textbf{Documentation (./docs/)}
BrechtDeMan@765 63 \begin{itemize}
BrechtDeMan@798 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@765 65 \item Instructions: PDF and \LaTeX source of these instructions
BrechtDeMan@765 66 \item Project Specification Document (\LaTeX/PDF)
BrechtDeMan@765 67 \item Results Specification Document (\LaTeX/PDF)
BrechtDeMan@798 68 \item SMC15: PDF and \LaTeX source of 12th Sound and Music Computing Conference paper \cite{waet}
BrechtDeMan@798 69 \item WAC2016: PDF and \LaTeX source of 2nd Web Audio Conference paper\\
BrechtDeMan@765 70 \end{itemize}
BrechtDeMan@765 71 \textbf{Example project (./example\_eval/)}
BrechtDeMan@765 72 \begin{itemize}
BrechtDeMan@765 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@765 74 \end{itemize}
BrechtDeMan@765 75 \textbf{Output files (./saves/)}
BrechtDeMan@765 76 \begin{itemize}
BrechtDeMan@765 77 \item The output XML files of tests will be stored here by default by the \texttt{pythonServer.py} script.\\
BrechtDeMan@765 78 \end{itemize}
BrechtDeMan@765 79 \textbf{Auxiliary scripts (./scripts/)}
BrechtDeMan@765 80 \begin{itemize}
BrechtDeMan@765 81 \item Helpful Python scripts for extraction and visualisation of data.\\
BrechtDeMan@765 82 \end{itemize}
BrechtDeMan@765 83 \textbf{Test creation tool (./test\_create/)}
BrechtDeMan@765 84 \begin{itemize}
BrechtDeMan@765 85 \item Webpage for easily setting up your own test without having to delve into the XML.\\
BrechtDeMan@765 86 \end{itemize}
BrechtDeMan@765 87
BrechtDeMan@798 88 \subsection{Compatibility}
BrechtDeMan@765 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@798 90
BrechtDeMan@798 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@765 92
BrechtDeMan@765 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@765 94
BrechtDeMan@798 95 \clearpage
BrechtDeMan@765 96
BrechtDeMan@765 97
BrechtDeMan@765 98 \section{Test setup}
BrechtDeMan@765 99
BrechtDeMan@765 100 \subsection{Sample rate}
BrechtDeMan@765 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@765 102
BrechtDeMan@765 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@765 104
BrechtDeMan@765 105 Note that upon changing the sampling rate, the browser will have to be restarted for the change to take effect.
BrechtDeMan@765 106
BrechtDeMan@765 107 \subsubsection{Mac OS X}
BrechtDeMan@765 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@765 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@765 110
BrechtDeMan@765 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@765 112
BrechtDeMan@765 113 \begin{figure}[tb]
BrechtDeMan@765 114 \centering
BrechtDeMan@765 115 \includegraphics[width=.65\textwidth]{img/audiomidisetup.png}
BrechtDeMan@765 116 \caption{The Audio MIDI Setup window in Mac OS X}
BrechtDeMan@765 117 \label{fig:audiomidisetup}
BrechtDeMan@765 118 \end{figure}
BrechtDeMan@765 119
BrechtDeMan@765 120 \subsubsection{Windows}
BrechtDeMan@765 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@765 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@765 123
BrechtDeMan@765 124 \subsection{Local test}
BrechtDeMan@765 125 If the test is hosted locally, you will need to run the local webserver provided with this tool.
BrechtDeMan@765 126
BrechtDeMan@765 127 \subsubsection{Mac OS X}
BrechtDeMan@765 128
BrechtDeMan@765 129 On Mac OS X, Python comes preinstalled.
BrechtDeMan@765 130
BrechtDeMan@765 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@765 132
BrechtDeMan@765 133 \texttt{cd /Users/John/Documents/test/}
BrechtDeMan@765 134
BrechtDeMan@765 135 Then hit enter and run the Python script by typing
BrechtDeMan@765 136
BrechtDeMan@765 137 \texttt{python pythonServer.py}
BrechtDeMan@765 138
BrechtDeMan@765 139 and hit enter again. See also Figure \ref{fig:terminal}.
BrechtDeMan@765 140
BrechtDeMan@765 141 \begin{figure}[htbp]
BrechtDeMan@765 142 \begin{center}
BrechtDeMan@765 143 \includegraphics[width=.75\textwidth]{pythonServer.png}
BrechtDeMan@765 144 \caption{Mac OS X: The Terminal window after going to the right folder (\texttt{cd [folder\_path]}) and running \texttt{pythonServer.py}.}
BrechtDeMan@765 145 \label{fig:terminal}
BrechtDeMan@765 146 \end{center}
BrechtDeMan@765 147 \end{figure}
BrechtDeMan@765 148
BrechtDeMan@765 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@765 150
BrechtDeMan@765 151 You can leave this running throughout the different experiments (i.e. leave the Terminal open).
BrechtDeMan@765 152
BrechtDeMan@765 153 To start the test, open the browser and type
BrechtDeMan@765 154
BrechtDeMan@765 155 \texttt{localhost:8000}
BrechtDeMan@765 156
BrechtDeMan@765 157 and hit enter. The test should start (see Figure \ref{fig:test}).
BrechtDeMan@765 158
BrechtDeMan@765 159 To quit the server, either close the terminal window or press Ctrl+C on your keyboard to forcibly shut the server.
BrechtDeMan@765 160
BrechtDeMan@765 161 \subsubsection{Windows}
BrechtDeMan@765 162
BrechtDeMan@765 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@765 164
BrechtDeMan@765 165 Simply double click the Python script \texttt{pythonServer.py} in the folder you downloaded.
BrechtDeMan@765 166
BrechtDeMan@765 167 You may see a warning like the one in Figure \ref{fig:warning}. Click `Allow access'.
BrechtDeMan@765 168
BrechtDeMan@765 169 \begin{figure}[htbp]
BrechtDeMan@765 170 \begin{center}
BrechtDeMan@765 171 \includegraphics[width=.6\textwidth]{warning.png}
BrechtDeMan@765 172 \caption{Windows: Potential warning message when executing \texttt{pythonServer.py}.}
BrechtDeMan@765 173 \label{fig:warning}
BrechtDeMan@765 174 \end{center}
BrechtDeMan@765 175 \end{figure}
BrechtDeMan@765 176
BrechtDeMan@765 177 The process should now start, in the Command prompt that opens - see Figure \ref{fig:python}.
BrechtDeMan@765 178
BrechtDeMan@765 179 \begin{figure}[htbp]
BrechtDeMan@765 180 \begin{center}
BrechtDeMan@765 181 \includegraphics[width=.75\textwidth]{python.png}
BrechtDeMan@765 182 \caption{Windows: The Command Prompt after running \texttt{pythonServer.py} and opening the corresponding website.}
BrechtDeMan@765 183 \label{fig:python}
BrechtDeMan@765 184 \end{center}
BrechtDeMan@765 185 \end{figure}
BrechtDeMan@765 186
BrechtDeMan@765 187 You can leave this running throughout the different experiments (i.e. leave the Command Prompt open).
BrechtDeMan@765 188
BrechtDeMan@765 189 To start the test, open the browser and type
BrechtDeMan@765 190
BrechtDeMan@765 191 \texttt{localhost:8000}
BrechtDeMan@765 192
BrechtDeMan@765 193 and hit enter. The test should start (see Figure \ref{fig:test}).
BrechtDeMan@765 194
BrechtDeMan@765 195 \begin{figure}[htb]
BrechtDeMan@765 196 \begin{center}
BrechtDeMan@765 197 \includegraphics[width=.8\textwidth]{test.png}
BrechtDeMan@765 198 \caption{The start of the test in Google Chrome on Windows 7.}
BrechtDeMan@765 199 \label{fig:test}
BrechtDeMan@765 200 \end{center}
BrechtDeMan@765 201 \end{figure}
BrechtDeMan@765 202
BrechtDeMan@765 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@765 204
BrechtDeMan@765 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@765 206
BrechtDeMan@765 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@765 208
BrechtDeMan@765 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@765 210
BrechtDeMan@765 211
BrechtDeMan@765 212 \subsection{Remote test}
BrechtDeMan@765 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@798 214
BrechtDeMan@798 215 Make sure the \texttt{projectReturn} attribute of the \texttt{setup} node is set to the \texttt{save.php} script.
BrechtDeMan@798 216
BrechtDeMan@798 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@798 218
BrechtDeMan@798 219
BrechtDeMan@765 220 \clearpage
BrechtDeMan@798 221
BrechtDeMan@798 222 \section{Interfaces}
BrechtDeMan@798 223
BrechtDeMan@798 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@798 225
BrechtDeMan@798 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@798 227 add \texttt{interface="APE"} to the \texttt{setup} node, where \texttt{"APE"} is one of the interface names below.
BrechtDeMan@798 228
BrechtDeMan@798 229 \subsection{APE}
BrechtDeMan@798 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@798 231 It also contains an optional text box for each element, to allow for clarification by the subject, tagging, and so on.
BrechtDeMan@798 232
BrechtDeMan@798 233 \subsection{MUSHRA}
BrechtDeMan@798 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@798 235
BrechtDeMan@765 236
BrechtDeMan@798 237 \clearpage
BrechtDeMan@798 238
BrechtDeMan@798 239 \section{Features}
BrechtDeMan@798 240
BrechtDeMan@798 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@798 242
BrechtDeMan@798 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@798 244
BrechtDeMan@798 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@798 246
BrechtDeMan@798 247 \subsection{Surveys}
BrechtDeMan@798 248 \subsubsection{Pre- and post-page surveys}
BrechtDeMan@798 249
BrechtDeMan@798 250 \subsubsection{Pre- and post-test surveys}
BrechtDeMan@798 251
BrechtDeMan@798 252 \subsubsection{Survey elements}
BrechtDeMan@798 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@798 254
BrechtDeMan@798 255 \begin{description}
BrechtDeMan@798 256 \item[statement] Simply shows text to the subject until `Next' or `Start' is clicked.
BrechtDeMan@798 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@798 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@798 259 \item[radio] Radio buttons.
BrechtDeMan@798 260 \item[checkbox] Checkboxes.\\
BrechtDeMan@798 261 \end{description}
BrechtDeMan@798 262
BrechtDeMan@798 263 \textbf{Example usage:}\\
BrechtDeMan@798 264
BrechtDeMan@798 265 \lstset{
BrechtDeMan@798 266 basicstyle=\ttfamily,
BrechtDeMan@798 267 columns=fullflexible,
BrechtDeMan@798 268 showstringspaces=false,
BrechtDeMan@798 269 commentstyle=\color{grey}\upshape
BrechtDeMan@798 270 }
BrechtDeMan@798 271
BrechtDeMan@798 272 \lstdefinelanguage{XML}
BrechtDeMan@798 273 {
BrechtDeMan@798 274 morestring=[b]",
BrechtDeMan@798 275 morestring=[s]{>}{<},
BrechtDeMan@798 276 morecomment=[s]{<?}{?>},
BrechtDeMan@798 277 stringstyle=\color{black} \bfseries,
BrechtDeMan@798 278 identifierstyle=\color{darkblue} \bfseries,
BrechtDeMan@798 279 keywordstyle=\color{cyan} \bfseries,
BrechtDeMan@798 280 morekeywords={xmlns,version,type},
BrechtDeMan@798 281 breaklines=true% list your attributes here
BrechtDeMan@798 282 }
BrechtDeMan@798 283 \scriptsize
BrechtDeMan@798 284 \lstset{language=XML}
BrechtDeMan@798 285
BrechtDeMan@798 286 \begin{lstlisting}
BrechtDeMan@798 287 <PostTest>
BrechtDeMan@798 288 <question id="location" mandatory="true" boxsize="large">Please enter your location. (example mandatory text question)</question>
BrechtDeMan@798 289 <number id="age" min="0">Please enter your age (example non-mandatory number question)</number>
BrechtDeMan@798 290 <radio id="rating">
BrechtDeMan@798 291 <statement>Please rate this interface (example radio button question)</statement>
BrechtDeMan@798 292 <option name="bad">Bad</option>
BrechtDeMan@798 293 <option name="poor">Poor</option>
BrechtDeMan@798 294 <option name="good">Good</option>
BrechtDeMan@798 295 <option name="great">Great</option>
BrechtDeMan@798 296 </radio>
BrechtDeMan@798 297 <statement>Thank you for taking this listening test. Please click 'Submit' and your results will appear in the 'saves/' folder.</statement>
BrechtDeMan@798 298 </PostTest>
BrechtDeMan@798 299 \end{lstlisting}
BrechtDeMan@798 300
BrechtDeMan@798 301
BrechtDeMan@798 302 \subsection{Randomisation}
BrechtDeMan@798 303
BrechtDeMan@798 304 \subsubsection{Randomisation of configuration XML files}
BrechtDeMan@798 305 % how to
BrechtDeMan@798 306 % explain how this is implemented in the pythonServer
BrechtDeMan@798 307 %Nick? already implemented in the PHP?
BrechtDeMan@798 308
BrechtDeMan@798 309
BrechtDeMan@798 310 \subsubsection{Randomsation of page order}
BrechtDeMan@798 311
BrechtDeMan@798 312
BrechtDeMan@798 313 \subsubsection{Randomisation of axis order}
BrechtDeMan@798 314
BrechtDeMan@798 315 \subsubsection{Randomisation of fragment order}
BrechtDeMan@798 316
BrechtDeMan@798 317
BrechtDeMan@798 318 \subsubsection{Randomisation of initial slider position}
BrechtDeMan@798 319
BrechtDeMan@798 320 % /subsubsection{Randomisation of survey question order}
BrechtDeMan@798 321 % should be an attribute of the individual 'pretest' and 'posttest' elements
BrechtDeMan@798 322 % uncomment once we have it
BrechtDeMan@798 323
BrechtDeMan@798 324 \subsection{Looping}
BrechtDeMan@798 325 Loops the fragments
BrechtDeMan@798 326 % how to enable?
BrechtDeMan@798 327 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@798 328
BrechtDeMan@798 329 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@798 330
BrechtDeMan@798 331 \subsection{Sample rate}
BrechtDeMan@798 332 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@798 333
BrechtDeMan@798 334 \subsection{Scrubber bar}
BrechtDeMan@798 335 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@798 336
BrechtDeMan@798 337 Make visible by adding \texttt{<option name='playhead'/>} to the \texttt{interface} node (see Section \ref{sec:checks}: Checks).
BrechtDeMan@798 338
BrechtDeMan@798 339 \subsection{Metrics}
BrechtDeMan@798 340 Enable the collection of metrics by adding \texttt{collectMetrics=`true'} in the \texttt{setup} node.
BrechtDeMan@798 341
BrechtDeMan@798 342 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@798 343
BrechtDeMan@798 344 \begin{lstlisting}
BrechtDeMan@798 345 <Metric>
BrechtDeMan@798 346 <metricEnable>testTimer</metricEnable>
BrechtDeMan@798 347 <metricEnable>elementTimer</metricEnable>
BrechtDeMan@798 348 <metricEnable>elementInitialPosition</metricEnable>
BrechtDeMan@798 349 <metricEnable>elementTracker</metricEnable>
BrechtDeMan@798 350 <metricEnable>elementFlagListenedTo</metricEnable>
BrechtDeMan@798 351 <metricEnable>elementFlagMoved</metricEnable>
BrechtDeMan@798 352 <metricEnable>elementListenTracker</metricEnable>
BrechtDeMan@798 353 </Metric>
BrechtDeMan@798 354 \end{lstlisting}
BrechtDeMan@798 355
BrechtDeMan@798 356 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@798 357
BrechtDeMan@798 358 \subsubsection{Time test duration}
BrechtDeMan@798 359 \texttt{testTimer}\\
BrechtDeMan@798 360
BrechtDeMan@798 361 \subsubsection{Time fragment playback}
BrechtDeMan@798 362 \texttt{elementTimer}\\
BrechtDeMan@798 363 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@798 364 % example output?
BrechtDeMan@798 365
BrechtDeMan@798 366 \subsubsection{Initial positions}
BrechtDeMan@798 367 \texttt{elementInitialPosition}\\
BrechtDeMan@798 368 Tracks the initial position of the sliders, especially relevant when these are randomised, so their influence
BrechtDeMan@798 369
BrechtDeMan@798 370 \subsubsection{Track movements}
BrechtDeMan@798 371
BrechtDeMan@798 372 \subsubsection{Which fragments listened to}
BrechtDeMan@798 373
BrechtDeMan@798 374 \subsubsection{Which fragments moved}
BrechtDeMan@798 375 Binary check whether or not a the marker corresponding with a particular fragment was moved at all throughout the experiment.
BrechtDeMan@798 376
BrechtDeMan@798 377 \subsubsection{elementListenTracker} %Nick? No idea what this does, if it's not what I wrote under 'Time fragment playback'
BrechtDeMan@798 378
BrechtDeMan@798 379 \subsection{References and anchors}
BrechtDeMan@798 380 \subsubsection{Reference}
BrechtDeMan@798 381 %...
BrechtDeMan@798 382 \subsubsection{Hidden reference}
BrechtDeMan@798 383 %...
BrechtDeMan@798 384 \subsubsection{Hidden anchor}
BrechtDeMan@798 385 %...
BrechtDeMan@798 386
BrechtDeMan@798 387 \subsection{Checks}
BrechtDeMan@798 388 \label{sec:checks}
BrechtDeMan@798 389
BrechtDeMan@798 390 %blabla
BrechtDeMan@798 391 These checks are enabled in the \texttt{interface} node, which is a child of the \texttt{setup} node.
BrechtDeMan@798 392 \subsubsection{Playback checks}
BrechtDeMan@798 393 % what it does/is
BrechtDeMan@798 394 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@798 395 % how to enable/disable
BrechtDeMan@798 396
BrechtDeMan@798 397 Alternatively, one can check whether the \emph{entire} fragment was listened to at least once.
BrechtDeMan@798 398 % how to enable
BrechtDeMan@798 399
BrechtDeMan@798 400 Add \texttt{<check name="fragmentPlayed"/>} to the \texttt{interface} node.
BrechtDeMan@798 401
BrechtDeMan@798 402
BrechtDeMan@798 403 \subsubsection{Movement check}
BrechtDeMan@798 404 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@798 405 If there are several axes, the warning will specify which samples have to be moved on which axis.
BrechtDeMan@798 406
BrechtDeMan@798 407 Add \texttt{<check name="fragmentMoved"/>} to the \texttt{interface} node.
BrechtDeMan@798 408
BrechtDeMan@798 409 \subsubsection{Comment check}
BrechtDeMan@798 410 % How to enable/disable?
BrechtDeMan@798 411
BrechtDeMan@798 412 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@798 413
BrechtDeMan@798 414 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@798 415
BrechtDeMan@798 416 Add \texttt{<check name="fragmentComments"/>} to the \texttt{interface} node.
BrechtDeMan@798 417
BrechtDeMan@798 418 %ADD: how to add a custom comment box
BrechtDeMan@798 419
BrechtDeMan@798 420 \subsubsection{Scale use check}
BrechtDeMan@798 421 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@798 422
BrechtDeMan@798 423 Add \texttt{<check name="scalerange" min="25" max="75"/>} to the \texttt{interface} node.
BrechtDeMan@798 424
BrechtDeMan@798 425 \subsubsection{Note on the use of multiple rating axes}
BrechtDeMan@798 426 I.e. what if more than one axis? How to specify which axis the checks relate to? %Nick? to add?
BrechtDeMan@798 427
BrechtDeMan@798 428 \subsection{Layout options}
BrechtDeMan@798 429 \texttt{title}, \texttt{scale}, \texttt{position}, \texttt{commentBoxPrefix}
BrechtDeMan@798 430
BrechtDeMan@798 431 \subsection{Multiple sliders}
BrechtDeMan@798 432 (APE example)
BrechtDeMan@798 433
BrechtDeMan@798 434 \begin{lstlisting}
BrechtDeMan@798 435 <interface name="preference">
BrechtDeMan@798 436 <title>Preference</title>
BrechtDeMan@798 437 <scale position="0">Min</scale>
BrechtDeMan@798 438 <scale position="100">Max</scale>
BrechtDeMan@798 439 <scale position="50">Middle</scale>
BrechtDeMan@798 440 <commentBoxPrefix>Comment on fragment</commentBoxPrefix>
BrechtDeMan@798 441 </interface>
BrechtDeMan@798 442 <interface name="depth">
BrechtDeMan@798 443 <title>Depth</title>
BrechtDeMan@798 444 <scale position="0">Low</scale>
BrechtDeMan@798 445 <scale position="100">High</scale>
BrechtDeMan@798 446 <scale position="50">Middle</scale>
BrechtDeMan@798 447 <commentBoxPrefix>Comment on fragment</commentBoxPrefix>
BrechtDeMan@798 448 </interface>
BrechtDeMan@798 449 \end{lstlisting}
BrechtDeMan@798 450 where the \texttt{interface} nodes are children of the \texttt{audioholder} node.
BrechtDeMan@798 451
BrechtDeMan@798 452 \subsection{Platform information}
BrechtDeMan@798 453 % what does it do, what does it look like
BrechtDeMan@798 454 % limitations?
BrechtDeMan@798 455
BrechtDeMan@798 456 \subsection{Show progress}
BrechtDeMan@798 457 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@798 458
BrechtDeMan@798 459 \subsection{Gain}
BrechtDeMan@798 460 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@798 461
BrechtDeMan@798 462 \texttt{<audioElements url="sample-01.wav" gain="-6" id="sample01quieter" />}
BrechtDeMan@798 463
BrechtDeMan@798 464 \subsection{Loudness}
BrechtDeMan@798 465 % automatic loudness equalisation
BrechtDeMan@798 466 % guide to loudness.js
BrechtDeMan@798 467 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@798 468
BrechtDeMan@798 469 \clearpage
BrechtDeMan@798 470
BrechtDeMan@765 471
BrechtDeMan@765 472 \section{Using the test create tool}
BrechtDeMan@765 473 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@765 474
BrechtDeMan@765 475 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@765 476
BrechtDeMan@765 477 Include audio by dragging and dropping the stimuli you wish to include.
BrechtDeMan@765 478
BrechtDeMan@765 479 The tool examines your XML before exporting to ensure you do not export an invalid XML structure which would crash the test.
BrechtDeMan@765 480
BrechtDeMan@765 481 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@765 482
BrechtDeMan@765 483 \subsection{Nodes to familiarise}
BrechtDeMan@765 484 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@765 485
BrechtDeMan@765 486 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@765 487
BrechtDeMan@765 488 \subsection{Modifying \texttt{core.js}}
BrechtDeMan@765 489 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@765 490 Any further files can be loaded here as well, such as css styling files. jQuery is already included.
BrechtDeMan@765 491
BrechtDeMan@765 492 \subsection{Building the Interface}
BrechtDeMan@765 493 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@765 494 \begin{itemize}
BrechtDeMan@765 495 \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@765 496 \item \texttt{loadTest(audioHolderObject)} - Called for each page load. The audioHolderObject contains a specification node holding effectively one of the audioHolder nodes.
BrechtDeMan@765 497 \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@765 498 \end{itemize}
BrechtDeMan@765 499
BrechtDeMan@765 500 \subsubsection{loadInterface}
BrechtDeMan@765 501 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@765 502
BrechtDeMan@765 503 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@765 504
BrechtDeMan@765 505 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@765 506
BrechtDeMan@765 507 \subsubsection{loadTest(audioHolderObject)}
BrechtDeMan@765 508 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@765 509
BrechtDeMan@765 510 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@765 511
BrechtDeMan@765 512 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@765 513
BrechtDeMan@765 514 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@765 515
BrechtDeMan@798 516 \clearpage
BrechtDeMan@798 517 \section{Analysis and diagnostics}
BrechtDeMan@798 518 \subsection{In the browser}
BrechtDeMan@798 519 See `analysis.html' in the main folder: immediate visualisation of (by default) all results in the `saves/' folder.
BrechtDeMan@798 520
BrechtDeMan@798 521 \subsection{Python scripts}
BrechtDeMan@798 522 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@798 523
BrechtDeMan@798 524 Visualisation requires the free matplotlib toolbox (http://matplotlib.org), numpy and scipy.
BrechtDeMan@798 525 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@798 526 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@798 527
BrechtDeMan@798 528 \subsubsection{comment\_parser.py}
BrechtDeMan@798 529 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@798 530 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@798 531
BrechtDeMan@798 532 \subsubsection{evaluation\_stats.py}
BrechtDeMan@798 533 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@798 534
BrechtDeMan@798 535 \subsubsection{generate\_report.py}
BrechtDeMan@798 536 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@798 537
BrechtDeMan@798 538 \subsubsection{score\_parser.py}
BrechtDeMan@798 539 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@798 540
BrechtDeMan@798 541 \subsubsection{score\_plot.py}
BrechtDeMan@798 542 Plots the ratings as stored in the CSVs created by score\_parser.py
BrechtDeMan@798 543 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@798 544 Requires the free matplotlib library.
BrechtDeMan@798 545 At this point, more than one subjects are needed for this script to work.
BrechtDeMan@798 546
BrechtDeMan@798 547 \subsubsection{timeline\_view\_movement.py}
BrechtDeMan@798 548 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@798 549
BrechtDeMan@798 550 \subsubsection{timeline\_view.py} % should be omitted or absorbed by the above soon
BrechtDeMan@798 551 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@798 552
BrechtDeMan@765 553
BrechtDeMan@765 554
BrechtDeMan@765 555 \clearpage
BrechtDeMan@765 556 \section{Troubleshooting} \label{sec:troubleshooting}
BrechtDeMan@798 557 \subsection{Reporting bugs and requesting features}
BrechtDeMan@798 558 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@765 559
BrechtDeMan@798 560 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@765 561
BrechtDeMan@798 562 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@765 563
BrechtDeMan@765 564
BrechtDeMan@798 565 \subsection{First aid}
BrechtDeMan@798 566 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@765 567
BrechtDeMan@798 568 \texttt{createProjectSave()}
BrechtDeMan@765 569
BrechtDeMan@798 570 to present the result XML file on the client side, or
BrechtDeMan@765 571
BrechtDeMan@798 572 \texttt{createProjectSave(specification.projectReturn)}
BrechtDeMan@765 573
BrechtDeMan@798 574 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@765 575
BrechtDeMan@798 576 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@798 577
BrechtDeMan@798 578 Alternatively, a lot of data can be read from the same console, in which the tool prints a lot of debug information. Specifically:
BrechtDeMan@798 579 \begin{itemize}
BrechtDeMan@798 580 \item the randomisation of pages and fragments are logged;
BrechtDeMan@798 581 \item any time a slider is played, its ID and the time stamp (in seconds since the start of the test) are displayed;
BrechtDeMan@798 582 \item any time a slider is dragged and dropped, the location where it is dropped including the time stamp are shown;
BrechtDeMan@798 583 \item any comments and pre- or post-test questions and their answers are logged as well.
BrechtDeMan@798 584 \end{itemize}
BrechtDeMan@765 585
BrechtDeMan@798 586 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@765 587
BrechtDeMan@798 588 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@765 589
BrechtDeMan@798 590 \subsubsection*{Opening the JavaScript Console}
BrechtDeMan@798 591 \begin{itemize}
BrechtDeMan@798 592 \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@798 593 \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@798 594 \item In Firefox, go to \textbf{Tools$>$Web Developer$>$Web Console}, or hit Cmd + Alt + K.
BrechtDeMan@798 595 \end{itemize}
BrechtDeMan@765 596
BrechtDeMan@798 597 \subsection{Known issues and limitations}
BrechtDeMan@798 598 \label{sec:knownissues}
BrechtDeMan@798 599
BrechtDeMan@798 600 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@798 601
BrechtDeMan@798 602 \begin{itemize}
BrechtDeMan@798 603 \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@798 604 \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@798 605 \end{itemize}
BrechtDeMan@765 606
BrechtDeMan@765 607 \clearpage
BrechtDeMan@765 608 \bibliographystyle{ieeetr}
BrechtDeMan@765 609 \bibliography{Instructions}{}
BrechtDeMan@765 610
BrechtDeMan@765 611
BrechtDeMan@765 612 \clearpage
BrechtDeMan@765 613 \appendix
BrechtDeMan@765 614
BrechtDeMan@798 615 \section{Legacy}
BrechtDeMan@798 616 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@798 617
BrechtDeMan@798 618 \clearpage
BrechtDeMan@798 619
BrechtDeMan@765 620 \section{Listening test instructions example}
BrechtDeMan@765 621
BrechtDeMan@765 622 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@765 623
BrechtDeMan@765 624 \begin{itemize}
BrechtDeMan@765 625 \item You will be asked for your name (``John Smith'') and location (room identifier).
BrechtDeMan@765 626 \item An interface will appear, where you are asked to
BrechtDeMan@765 627 \begin{itemize}
BrechtDeMan@765 628 \item click green markers to play the different mixes;
BrechtDeMan@765 629 \item drag the markers on a scale to reflect your preference for the mixes;
BrechtDeMan@765 630 \item comment on these mixes, using text boxes with corresponding numbers (in your \textbf{native language});
BrechtDeMan@765 631 \item optionally comment on all mixes together, or on the song, in `General comments'.
BrechtDeMan@765 632 \end{itemize}
BrechtDeMan@765 633 \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@765 634 \item The markers appear at random positions at first (which means some markers may hide behind others).
BrechtDeMan@765 635 \item The interface can take a few seconds to start playback, but switching between mixes should be instantaneous.
BrechtDeMan@765 636 \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@765 637 \item When the test is finished (after all songs have been evaluated), just call the experimenter, do NOT close the window.
BrechtDeMan@765 638 \item After the test, please fill out our survey about your background, experience and feedback on the test.
BrechtDeMan@765 639 \item By participating, you consent to us using all collected data for research. Unless asked explicitly, all data will be anonymised when shared.
BrechtDeMan@765 640 \end{itemize}
BrechtDeMan@765 641
BrechtDeMan@765 642 \clearpage
BrechtDeMan@765 643
BrechtDeMan@798 644 \section{Vocabulary} % just to keep track of what exactly we call things. Don't use terms that are too different, to avoid confusion.
BrechtDeMan@798 645 \begin{description}
BrechtDeMan@798 646 \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@798 647 \item[Page] A screen in a test; corresponds with an \texttt{audioholder}
BrechtDeMan@798 648 \item[Fragment] An element or sample in a test; corresponds with an \texttt{audioelement}
BrechtDeMan@798 649 \item[Test] A complete test which can consist of several pages; corresponds with an entire configuration XML file
BrechtDeMan@798 650 \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@798 651 \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@798 652 \end{description}
BrechtDeMan@798 653
BrechtDeMan@798 654 \clearpage
BrechtDeMan@798 655
BrechtDeMan@798 656 \setcounter{secnumdepth}{0} % don't number this last bit
BrechtDeMan@798 657 \section{Contact details} % maybe add web pages, Twitter accounts, whatever you like
BrechtDeMan@765 658 \label{sec:contact}
BrechtDeMan@765 659
BrechtDeMan@765 660 \begin{itemize}
BrechtDeMan@765 661 \item Nicholas Jillings: \texttt{nicholas.jillings@mail.bcu.ac.uk}
BrechtDeMan@765 662 \item Brecht De Man: \texttt{b.deman@qmul.ac.uk}
BrechtDeMan@765 663 \item David Moffat: \texttt{d.j.moffat@qmul.ac.uk}
BrechtDeMan@765 664 \end{itemize}
BrechtDeMan@765 665
BrechtDeMan@765 666 \end{document}