├── .gitignore ├── .travis.yml ├── AUTHORS.md ├── Dockerfile ├── Gruntfile.js ├── LICENSE.txt ├── README.md ├── THIRD-PARTY-NOTICES.txt ├── configs ├── ABX_noloop.yaml ├── ABX_noloop_nowav.yaml ├── ABX_nowav.yaml ├── AB_noloop.yaml ├── AB_noloop_nowav.yaml ├── AB_nowav.yaml ├── LMS_2scale.yaml ├── LMS_4scale.yaml ├── LSS_2scale.yaml ├── LSS_4scale.yaml ├── LSS_multiscale.yaml ├── bs1116_noloop.yaml ├── bs1116_noloop_nowav.yaml ├── bs1116_nowav.yaml ├── complete.yaml ├── consent.yaml ├── default.yaml ├── lss_lms.yaml ├── mushra_customquestionaire.yaml ├── mushra_noloop.yaml ├── mushra_noloop_nowav.yaml ├── mushra_norandom.yaml ├── mushra_nowav.yaml ├── resources │ ├── audio │ │ ├── mono_c1.wav │ │ ├── mono_c2.wav │ │ ├── mono_c3.wav │ │ └── mono_ref.wav │ └── images │ │ ├── star_off.png │ │ └── star_on.png ├── spatial.yaml └── training.yaml ├── design ├── images │ ├── alabs_new.png │ ├── iis.svg │ └── techfak.svg ├── jquery.mobile-theme │ └── themes │ │ └── default │ │ ├── alabs_0_3.css │ │ ├── alabs_0_3.min.css │ │ ├── images │ │ ├── ajax-loader.gif │ │ └── icons-png │ │ │ ├── action-black.png │ │ │ ├── action-white.png │ │ │ ├── alert-black.png │ │ │ ├── alert-white.png │ │ │ ├── arrow-d-black.png │ │ │ ├── arrow-d-l-black.png │ │ │ ├── arrow-d-l-white.png │ │ │ ├── arrow-d-r-black.png │ │ │ ├── arrow-d-r-white.png │ │ │ ├── arrow-d-white.png │ │ │ ├── arrow-l-black.png │ │ │ ├── arrow-l-white.png │ │ │ ├── arrow-r-black.png │ │ │ ├── arrow-r-white.png │ │ │ ├── arrow-u-black.png │ │ │ ├── arrow-u-l-black.png │ │ │ ├── arrow-u-l-white.png │ │ │ ├── arrow-u-r-black.png │ │ │ ├── arrow-u-r-white.png │ │ │ ├── arrow-u-white.png │ │ │ ├── audio-black.png │ │ │ ├── audio-white.png │ │ │ ├── back-black.png │ │ │ ├── back-white.png │ │ │ ├── bars-black.png │ │ │ ├── bars-white.png │ │ │ ├── bullets-black.png │ │ │ ├── bullets-white.png │ │ │ ├── calendar-black.png │ │ │ ├── calendar-white.png │ │ │ ├── camera-black.png │ │ │ ├── camera-white.png │ │ │ ├── carat-d-black.png │ │ │ ├── carat-d-white.png │ │ │ ├── carat-l-black.png │ │ │ ├── carat-l-white.png │ │ │ ├── carat-r-black.png │ │ │ ├── carat-r-white.png │ │ │ ├── carat-u-black.png │ │ │ ├── carat-u-white.png │ │ │ ├── check-black.png │ │ │ ├── check-white.png │ │ │ ├── clock-black.png │ │ │ ├── clock-white.png │ │ │ ├── cloud-black.png │ │ │ ├── cloud-white.png │ │ │ ├── comment-black.png │ │ │ ├── comment-white.png │ │ │ ├── delete-black.png │ │ │ ├── delete-white.png │ │ │ ├── edit-black.png │ │ │ ├── edit-white.png │ │ │ ├── eye-black.png │ │ │ ├── eye-white.png │ │ │ ├── forbidden-black.png │ │ │ ├── forbidden-white.png │ │ │ ├── forward-black.png │ │ │ ├── forward-white.png │ │ │ ├── gear-black.png │ │ │ ├── gear-white.png │ │ │ ├── grid-black.png │ │ │ ├── grid-white.png │ │ │ ├── heart-black.png │ │ │ ├── heart-white.png │ │ │ ├── home-black.png │ │ │ ├── home-white.png │ │ │ ├── info-black.png │ │ │ ├── info-white.png │ │ │ ├── location-black.png │ │ │ ├── location-white.png │ │ │ ├── lock-black.png │ │ │ ├── lock-white.png │ │ │ ├── mail-black.png │ │ │ ├── mail-white.png │ │ │ ├── minus-black.png │ │ │ ├── minus-white.png │ │ │ ├── navigation-black.png │ │ │ ├── navigation-white.png │ │ │ ├── phone-black.png │ │ │ ├── phone-white.png │ │ │ ├── plus-black.png │ │ │ ├── plus-white.png │ │ │ ├── power-black.png │ │ │ ├── power-white.png │ │ │ ├── recycle-black.png │ │ │ ├── recycle-white.png │ │ │ ├── refresh-black.png │ │ │ ├── refresh-white.png │ │ │ ├── search-black.png │ │ │ ├── search-white.png │ │ │ ├── shop-black.png │ │ │ ├── shop-white.png │ │ │ ├── star-black.png │ │ │ ├── star-white.png │ │ │ ├── tag-black.png │ │ │ ├── tag-white.png │ │ │ ├── user-black.png │ │ │ ├── user-white.png │ │ │ ├── video-black.png │ │ │ └── video-white.png │ │ └── jquery.mobile.icons.min.css └── style.css ├── doc ├── experimenter.md ├── jsdoc_conf.json └── participant.md ├── docker-compose.yml ├── favicon.ico ├── index.html ├── lib ├── external │ ├── jquery.mobile │ │ ├── LICENSE.TXT │ │ ├── jquery.mobile-1.4.4.css │ │ ├── jquery.mobile-1.4.4.js │ │ ├── jquery.mobile-1.4.4.min.css │ │ ├── jquery.mobile-1.4.4.min.js │ │ ├── patches │ │ │ └── vertical-slider.js │ │ └── plugins │ │ │ ├── jQuery-Mobile-Icon-Pack │ │ │ ├── .gitignore │ │ │ ├── LICENSE-GPL │ │ │ ├── LICENSE-MIT │ │ │ ├── font-awesome │ │ │ │ ├── README.md │ │ │ │ ├── faicons-v2.png │ │ │ │ ├── faicons.png │ │ │ │ ├── font │ │ │ │ │ ├── FontAwesome.otf │ │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ │ └── fontawesome-webfont.woff │ │ │ │ ├── images │ │ │ │ │ ├── ajax-loader.png │ │ │ │ │ ├── icons-18-black-pack.png │ │ │ │ │ ├── icons-18-white-pack.png │ │ │ │ │ ├── icons-36-black-pack.png │ │ │ │ │ └── icons-36-white-pack.png │ │ │ │ ├── index.html │ │ │ │ ├── jqm-icon-pack-3.0.0-fa.css │ │ │ │ └── jqm-icon-pack-3.0.0-fa.scss │ │ │ ├── index.html │ │ │ ├── original │ │ │ │ ├── assets │ │ │ │ │ ├── icons-18-pack.psd │ │ │ │ │ └── icons-36-pack.psd │ │ │ │ ├── images │ │ │ │ │ ├── ajax-loader.gif │ │ │ │ │ ├── ajax-loader.png │ │ │ │ │ ├── icons-18-black-pack.png │ │ │ │ │ ├── icons-18-white-pack.png │ │ │ │ │ ├── icons-36-black-pack.png │ │ │ │ │ └── icons-36-white-pack.png │ │ │ │ ├── index.html │ │ │ │ └── jqm-icon-pack-2.0-original.css │ │ │ └── readme.md │ │ │ └── jQuery-Mobile-Progress-Bar-with-Percentage │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── VERSION │ │ │ ├── examples │ │ │ ├── example_1.html │ │ │ ├── example_2.html │ │ │ ├── example_3.html │ │ │ ├── example_4.html │ │ │ ├── example_5.html │ │ │ ├── example_6.html │ │ │ └── example_7.html │ │ │ └── src │ │ │ ├── css │ │ │ ├── tolito-1.0.1.css │ │ │ └── tolito-1.0.1.min.css │ │ │ └── js │ │ │ ├── tolito-1.0.1.js │ │ │ └── tolito-1.0.1.min.js │ ├── jquery │ │ ├── LICENSE.txt │ │ └── jquery-2.1.1.min.js │ ├── mousetrap │ │ ├── LICENSE.txt │ │ └── mousetrap.min.js │ ├── three.js │ │ ├── LICENSE.txt │ │ ├── loaders │ │ │ └── ColladaLoader.js │ │ ├── three-tube │ │ │ └── threejs-tube.js │ │ ├── three.js │ │ └── three.min.js │ ├── uuidv4 │ │ ├── LICENSE.txt │ │ └── uuidv4.min.js │ ├── wmSlider │ │ ├── LICENSE.txt │ │ ├── slider.min.css │ │ ├── slider.min.js │ │ └── slider.pips.css │ └── yaml │ │ ├── LICENSE.txt │ │ └── yaml.min.js └── webmushra │ ├── audio │ ├── AudioFileLoader.js │ ├── GenericAudioControl.js │ └── MushraAudioControl.js │ ├── business │ ├── DataSender.js │ ├── ErrorHandler.js │ ├── PageManager.js │ └── PageTemplateRenderer.js │ ├── control │ ├── BS1116AudioControlInputController.js │ ├── FilePlayerController.js │ ├── InputController.js │ └── MushraAudioControlInputController.js │ ├── datamodel │ ├── BS1116Rating.js │ ├── LikertMultiStimulusRating.js │ ├── LikertResponse.js │ ├── LikertSingleStimulusRating.js │ ├── MUSHRARating.js │ ├── PairedComparisonChoice.js │ ├── Participant.js │ ├── Session.js │ ├── SpatialASWRating.js │ ├── SpatialHWDRating.js │ ├── SpatialLEVRating.js │ ├── SpatialLocalizationRating.js │ ├── Stimulus.js │ └── Trial.js │ ├── misc │ ├── FilePlayer.js │ ├── LikertScale.js │ ├── Localizer.js │ ├── MushraValidator.js │ ├── Shuffle.js │ └── WaveformVisualizer.js │ ├── nls │ └── nls.js │ ├── pages │ ├── BS1116Page.js │ ├── BS1116PageManager.js │ ├── ConsentPage.js │ ├── FinishPage.js │ ├── GenericPage.js │ ├── LikertMultiStimulusPage.js │ ├── LikertSingleStimulusPage.js │ ├── LikertSingleStimulusPageManager.js │ ├── MushraPage.js │ ├── Page.js │ ├── PairedComparisonPage.js │ ├── PairedComparisonPageManager.js │ ├── SpatialPage.js │ └── VolumePage.js │ └── spatial │ ├── Camera.js │ ├── Scene.js │ └── objects │ ├── ASWObject.js │ ├── LEVObject.js │ ├── LocalizationObject.js │ └── SpatialObject.js ├── package-lock.json ├── package.json ├── res └── spatial │ ├── carpet.png │ ├── ceiling.png │ ├── listener_head.dae │ └── wall.png ├── results └── results_will_be_added_here.txt ├── service └── write.php ├── startup.js └── tests ├── test_yaml.html └── tests └── sampleTests.js /.gitignore: -------------------------------------------------------------------------------- 1 | doc/jsdoc 2 | *.log 3 | .project 4 | dist 5 | builds/ 6 | results/* 7 | !results/results_will_be_added_here.txt 8 | 9 | #####=== Node ===##### 10 | 11 | # Logs 12 | logs 13 | *.log 14 | 15 | # Runtime data 16 | pids 17 | *.pid 18 | *.seed 19 | 20 | # Directory for instrumented libs generated by jscoverage/JSCover 21 | lib-cov 22 | 23 | # Coverage directory used by tools like istanbul 24 | coverage 25 | 26 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 27 | .grunt 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directory 36 | # https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git 37 | node_modules 38 | 39 | #####=== OSX ===##### 40 | .DS_Store 41 | .AppleDouble 42 | .LSOverride 43 | 44 | # Icon must end with two \r 45 | Icon 46 | 47 | # Thumbnails 48 | ._* 49 | 50 | # Files that might appear in the root of a volume 51 | .DocumentRevisions-V100 52 | .fseventsd 53 | .Spotlight-V100 54 | .TemporaryItems 55 | .Trashes 56 | .VolumeIcon.icns 57 | 58 | # Directories potentially created on remote AFP share 59 | .AppleDB 60 | .AppleDesktop 61 | Network Trash Folder 62 | Temporary Items 63 | .apdisk 64 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | 3 | services: 4 | - xvfb 5 | 6 | node_js: 7 | - stable 8 | 9 | before_install: 10 | - npm install -g grunt-cli 11 | 12 | install: 13 | - npm install 14 | 15 | script: 16 | - grunt package 17 | -------------------------------------------------------------------------------- /AUTHORS.md: -------------------------------------------------------------------------------- 1 | Contributors 2 | ============ 3 | 4 | * Michael Schoeffler 5 | * Sarah Bartoschek 6 | * Marlene Röß 7 | * Fabian-Robert Stöter 8 | * Susanne Westphal 9 | * Maximilian Neumayer 10 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:7.0-apache 2 | COPY ./ /var/www/html/ 3 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Software License for the webMUSHRA.js Software 2 | 3 | Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V., 2017 4 | 5 | 1. INTRODUCTION 6 | 7 | The webMUSHRA.js Software Tools ("webMUSHRA Software") are 8 | web-based software tools to conduct Listening Tests. Patent licenses may be 9 | required for using the webMUSHRA Software and it is in your responsibility to 10 | obtain those if necessary. 11 | 12 | 2. COPYRIGHT LICENSE 13 | 14 | Redistribution and use in source and binary forms, with or without modification, 15 | are permitted without payment of copyright license fees provided that you 16 | satisfy the following conditions: 17 | 18 | You must retain the complete text of this software license in 19 | redistributions of the webMUSHRA Software or your modifications thereto in 20 | source code form. 21 | 22 | You must retain the complete text of this software license in 23 | the documentation and/or other materials provided with redistributions of the 24 | webMUSHRA Software or your modifications thereto in binary form. 25 | 26 | You must make available free of charge copies of the complete source code of 27 | the webMUSHRA Software and your modifications thereto to recipients of copies in 28 | binary form. The name of Fraunhofer may not be used to endorse or promote products 29 | derived from this library without prior written permission. 30 | 31 | You may not charge copyright license fees for anyone to use, copy, or distribute 32 | the webMUSHRA Software or your modifications thereto. 33 | 34 | Your modified versions of the webMUSHRA Software must carry prominent notices 35 | stating that you changed the software and the date of any change. For modified 36 | versions of the webMUSHRA Software, the term "webMUSHRA Software" must be replaced 37 | by the term "Third-Party Modified Version of the webMUSHRA Software". 38 | 39 | Fraunhofer distributes the webMUSHRA Software together with some Open Source 40 | software. These Open Source software components are defined in a document named 41 | "THIRD-PARTY-NOTICES.txt" accompanying this text file. The Open Source software 42 | components are not subject matter of this Agreement. Each Open Source software 43 | component is copyrighted by a third party, namely the copyright holder/s 44 | indicated in the copyright notices in the corresponding source files or other 45 | materials accompanying the respective Open Source software. Each Open Source 46 | software component is licensable under its own applicable license conditions. 47 | You must review the licenses under which the respective Open Source software is 48 | licensed, in order to understand Your rights and obligations under them. In no 49 | event You will obtain under this Software License any rights of use from 50 | Fraunhofer to use the Open Source software. 51 | 52 | 3. NO PATENT LICENSE 53 | 54 | NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation 55 | the patents of Fraunhofer, ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer 56 | provides no warranty of patent non-infringement with respect to this software. 57 | You may use this webMUSHRA Software or modifications thereto only for purposes 58 | that are authorized by appropriate patent licenses. 59 | 60 | 4. DISCLAIMER 61 | 62 | This webMUSHRA Software is provided by Fraunhofer on behalf of the copyright holders 63 | and contributors "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, 64 | including but not limited to the implied warranties of merchantability and 65 | fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 66 | CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, 67 | or consequential damages, including but not limited to procurement of substitute 68 | goods or services; loss of use, data, or profits, or business interruption, 69 | however caused and on any theory of liability, whether in contract, strict 70 | liability, or tort (including negligence), arising in any way out of the use of 71 | this software, even if advised of the possibility of such damage. 72 | 73 | 5. CONTACT INFORMATION 74 | 75 | Fraunhofer Institute for Integrated Circuits IIS 76 | Attention: Audio and Multimedia Departments – webMUSHRA Software 77 | Am Wolfsmantel 33 78 | 91058 Erlangen, Germany 79 | 80 | http://www.audiolabs-erlangen.de/fraunhofer 81 | info@audiolabs-erlangen.de 82 | -------------------------------------------------------------------------------- /configs/ABX_noloop.yaml: -------------------------------------------------------------------------------- 1 | # test config AB test, waveform, 3 conditions, no looping 2 | 3 | 4 | testname: ABX without looping 5 | testId: abx_noloop 6 | bufferSize: 2048 7 | stopOnErrors: true 8 | showButtonPreviousPage: true 9 | remoteService: service/write.php 10 | 11 | 12 | pages: 13 | 14 | - type: paired_comparison 15 | id: trialAB2 16 | name: Mono Trial AB 17 | unforced: I don't know 18 | content: test description AB 19 | showWaveform: true 20 | enableLooping: false 21 | reference: configs/resources/audio/mono_ref.wav 22 | stimuli: 23 | C1: configs/resources/audio/mono_c1.wav 24 | C2: configs/resources/audio/mono_c2.wav 25 | C3: configs/resources/audio/mono_c3.wav 26 | 27 | 28 | - type: finish 29 | name: Thank you 30 | content: Thank you for attending 31 | showResults: true 32 | writeResults: true 33 | -------------------------------------------------------------------------------- /configs/ABX_noloop_nowav.yaml: -------------------------------------------------------------------------------- 1 | # test config AB test, no waveform, 3 conditions, no looping 2 | 3 | 4 | testname: ABX without looping and waveform 5 | testId: abx_noloop_nowav 6 | bufferSize: 2048 7 | stopOnErrors: true 8 | showButtonPreviousPage: true 9 | remoteService: service/write.php 10 | 11 | 12 | pages: 13 | 14 | - type: paired_comparison 15 | id: trialAB2 16 | name: Mono Trial AB 17 | unforced: I don't know 18 | content: test description AB 19 | showWaveform: false 20 | enableLooping: false 21 | reference: configs/resources/audio/mono_ref.wav 22 | stimuli: 23 | C1: configs/resources/audio/mono_c1.wav 24 | C2: configs/resources/audio/mono_c2.wav 25 | C3: configs/resources/audio/mono_c3.wav 26 | 27 | 28 | - type: finish 29 | name: Thank you 30 | content: Thank you for attending 31 | showResults: true 32 | writeResults: true 33 | -------------------------------------------------------------------------------- /configs/ABX_nowav.yaml: -------------------------------------------------------------------------------- 1 | # test config AB test, no waveform, 3 conditions, looping 2 | 3 | 4 | testname: ABX without waveform 5 | testId: abx_nowav 6 | bufferSize: 2048 7 | stopOnErrors: true 8 | showButtonPreviousPage: true 9 | remoteService: service/write.php 10 | 11 | 12 | pages: 13 | 14 | - type: paired_comparison 15 | id: trialAB2 16 | name: Mono Trial AB 17 | unforced: I don't know 18 | content: test description AB 19 | showWaveform: false 20 | enableLooping: true 21 | reference: configs/resources/audio/mono_ref.wav 22 | stimuli: 23 | C1: configs/resources/audio/mono_c1.wav 24 | C2: configs/resources/audio/mono_c2.wav 25 | C3: configs/resources/audio/mono_c3.wav 26 | 27 | 28 | - type: finish 29 | name: Thank you 30 | content: Thank you for attending 31 | showResults: true 32 | writeResults: true 33 | -------------------------------------------------------------------------------- /configs/AB_noloop.yaml: -------------------------------------------------------------------------------- 1 | # test config AB test, waveform, 11 conditions, no looping 2 | 3 | 4 | testname: AB without looping 5 | testId: ab_noloop 6 | bufferSize: 2048 7 | stopOnErrors: true 8 | showButtonPreviousPage: true 9 | remoteService: service/write.php 10 | 11 | 12 | pages: 13 | 14 | - type: paired_comparison 15 | id: trialAB2 16 | name: Mono Trial AB 17 | unforced: 18 | content: test description AB 19 | showWaveform: true 20 | enableLooping: false 21 | reference: configs/resources/audio/mono_ref.wav 22 | stimuli: 23 | C1: configs/resources/audio/mono_c1.wav 24 | C2: configs/resources/audio/mono_c2.wav 25 | C3: configs/resources/audio/mono_c3.wav 26 | C4: configs/resources/audio/mono_c1.wav 27 | C5: configs/resources/audio/mono_c2.wav 28 | C6: configs/resources/audio/mono_c3.wav 29 | C7: configs/resources/audio/mono_c1.wav 30 | C8: configs/resources/audio/mono_c2.wav 31 | C9: configs/resources/audio/mono_c3.wav 32 | C10: configs/resources/audio/mono_c1.wav 33 | C11: configs/resources/audio/mono_c2.wav 34 | 35 | 36 | - type: finish 37 | name: Thank you 38 | content: Thank you for attending 39 | showResults: true 40 | writeResults: true 41 | -------------------------------------------------------------------------------- /configs/AB_noloop_nowav.yaml: -------------------------------------------------------------------------------- 1 | # test config AB test, no waveform, 3 conditions, no looping 2 | 3 | 4 | testname: AB without looping and waveform 5 | testId: ab_noloop_nowav 6 | bufferSize: 2048 7 | stopOnErrors: true 8 | showButtonPreviousPage: true 9 | remoteService: service/write.php 10 | 11 | 12 | pages: 13 | 14 | - type: paired_comparison 15 | id: trialAB2 16 | name: Mono Trial AB 17 | unforced: 18 | content: test description AB 19 | showWaveform: false 20 | enableLooping: false 21 | reference: configs/resources/audio/mono_ref.wav 22 | stimuli: 23 | C1: configs/resources/audio/mono_c1.wav 24 | C2: configs/resources/audio/mono_c2.wav 25 | C3: configs/resources/audio/mono_c3.wav 26 | 27 | 28 | - type: finish 29 | name: Thank you 30 | content: Thank you for attending 31 | showResults: true 32 | writeResults: true 33 | -------------------------------------------------------------------------------- /configs/AB_nowav.yaml: -------------------------------------------------------------------------------- 1 | # test config AB test, no waveform, 3 conditions, looping 2 | 3 | 4 | testname: AB without waveform 5 | testId: ab_nowav 6 | bufferSize: 2048 7 | stopOnErrors: true 8 | showButtonPreviousPage: true 9 | remoteService: service/write.php 10 | 11 | 12 | pages: 13 | 14 | - type: paired_comparison 15 | id: trialAB2 16 | name: Mono Trial AB 17 | unforced: 18 | content: test description AB 19 | showWaveform: false 20 | enableLooping: true 21 | reference: configs/resources/audio/mono_ref.wav 22 | stimuli: 23 | C1: configs/resources/audio/mono_c1.wav 24 | C2: configs/resources/audio/mono_c2.wav 25 | C3: configs/resources/audio/mono_c3.wav 26 | 27 | 28 | - type: finish 29 | name: Thank you 30 | content: Thank you for attending 31 | showResults: true 32 | writeResults: true 33 | -------------------------------------------------------------------------------- /configs/LMS_2scale.yaml: -------------------------------------------------------------------------------- 1 | # Likert multi stimulus page 1 stimuli, 4 responses 2 | 3 | 4 | testname: Likert Multi Stimulus with two responses 5 | testId: lms_2scale 6 | bufferSize: 2048 7 | stopOnErrors: true 8 | showButtonPreviousPage: true 9 | remoteService: service/write.php 10 | 11 | 12 | 13 | pages: 14 | 15 | - type: likert_multi_stimulus 16 | id: lms1 17 | name: likert 18 | content: test description 19 | stimuli: 20 | C1: configs/resources/audio/mono_c1.wav 21 | C2: configs/resources/audio/mono_c2.wav 22 | C3: configs/resources/audio/mono_c3.wav 23 | response: 24 | - value: not at all 25 | label: Not at all 26 | img: configs/resources/images/star_off.png 27 | imgSelected: configs/resources/images/star_on.png 28 | imgHigherResponseSelected: configs/resources/images/star_on.png 29 | - value: not a lot 30 | label: Not a lot 31 | img: configs/resources/images/star_off.png 32 | imgSelected: configs/resources/images/star_on.png 33 | imgHigherResponseSelected: configs/resources/images/star_on.png 34 | 35 | 36 | - type: finish 37 | name: Thank you 38 | content: Thank you for attending 39 | showResults: true 40 | writeResults: true 41 | -------------------------------------------------------------------------------- /configs/LMS_4scale.yaml: -------------------------------------------------------------------------------- 1 | # Likert multi stimulus page 1 stimuli, 4 responses 2 | 3 | 4 | testname: Likert Multi Stimulus with four responses 5 | testId: lms_4scale 6 | bufferSize: 2048 7 | stopOnErrors: true 8 | showButtonPreviousPage: true 9 | remoteService: service/write.php 10 | 11 | 12 | 13 | pages: 14 | 15 | - type: likert_multi_stimulus 16 | id: lms2 17 | name: likert 18 | content: test description 19 | stimuli: 20 | C1: configs/resources/audio/mono_c1.wav 21 | C2: configs/resources/audio/mono_c2.wav 22 | C3: configs/resources/audio/mono_c3.wav 23 | response: 24 | - value: not at all 25 | label: Not at all 26 | img: configs/resources/images/star_off.png 27 | imgSelected: configs/resources/images/star_on.png 28 | imgHigherResponseSelected: configs/resources/images/star_on.png 29 | - value: not a lot 30 | label: Not a lot 31 | img: configs/resources/images/star_off.png 32 | imgSelected: configs/resources/images/star_on.png 33 | imgHigherResponseSelected: configs/resources/images/star_on.png 34 | - value: a bit 35 | label: A bit 36 | img: configs/resources/images/star_off.png 37 | imgSelected: configs/resources/images/star_on.png 38 | imgHigherResponseSelected: configs/resources/images/star_on.png 39 | - value: much 40 | label: Much 41 | img: configs/resources/images/star_off.png 42 | imgSelected: configs/resources/images/star_on.png 43 | imgHigherResponseSelected: configs/resources/images/star_on.png 44 | 45 | 46 | - type: finish 47 | name: Thank you 48 | content: Thank you for attending 49 | showResults: true 50 | writeResults: true 51 | -------------------------------------------------------------------------------- /configs/LSS_2scale.yaml: -------------------------------------------------------------------------------- 1 | # Likert single stimulus page 3 stimuli, 2 responses 2 | 3 | 4 | testname: Likert Single Simulus with two responses 5 | testId: lss_2scale 6 | bufferSize: 2048 7 | stopOnErrors: true 8 | showButtonPreviousPage: true 9 | remoteService: service/write.php 10 | 11 | 12 | 13 | pages: 14 | 15 | - type: likert_single_stimulus 16 | id: lss1 17 | name: likert 18 | content: test description 19 | stimuli: 20 | C1: configs/resources/audio/mono_c1.wav 21 | C2: configs/resources/audio/mono_c2.wav 22 | C3: configs/resources/audio/mono_c3.wav 23 | response: 24 | - value: not at all 25 | label: Not at all 26 | img: configs/resources/images/star_off.png 27 | imgSelected: configs/resources/images/star_on.png 28 | imgHigherResponseSelected: configs/resources/images/star_on.png 29 | - value: not a lot 30 | label: Not a lot 31 | img: configs/resources/images/star_off.png 32 | imgSelected: configs/resources/images/star_on.png 33 | imgHigherResponseSelected: configs/resources/images/star_on.png 34 | 35 | 36 | - type: finish 37 | name: Thank you 38 | content: Thank you for attending 39 | showResults: true 40 | writeResults: true 41 | -------------------------------------------------------------------------------- /configs/LSS_4scale.yaml: -------------------------------------------------------------------------------- 1 | # Likert single stimulus page 1 stimuli, 4 responses 2 | 3 | 4 | testname: Likert Single Stimulus with four responses 5 | testId: lss_4scale 6 | bufferSize: 2048 7 | stopOnErrors: true 8 | showButtonPreviousPage: true 9 | remoteService: service/write.php 10 | 11 | 12 | 13 | pages: 14 | 15 | - type: likert_single_stimulus 16 | id: lss2 17 | name: likert 18 | content: test description 19 | stimuli: 20 | C1: configs/resources/audio/mono_c1.wav 21 | response: 22 | - value: not at all 23 | label: Not at all 24 | img: configs/resources/images/star_off.png 25 | imgSelected: configs/resources/images/star_on.png 26 | imgHigherResponseSelected: configs/resources/images/star_on.png 27 | - value: not a lot 28 | label: Not a lot 29 | img: configs/resources/images/star_off.png 30 | imgSelected: configs/resources/images/star_on.png 31 | imgHigherResponseSelected: configs/resources/images/star_on.png 32 | - value: a bit 33 | label: A bit 34 | img: configs/resources/images/star_off.png 35 | imgSelected: configs/resources/images/star_on.png 36 | imgHigherResponseSelected: configs/resources/images/star_on.png 37 | - value: much 38 | label: Much 39 | img: configs/resources/images/star_off.png 40 | imgSelected: configs/resources/images/star_on.png 41 | imgHigherResponseSelected: configs/resources/images/star_on.png 42 | 43 | 44 | - type: finish 45 | name: Thank you 46 | content: Thank you for attending 47 | showResults: true 48 | writeResults: true 49 | -------------------------------------------------------------------------------- /configs/LSS_multiscale.yaml: -------------------------------------------------------------------------------- 1 | # Likert single stimulus page 1 stimulus, two Likert scales with respecitvely 4 and 2 responses 2 | 3 | 4 | testname: Single Stimulus with multiple Likert scales 5 | testId: lss_multiscale 6 | bufferSize: 2048 7 | stopOnErrors: true 8 | showButtonPreviousPage: true 9 | remoteService: service/write.php 10 | 11 | 12 | 13 | pages: 14 | 15 | - type: likert_single_stimulus 16 | id: lss3 17 | name: likert 18 | content: Two out of three stimuli will be randomly selected. In order to select the first two, set randomize to false in the config file. 19 | showWaveform: true 20 | mustPlayback: ended 21 | mustRate: true 22 | randomize: true 23 | maxStimuli: 2 24 | stimuli: 25 | C1: configs/resources/audio/mono_c1.wav 26 | C2: configs/resources/audio/mono_c2.wav 27 | C3: configs/resources/audio/mono_c3.wav 28 | response: 29 | - 30 | - value: not at all 31 | label: Not at all 32 | img: configs/resources/images/star_off.png 33 | imgSelected: configs/resources/images/star_on.png 34 | imgHigherResponseSelected: configs/resources/images/star_on.png 35 | - value: not a lot 36 | label: Not a lot 37 | img: configs/resources/images/star_off.png 38 | imgSelected: configs/resources/images/star_on.png 39 | imgHigherResponseSelected: configs/resources/images/star_on.png 40 | - value: a bit 41 | label: A bit 42 | img: configs/resources/images/star_off.png 43 | imgSelected: configs/resources/images/star_on.png 44 | imgHigherResponseSelected: configs/resources/images/star_on.png 45 | - value: much 46 | label: Much 47 | img: configs/resources/images/star_off.png 48 | imgSelected: configs/resources/images/star_on.png 49 | imgHigherResponseSelected: configs/resources/images/star_on.png 50 | - 51 | - value: not at all 52 | label: Not at all 53 | img: configs/resources/images/star_off.png 54 | imgSelected: configs/resources/images/star_on.png 55 | imgHigherResponseSelected: configs/resources/images/star_on.png 56 | - value: not a lot 57 | label: Not a lot 58 | img: configs/resources/images/star_off.png 59 | imgSelected: configs/resources/images/star_on.png 60 | imgHigherResponseSelected: configs/resources/images/star_on.png 61 | 62 | 63 | 64 | - type: finish 65 | name: Thank you 66 | content: Thank you for attending 67 | showResults: true 68 | writeResults: true 69 | -------------------------------------------------------------------------------- /configs/bs1116_noloop.yaml: -------------------------------------------------------------------------------- 1 | # test config bs11.16 page, waveform, 11 conditions, no looping 2 | 3 | 4 | testname: BS.1116 without looping 5 | testId: bs1116_noloop 6 | bufferSize: 2048 7 | stopOnErrors: true 8 | showButtonPreviousPage: true 9 | remoteService: service/write.php 10 | 11 | 12 | pages: 13 | 14 | - type: bs1116 15 | id: trial2 16 | name: Mono Trial 17 | content: test description 18 | showWaveform: true 19 | enableLooping: false 20 | reference: configs/resources/audio/mono_ref.wav 21 | createAnchor35: false 22 | createAnchor70: false 23 | stimuli: 24 | C1: configs/resources/audio/mono_c1.wav 25 | C2: configs/resources/audio/mono_c2.wav 26 | C3: configs/resources/audio/mono_c3.wav 27 | C4: configs/resources/audio/mono_c1.wav 28 | C5: configs/resources/audio/mono_c2.wav 29 | C6: configs/resources/audio/mono_c3.wav 30 | C7: configs/resources/audio/mono_c1.wav 31 | C8: configs/resources/audio/mono_c2.wav 32 | C9: configs/resources/audio/mono_c3.wav 33 | C10: configs/resources/audio/mono_c1.wav 34 | C11: configs/resources/audio/mono_c2.wav 35 | 36 | 37 | - type: finish 38 | name: Thank you 39 | content: Thank you for attending 40 | showResults: true 41 | writeResults: true 42 | -------------------------------------------------------------------------------- /configs/bs1116_noloop_nowav.yaml: -------------------------------------------------------------------------------- 1 | # test config bs11.16 page, no waveform, 3 conditions, no looping 2 | 3 | 4 | testname: BS.1116 without looping and waveform 5 | testId: bs1116_noloop_nowav 6 | bufferSize: 2048 7 | stopOnErrors: true 8 | showButtonPreviousPage: true 9 | remoteService: service/write.php 10 | 11 | 12 | pages: 13 | 14 | - type: bs1116 15 | id: trial2 16 | name: Mono Trial 17 | content: test description 18 | showWaveform: false 19 | enableLooping: false 20 | reference: configs/resources/audio/mono_ref.wav 21 | createAnchor35: false 22 | createAnchor70: false 23 | stimuli: 24 | C1: configs/resources/audio/mono_c1.wav 25 | C2: configs/resources/audio/mono_c2.wav 26 | C3: configs/resources/audio/mono_c3.wav 27 | 28 | 29 | - type: finish 30 | name: Thank you 31 | content: Thank you for attending 32 | showResults: true 33 | writeResults: true 34 | -------------------------------------------------------------------------------- /configs/bs1116_nowav.yaml: -------------------------------------------------------------------------------- 1 | # test config bs11.16 page, no waveform, 3 conditions, looping 2 | 3 | 4 | testname: BS.1116 without waveform 5 | testId: bs1116_nowav 6 | bufferSize: 2048 7 | stopOnErrors: true 8 | showButtonPreviousPage: true 9 | remoteService: service/write.php 10 | 11 | 12 | pages: 13 | 14 | - type: bs1116 15 | id: trial2 16 | name: Mono Trial 17 | content: test description 18 | showWaveform: false 19 | enableLooping: true 20 | reference: configs/resources/audio/mono_ref.wav 21 | createAnchor35: false 22 | createAnchor70: false 23 | stimuli: 24 | C1: configs/resources/audio/mono_c1.wav 25 | C2: configs/resources/audio/mono_c2.wav 26 | C3: configs/resources/audio/mono_c3.wav 27 | 28 | - type: finish 29 | name: Thank you 30 | content: Thank you for attending 31 | showResults: true 32 | writeResults: true 33 | -------------------------------------------------------------------------------- /configs/consent.yaml: -------------------------------------------------------------------------------- 1 | testname: webMUSHRA Example 2 | testId: default_example 3 | bufferSize: 2048 4 | stopOnErrors: true 5 | showButtonPreviousPage: true 6 | remoteService: service/write.php 7 | 8 | 9 | pages: 10 | - type: generic 11 | id: first_page 12 | name: Welcome 13 | content: Welcome to webMUSHRA! 14 | - type: consent 15 | id: consent_page 16 | name: Consent 17 | mustConsent: true 18 | content:

You are participating in a listening test. For this, we want to store the answers you give to the following questions.
Do you give consent for this?

19 | - type: mushra 20 | id: trial1 21 | name: MUSHRA 22 | content: This training shows how to use our user interface. Please perform the underlined instructions to proceed with the training session. Reminder: In a MUSHRA listening test you are asked to rate the Basic Audio Quality (BAQ) of each condition.
Basic Audio Quality is a single and global attribute that is used to judge any and all detected differences between the reference and the condition. 23 | showWaveform: true 24 | enableLooping: true 25 | reference: configs/resources/audio/mono_ref.wav 26 | createAnchor35: true 27 | createAnchor70: true 28 | stimuli: 29 | C1: configs/resources/audio/mono_c1.wav 30 | C2: configs/resources/audio/mono_c2.wav 31 | C3: configs/resources/audio/mono_c3.wav 32 | - 33 | - random 34 | - type: mushra 35 | id: trial_random_1 36 | name: MUSHRA - Random 2 37 | content: Due to randomization, this page will be either the second MUSHRA page or the third MUSHRA page. 38 | enableLooping: true 39 | reference: configs/resources/audio/mono_ref.wav 40 | createAnchor35: false 41 | createAnchor70: false 42 | stimuli: 43 | C1: configs/resources/audio/mono_c1.wav 44 | C2: configs/resources/audio/mono_c2.wav 45 | C3: configs/resources/audio/mono_c3.wav 46 | - type: mushra 47 | id: trial_random_2 48 | name: MUSHRA - Random 1 49 | content: Due to randomization, this page will be either the second MUSHRA page or the third MUSHRA page. 50 | enableLooping: true 51 | reference: configs/resources/audio/mono_ref.wav 52 | createAnchor35: false 53 | createAnchor70: false 54 | stimuli: 55 | C1: configs/resources/audio/mono_c1.wav 56 | C2: configs/resources/audio/mono_c2.wav 57 | C3: configs/resources/audio/mono_c3.wav 58 | - type: finish 59 | name: Thank you 60 | content: Thank you for attending! 61 | showResults: true 62 | writeResults: true 63 | questionnaire: 64 | - type: text 65 | label: eMail 66 | name: email 67 | - type: number 68 | label: Age 69 | name: age 70 | min: 0 71 | max: 100 72 | default: 30 73 | - type: likert 74 | name: gender 75 | label: Gender 76 | response: 77 | - value: female 78 | label: Female 79 | - value: male 80 | label: Male 81 | - value: other 82 | label: Other 83 | -------------------------------------------------------------------------------- /configs/default.yaml: -------------------------------------------------------------------------------- 1 | testname: webMUSHRA Example 2 | testId: default_example 3 | bufferSize: 2048 4 | stopOnErrors: true 5 | showButtonPreviousPage: true 6 | remoteService: service/write.php 7 | 8 | 9 | pages: 10 | - type: generic 11 | id: first_page 12 | name: Welcome 13 | content: Welcome to webMUSHRA! 14 | - type: mushra 15 | id: trial1 16 | name: MUSHRA 17 | content: This training shows how to use our user interface. Please perform the underlined instructions to proceed with the training session. Reminder: In a MUSHRA listening test you are asked to rate the Basic Audio Quality (BAQ) of each condition.
Basic Audio Quality is a single and global attribute that is used to judge any and all detected differences between the reference and the condition. 18 | showWaveform: true 19 | enableLooping: true 20 | reference: configs/resources/audio/mono_ref.wav 21 | createAnchor35: true 22 | createAnchor70: true 23 | stimuli: 24 | C1: configs/resources/audio/mono_c1.wav 25 | C2: configs/resources/audio/mono_c2.wav 26 | C3: configs/resources/audio/mono_c3.wav 27 | - 28 | - random 29 | - type: mushra 30 | id: trial_random_1 31 | name: MUSHRA - Random 2 32 | content: Due to randomization, this page will be either the second MUSHRA page or the third MUSHRA page. 33 | enableLooping: true 34 | reference: configs/resources/audio/mono_ref.wav 35 | createAnchor35: false 36 | createAnchor70: false 37 | stimuli: 38 | C1: configs/resources/audio/mono_c1.wav 39 | C2: configs/resources/audio/mono_c2.wav 40 | C3: configs/resources/audio/mono_c3.wav 41 | - type: mushra 42 | id: trial_random_2 43 | name: MUSHRA - Random 1 44 | content: Due to randomization, this page will be either the second MUSHRA page or the third MUSHRA page. 45 | enableLooping: true 46 | reference: configs/resources/audio/mono_ref.wav 47 | createAnchor35: false 48 | createAnchor70: false 49 | stimuli: 50 | C1: configs/resources/audio/mono_c1.wav 51 | C2: configs/resources/audio/mono_c2.wav 52 | C3: configs/resources/audio/mono_c3.wav 53 | - type: finish 54 | name: Thank you 55 | content: Thank you for attending! 56 | showResults: true 57 | writeResults: true 58 | questionnaire: 59 | - type: text 60 | label: eMail 61 | name: email 62 | - type: number 63 | label: Age 64 | name: age 65 | min: 0 66 | max: 100 67 | default: 30 68 | - type: likert 69 | name: gender 70 | label: Gender 71 | response: 72 | - value: female 73 | label: Female 74 | - value: male 75 | label: Male 76 | - value: other 77 | label: Other 78 | -------------------------------------------------------------------------------- /configs/lss_lms.yaml: -------------------------------------------------------------------------------- 1 | testname: LMS and LSS test 2 | testId: lss_lms 3 | bufferSize: 2048 4 | stopOnErrors: true 5 | showButtonPreviousPage: true 6 | remoteService: service/write.php 7 | 8 | 9 | 10 | pages: 11 | - type: generic 12 | id: LSS_LMS 13 | name: LMS and LSS test 14 | content: 15 | 16 | 17 | 18 | - type: volume 19 | id: vol 20 | name: Volume settings 21 | content: Please adjust the volume! 22 | stimulus: configs/resources/audio/mono_c1.wav 23 | defaultVolume: 0.5 24 | 25 | 26 | 27 | - type: likert_multi_stimulus 28 | id: lms2 29 | name: Multi Stimulus Likert Scale 30 | content: Rate the items! 31 | stimuli: 32 | ref: configs/resources/audio/mono_ref.wav 33 | C1: configs/resources/audio/mono_c1.wav 34 | C2: configs/resources/audio/mono_c2.wav 35 | C3: configs/resources/audio/mono_c3.wav 36 | 37 | response: 38 | - value: not at all 39 | label: Not at all 40 | img: configs/resources/images/star_off.png 41 | imgSelected: configs/resources/images/star_on.png 42 | imgHigherResponseSelected: configs/resources/images/star_on.png 43 | - value: not a lot 44 | label: Not a lot 45 | img: configs/resources/images/star_off.png 46 | imgSelected: configs/resources/images/star_on.png 47 | imgHigherResponseSelected: configs/resources/images/star_on.png 48 | - value: a bit 49 | label: A bit 50 | img: configs/resources/images/star_off.png 51 | imgSelected: configs/resources/images/star_on.png 52 | imgHigherResponseSelected: configs/resources/images/star_on.png 53 | - value: much 54 | label: Much 55 | img: configs/resources/images/star_off.png 56 | imgSelected: configs/resources/images/star_on.png 57 | imgHigherResponseSelected: configs/resources/images/star_on.png 58 | 59 | 60 | - type: likert_single_stimulus 61 | id: lss2 62 | name: Single Stimulus Likert Scale 63 | content: Rate the item! 64 | stimuli: 65 | ref: configs/resources/audio/mono_ref.wav 66 | C1: configs/resources/audio/mono_c1.wav 67 | C2: configs/resources/audio/mono_c2.wav 68 | C3: configs/resources/audio/mono_c3.wav 69 | response: 70 | - value: not at all 71 | label: Not at all 72 | img: configs/resources/images/star_off.png 73 | imgSelected: configs/resources/images/star_on.png 74 | imgHigherResponseSelected: configs/resources/images/star_on.png 75 | - value: not a lot 76 | label: Not a lot 77 | img: configs/resources/images/star_off.png 78 | imgSelected: configs/resources/images/star_on.png 79 | imgHigherResponseSelected: configs/resources/images/star_on.png 80 | - value: a bit 81 | label: A bit 82 | img: configs/resources/images/star_off.png 83 | imgSelected: configs/resources/images/star_on.png 84 | imgHigherResponseSelected: configs/resources/images/star_on.png 85 | - value: much 86 | label: Much 87 | img: configs/resources/images/star_off.png 88 | imgSelected: configs/resources/images/star_on.png 89 | imgHigherResponseSelected: configs/resources/images/star_on.png 90 | 91 | 92 | - type: finish 93 | name: Thank you 94 | content: Thank you for attending 95 | showResults: true 96 | writeResults: true 97 | 98 | 99 | -------------------------------------------------------------------------------- /configs/mushra_customquestionaire.yaml: -------------------------------------------------------------------------------- 1 | # test config mushra page, no waveform, 3 conditions, looping, anchor35, anchor 70 2 | 3 | 4 | testname: MUSHRA with custom Questionaire 5 | testId: mushra_customquestionaire 6 | bufferSize: 2048 7 | stopOnErrors: true 8 | showButtonPreviousPage: true 9 | remoteService: service/write.php 10 | 11 | 12 | pages: 13 | 14 | - type: mushra 15 | id: trial2 16 | name: Mono Trial 17 | content: test description 18 | showWaveform: false 19 | enableLooping: true 20 | reference: configs/resources/audio/mono_ref.wav 21 | createAnchor35: true 22 | createAnchor70: true 23 | stimuli: 24 | C1: configs/resources/audio/mono_c1.wav 25 | C2: configs/resources/audio/mono_c2.wav 26 | C3: configs/resources/audio/mono_c3.wav 27 | 28 | 29 | - type: finish 30 | name: Thank you 31 | content: Thank you for attending 32 | popupContent: Your results were sent. Goodbye and have a nice day 33 | showResults: true 34 | writeResults: true 35 | questionnaire: 36 | - type: text 37 | label: eMail 38 | name: email 39 | - type: number 40 | label: Age 41 | name: age 42 | min: 0 43 | max: 100 44 | default: 30 45 | - type: likert 46 | name: gender 47 | label: Gender 48 | response: 49 | - value: female 50 | label: Female 51 | - value: male 52 | label: Male 53 | - value: other 54 | label: Other 55 | -------------------------------------------------------------------------------- /configs/mushra_noloop.yaml: -------------------------------------------------------------------------------- 1 | # test config mushra page, waveform, 11 conditions, no looping 2 | 3 | 4 | testname: MUSHRA without looping 5 | testId: mushra_noloop 6 | bufferSize: 2048 7 | stopOnErrors: true 8 | showButtonPreviousPage: true 9 | remoteService: service/write.php 10 | 11 | 12 | pages: 13 | 14 | - type: mushra 15 | id: trial2 16 | name: Mono Trial 17 | content: test description 18 | showWaveform: true 19 | enableLooping: false 20 | reference: configs/resources/audio/mono_ref.wav 21 | createAnchor35: false 22 | createAnchor70: false 23 | stimuli: 24 | C1: configs/resources/audio/mono_c1.wav 25 | C2: configs/resources/audio/mono_c2.wav 26 | C3: configs/resources/audio/mono_c3.wav 27 | C4: configs/resources/audio/mono_c1.wav 28 | C5: configs/resources/audio/mono_c2.wav 29 | C6: configs/resources/audio/mono_c3.wav 30 | C7: configs/resources/audio/mono_c1.wav 31 | C8: configs/resources/audio/mono_c2.wav 32 | C9: configs/resources/audio/mono_c3.wav 33 | C10: configs/resources/audio/mono_c1.wav 34 | C11: configs/resources/audio/mono_c2.wav 35 | 36 | 37 | - type: finish 38 | name: Thank you 39 | content: Thank you for attending 40 | popupContent: Your results were sent. Goodbye and have a nice day 41 | showResults: true 42 | writeResults: true 43 | -------------------------------------------------------------------------------- /configs/mushra_noloop_nowav.yaml: -------------------------------------------------------------------------------- 1 | # test config mushra page, no waveform, 3 conditions, no looping 2 | 3 | 4 | testname: MUSHRA without looping and waveform 5 | testId: mushra_noloop_nowav 6 | bufferSize: 2048 7 | stopOnErrors: true 8 | showButtonPreviousPage: true 9 | remoteService: service/write.php 10 | 11 | 12 | pages: 13 | 14 | - type: mushra 15 | id: trial2 16 | name: Mono Trial 17 | content: test description 18 | showWaveform: false 19 | enableLooping: false 20 | reference: configs/resources/audio/mono_ref.wav 21 | createAnchor35: false 22 | createAnchor70: false 23 | stimuli: 24 | C1: configs/resources/audio/mono_c1.wav 25 | C2: configs/resources/audio/mono_c2.wav 26 | C3: configs/resources/audio/mono_c3.wav 27 | 28 | 29 | - type: finish 30 | name: Thank you 31 | content: Thank you for attending 32 | popupContent: Your results were sent. Goodbye and have a nice day 33 | showResults: true 34 | writeResults: true 35 | -------------------------------------------------------------------------------- /configs/mushra_norandom.yaml: -------------------------------------------------------------------------------- 1 | # test config mushra page, 2 trials: 1) not randomized, condition names shown 2) 2 | 3 | testname: MUSHRA without randomization 4 | testId: mushra_norandom 5 | bufferSize: 2048 6 | stopOnErrors: true 7 | showButtonPreviousPage: true 8 | remoteService: service/write.php 9 | 10 | 11 | pages: 12 | 13 | - type: mushra 14 | id: trial1 15 | name: Mono Trial 16 | content: test description 17 | showWaveform: true 18 | enableLooping: true 19 | reference: configs/resources/audio/mono_ref.wav 20 | createAnchor35: true 21 | createAnchor70: false 22 | randomize: false 23 | showConditionNames: true 24 | stimuli: 25 | C1: configs/resources/audio/mono_c1.wav 26 | C2: configs/resources/audio/mono_c2.wav 27 | C3: configs/resources/audio/mono_c3.wav 28 | 29 | 30 | - type: mushra 31 | id: trial2 32 | name: Mono Trial 33 | content: test description 34 | showWaveform: true 35 | enableLooping: true 36 | reference: configs/resources/audio/mono_ref.wav 37 | createAnchor35: true 38 | createAnchor70: false 39 | randomize: true 40 | showConditionNames: true 41 | stimuli: 42 | C1: configs/resources/audio/mono_c1.wav 43 | C2: configs/resources/audio/mono_c2.wav 44 | C3: configs/resources/audio/mono_c3.wav 45 | 46 | 47 | - type: finish 48 | name: Thank you 49 | content: Thank you for attending 50 | popupContent: Your results were sent. Goodbye and have a nice day 51 | showResults: true 52 | writeResults: true 53 | -------------------------------------------------------------------------------- /configs/mushra_nowav.yaml: -------------------------------------------------------------------------------- 1 | # test config mushra page, no waveform, 3 conditions, looping 2 | 3 | 4 | testname: MUSHRA without waveform 5 | testId: mushra_nowav 6 | bufferSize: 2048 7 | stopOnErrors: true 8 | showButtonPreviousPage: true 9 | remoteService: service/write.php 10 | 11 | 12 | pages: 13 | 14 | - type: mushra 15 | id: trial2 16 | name: Mono Trial 17 | content: test description 18 | showWaveform: false 19 | enableLooping: true 20 | reference: configs/resources/audio/mono_ref.wav 21 | createAnchor35: false 22 | createAnchor70: false 23 | stimuli: 24 | C1: configs/resources/audio/mono_c1.wav 25 | C2: configs/resources/audio/mono_c2.wav 26 | C3: configs/resources/audio/mono_c3.wav 27 | 28 | 29 | - type: finish 30 | name: Thank you 31 | content: Thank you for attending 32 | popupContent: Your results were sent. Goodbye and have a nice day 33 | showResults: true 34 | writeResults: true 35 | -------------------------------------------------------------------------------- /configs/resources/audio/mono_c1.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/configs/resources/audio/mono_c1.wav -------------------------------------------------------------------------------- /configs/resources/audio/mono_c2.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/configs/resources/audio/mono_c2.wav -------------------------------------------------------------------------------- /configs/resources/audio/mono_c3.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/configs/resources/audio/mono_c3.wav -------------------------------------------------------------------------------- /configs/resources/audio/mono_ref.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/configs/resources/audio/mono_ref.wav -------------------------------------------------------------------------------- /configs/resources/images/star_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/configs/resources/images/star_off.png -------------------------------------------------------------------------------- /configs/resources/images/star_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/configs/resources/images/star_on.png -------------------------------------------------------------------------------- /configs/training.yaml: -------------------------------------------------------------------------------- 1 | testname: webMUSHRA Example 2 | testId: training_example 3 | bufferSize: 2048 4 | stopOnErrors: true 5 | showButtonPreviousPage: true 6 | remoteService: service/write.php 7 | 8 | 9 | pages: 10 | - type: generic 11 | id: first_page 12 | name: Welcome 13 | content: The next pages present a few ideas about how to design a training page. 14 | - type: generic 15 | id: training_1 16 | name: Training No.1 17 | content: Please listen to each of the music excerpts:



18 | - type: likert_multi_stimulus 19 | id: training_2 20 | name: Training No.2 21 | content: test description 22 | mustRate: true 23 | stimuli: 24 | C1: configs/resources/audio/mono_c1.wav 25 | C2: configs/resources/audio/mono_c2.wav 26 | C3: configs/resources/audio/mono_c3.wav 27 | response: 28 | - value: listened 29 | label: I listened to this item 30 | - type: mushra 31 | id: training_3 32 | name: Training No.3 33 | content: This MUSHRA page does not randomize the conditions. Furthermore, the conditions names are not hidden. 34 | showWaveform: true 35 | enableLooping: true 36 | reference: configs/resources/audio/mono_ref.wav 37 | createAnchor35: true 38 | createAnchor70: true 39 | randomize: false 40 | showConditionNames: true 41 | stimuli: 42 | C1: configs/resources/audio/mono_c1.wav 43 | C2: configs/resources/audio/mono_c2.wav 44 | C3: configs/resources/audio/mono_c3.wav 45 | 46 | - type: finish 47 | name: Thank you 48 | content: Thank you for attending! 49 | showResults: true 50 | writeResults: true 51 | questionnaire: 52 | - type: text 53 | label: eMail 54 | name: email 55 | - type: number 56 | label: Age 57 | name: age 58 | min: 0 59 | max: 100 60 | default: 30 61 | - type: likert 62 | name: gender 63 | label: Gender 64 | response: 65 | - value: female 66 | label: Female 67 | - value: male 68 | label: Male 69 | - value: other 70 | label: Other 71 | -------------------------------------------------------------------------------- /design/images/alabs_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/images/alabs_new.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/ajax-loader.gif -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/action-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/action-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/action-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/action-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/alert-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/alert-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/alert-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/alert-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/arrow-d-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/arrow-d-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/arrow-d-l-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/arrow-d-l-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/arrow-d-l-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/arrow-d-l-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/arrow-d-r-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/arrow-d-r-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/arrow-d-r-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/arrow-d-r-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/arrow-d-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/arrow-d-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/arrow-l-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/arrow-l-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/arrow-l-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/arrow-l-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/arrow-r-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/arrow-r-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/arrow-r-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/arrow-r-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/arrow-u-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/arrow-u-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/arrow-u-l-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/arrow-u-l-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/arrow-u-l-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/arrow-u-l-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/arrow-u-r-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/arrow-u-r-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/arrow-u-r-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/arrow-u-r-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/arrow-u-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/arrow-u-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/audio-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/audio-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/audio-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/audio-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/back-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/back-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/back-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/back-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/bars-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/bars-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/bars-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/bars-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/bullets-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/bullets-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/bullets-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/bullets-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/calendar-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/calendar-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/calendar-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/calendar-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/camera-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/camera-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/camera-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/camera-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/carat-d-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/carat-d-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/carat-d-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/carat-d-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/carat-l-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/carat-l-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/carat-l-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/carat-l-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/carat-r-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/carat-r-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/carat-r-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/carat-r-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/carat-u-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/carat-u-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/carat-u-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/carat-u-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/check-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/check-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/check-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/check-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/clock-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/clock-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/clock-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/clock-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/cloud-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/cloud-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/cloud-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/cloud-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/comment-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/comment-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/comment-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/comment-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/delete-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/delete-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/delete-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/delete-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/edit-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/edit-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/edit-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/edit-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/eye-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/eye-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/eye-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/eye-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/forbidden-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/forbidden-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/forbidden-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/forbidden-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/forward-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/forward-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/forward-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/forward-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/gear-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/gear-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/gear-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/gear-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/grid-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/grid-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/grid-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/grid-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/heart-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/heart-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/heart-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/heart-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/home-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/home-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/home-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/home-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/info-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/info-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/info-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/info-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/location-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/location-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/location-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/location-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/lock-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/lock-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/lock-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/lock-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/mail-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/mail-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/mail-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/mail-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/minus-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/minus-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/minus-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/minus-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/navigation-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/navigation-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/navigation-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/navigation-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/phone-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/phone-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/phone-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/phone-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/plus-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/plus-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/plus-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/plus-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/power-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/power-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/power-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/power-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/recycle-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/recycle-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/recycle-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/recycle-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/refresh-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/refresh-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/refresh-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/refresh-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/search-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/search-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/search-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/search-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/shop-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/shop-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/shop-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/shop-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/star-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/star-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/star-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/star-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/tag-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/tag-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/tag-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/tag-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/user-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/user-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/user-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/user-white.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/video-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/video-black.png -------------------------------------------------------------------------------- /design/jquery.mobile-theme/themes/default/images/icons-png/video-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/design/jquery.mobile-theme/themes/default/images/icons-png/video-white.png -------------------------------------------------------------------------------- /doc/jsdoc_conf.json: -------------------------------------------------------------------------------- 1 | { 2 | "tags": { 3 | "allowUnknownTags": true 4 | }, 5 | "source": { 6 | "includePattern": ".+\\.js(doc)?$", 7 | "excludePattern": "(^|\\/|\\\\)_" 8 | }, 9 | "plugins": [] 10 | } 11 | -------------------------------------------------------------------------------- /doc/participant.md: -------------------------------------------------------------------------------- 1 | # Documentation for Participants 2 | 3 | ## Keyboard Shortcuts 4 | 5 | ### BS.1534 (MUSHRA) 6 | 7 | * 0,r Select and play/pause reference 8 | * 1-9 Select and play/pause condition 1-9 9 | * SPACE Play/pause the selected condition 10 | * BACKSPACE Stop the selected condition 11 | * a Set begin of loop to current position 12 | * A Set begin of loop to start position 13 | * b Set end of loop to current position 14 | * B Set end of loop to end position 15 | * h, LEFT Switch to previous condition 16 | * l, RIGHT Switch to next condition 17 | * j, UP Increase rating by 1 18 | * J Increase rating by 10 19 | * k, DOWN Decrease rating by 1 20 | * K Decrease rating by 10 21 | 22 | ### BS.1116 23 | 24 | * 0,r Select and play/pause reference (A) 25 | * 1 Select and play/pause condition B 26 | * 2 Select and play/pause condition C 27 | * SPACE Play/pause the selected condition 28 | * BACKSPACE Stop the selected condition 29 | * a Set begin of loop to current position 30 | * b Set end of loop to current position 31 | * j Increase rating by 0.1 32 | * J Increase rating by 1 33 | * k Decrease rating by 0.1 34 | * K Decrease rating by 1 35 | 36 | ### (Forced/Unforced) Paired Comparison 37 | 38 | * 0,r Select and play/pause reference 39 | * 1 Select and play/pause condition A 40 | * 2 Select and play/pause condition B 41 | * SPACE Play/pause the current selection 42 | * a Set begin of loop to current position 43 | * b Set end of loop to current position 44 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | webmushra: 4 | build: 5 | context: . 6 | dockerfile: Dockerfile 7 | volumes: 8 | - ./results:/var/www/html/results 9 | - ./configs:/var/www/html/configs 10 | ports: 11 | - "8000:80" 12 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/favicon.ico -------------------------------------------------------------------------------- /lib/external/jquery.mobile/LICENSE.TXT: -------------------------------------------------------------------------------- 1 | Copyright 2010, 2014 jQuery Foundation and other contributors, 2 | https://jquery.org/ 3 | 4 | This software consists of voluntary contributions made by many 5 | individuals. For exact contribution history, see the revision history 6 | available at https://github.com/jquery/jquery-mobile 7 | 8 | The following license applies to all parts of this software except as 9 | documented below: 10 | 11 | ==== 12 | 13 | Permission is hereby granted, free of charge, to any person obtaining 14 | a copy of this software and associated documentation files (the 15 | "Software"), to deal in the Software without restriction, including 16 | without limitation the rights to use, copy, modify, merge, publish, 17 | distribute, sublicense, and/or sell copies of the Software, and to 18 | permit persons to whom the Software is furnished to do so, subject to 19 | the following conditions: 20 | 21 | The above copyright notice and this permission notice shall be 22 | included in all copies or substantial portions of the Software. 23 | 24 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 25 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 26 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 27 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 28 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 29 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 30 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 31 | 32 | ==== 33 | 34 | Copyright and related rights for sample code are waived via CC0. Sample 35 | code is defined as all source code contained within the demos directory. 36 | 37 | CC0: http://creativecommons.org/publicdomain/zero/1.0/ 38 | 39 | ==== 40 | 41 | All files located in the node_modules and external directories are 42 | externally maintained libraries used by this software which have their 43 | own licenses; we recommend you read them, as their terms may differ from 44 | the terms above. 45 | -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | .livereload 3 | .DS_Store 4 | -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/LICENSE-MIT: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013 andy matthews 2 | 3 | Permission is hereby granted, free of charge, to any person 4 | obtaining a copy of this software and associated documentation 5 | files (the "Software"), to deal in the Software without 6 | restriction, including without limitation the rights to use, 7 | copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the 9 | Software is furnished to do so, subject to the following 10 | conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/README.md: -------------------------------------------------------------------------------- 1 | Font Awesome, the iconic font designed for use with Twitter Bootstrap 2 | 3 | The full suite of pictographic icons, examples, and documentation can be found at: 4 | http://fortawesome.github.com/Font-Awesome/ 5 | -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/faicons-v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/faicons-v2.png -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/faicons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/faicons.png -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/font/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/font/FontAwesome.otf -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/font/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/font/fontawesome-webfont.eot -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/font/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/font/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/font/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/font/fontawesome-webfont.woff -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/images/ajax-loader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/images/ajax-loader.png -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/images/icons-18-black-pack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/images/icons-18-black-pack.png -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/images/icons-18-white-pack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/images/icons-18-white-pack.png -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/images/icons-36-black-pack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/images/icons-36-black-pack.png -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/images/icons-36-white-pack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/font-awesome/images/icons-36-white-pack.png -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jQuery Mobile Icon Pack 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 |
20 |

jQuery Mobile Icon Pack

21 |
22 | 23 |
24 |

25 | jQuery Mobile 1.2.0 compatible! 26 |

27 |

28 | The jQuery Mobile Icon Pack extends jQuery Mobile's default icon set with 249 crisp icons covering a wide range of categories. 29 |

30 | 31 | Font Awesome Icons 32 | Original Icons 33 | Build your own! 34 |
35 | Download from Github 36 | 37 |
38 | 39 |
40 |

© 2013 - Andy Matthews

41 |
42 | 43 |
44 | 45 | -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/original/assets/icons-18-pack.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/original/assets/icons-18-pack.psd -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/original/assets/icons-36-pack.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/original/assets/icons-36-pack.psd -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/original/images/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/original/images/ajax-loader.gif -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/original/images/ajax-loader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/original/images/ajax-loader.png -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/original/images/icons-18-black-pack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/original/images/icons-18-black-pack.png -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/original/images/icons-18-white-pack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/original/images/icons-18-white-pack.png -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/original/images/icons-36-black-pack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/original/images/icons-36-black-pack.png -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/original/images/icons-36-white-pack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/original/images/icons-36-white-pack.png -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Icon-Pack/readme.md: -------------------------------------------------------------------------------- 1 | # jQuery Mobile Icon Pack 2 | 3 | Extending jQuery Mobile's default icon set. 4 | 5 | This repository offers two options. A set of 33 custom icons (the original Icon Pack). Icon categories include currency symbols, media control, social media, common application icons, and more. It also cleans up the original icons and makes them a little sharper. It also includes crisp hi-res icons for retina displays. The icon pack overrides the default icon set completely. 6 | 7 | There's also an entire icon set using Twitter Bootstrap's [Font Awesome](http://fortawesome.github.com/Font-Awesome/). 249 icons which cover just about any icon you'd need in your application. The Font Awesome collection allows you to use these icons in conjunction with jQuery Mobile's default icon set. 8 | 9 | Included in the Font Awesome icon set are all original icons, as well as the extended icons. 10 | 11 | ## Examples 12 | 13 | [View the Original Icons](http://andymatthews.net/code/jQuery-Mobile-Icon-Pack/original/) | [View the Font Awesome Icons](http://andymatthews.net/code/jQuery-Mobile-Icon-Pack/font-awesome/) 14 | 15 | ## Quick start 16 | 17 | Clone the git repo - `git clone git@github.com:commadelimited/jQuery-Mobile-Icon-Pack.git` - or [download it](https://github.com/commadelimited/jQuery-Mobile-Icon-Pack/zipball/master) 18 | 19 | ## Original Icon Pack Usage 20 | Drop `jqm-icon-pack-2.0-original.css` and the associated images folder into your project. Image files are relative to the CSS file just like the original icons are. Use them just as you would the standard icons. 21 | 22 | ## Font Awesome Icon Pack Usage 23 | Drop `jqm-icon-pack-3.0.0-fa.css` and the associated font folder into your project. Font files are relative to the CSS file just like the original icons are. Use them just as you would the standard icons. 24 | 25 | ## My License 26 | Dual license: MIT/GPL 27 | 28 | ## Font Awesome License 29 | Version 3.0 of the Font Awesome font, CSS, and LESS files are licensed under CC BY 3.0: http://creativecommons.org/licenses/by/3.0/ A mention of 'Font Awesome - http://fortawesome.github.com/Font-Awesome' in human-readable source code is considered acceptable attribution (most common on the web). If human readable source code is not available to the end user, a mention in an 'About' or 'Credits' screen is considered acceptable (most common in desktop or mobile software). 30 | -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Progress-Bar-with-Percentage/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013 Tolis 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Progress-Bar-with-Percentage/VERSION: -------------------------------------------------------------------------------- 1 | 1.0.1 2 | -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Progress-Bar-with-Percentage/examples/example_1.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Tolito Progress Bar for jQuery Mobile 1.2.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | 52 | 53 | 54 | 55 | 56 |
57 | 58 |
59 |

Tolito Progress Bar for jQuery Mobile 1.2.0

60 | 61 |
62 | 63 |
64 |
65 |
66 |
67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Progress-Bar-with-Percentage/examples/example_2.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Tolito Progress Bar for jQuery Mobile 1.2.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | 28 | 29 | 30 | 31 | 32 |
33 | 34 |
35 |

Tolito Progress Bar for jQuery Mobile 1.2.0

36 | 37 |
38 | 39 |
40 | Open dialog with progress bar 41 |
42 |
43 | 44 |
45 | 46 |
47 |

Progress

48 | 49 |
50 | 51 |
52 |

Loading data..

53 | 54 |

This is a regular page, styled as a dialog. To create a dialog, just link to a normal page and include a transition and data-rel="dialog" attribute.

55 |
56 |
57 |
58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Progress-Bar-with-Percentage/examples/example_3.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Tolito Progress Bar for jQuery Mobile 1.2.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | 48 | 49 | 50 | 51 | 52 |
53 | 54 |
55 |

Tolito Progress Bar for jQuery Mobile 1.2.0

56 | 57 |
58 | 59 |
60 |
61 | 62 | 63 |
64 |
65 |
66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Progress-Bar-with-Percentage/examples/example_4.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Tolito Progress Bar for jQuery Mobile 1.2.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | 33 | 34 | 35 | 36 | 37 |
38 | 39 |
40 |

Tolito Progress Bar for jQuery Mobile 1.2.0

41 | 42 |
43 | 44 |
45 | Open dialog with progress bar 46 |
47 |
48 | 49 |
50 | 51 |
52 |

Progress

53 | 54 |
55 | 56 |
57 |

Loading data..

58 | 59 |

This is a regular page, styled as a dialog. To create a dialog, just link to a normal page and include a transition and data-rel="dialog" attribute.

60 |
61 |
62 |
63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Progress-Bar-with-Percentage/examples/example_5.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Tolito Progress Bar for jQuery Mobile 1.2.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | 23 | 24 | 25 | 26 | 27 |
28 | 29 |
30 |

Tolito Progress Bar for jQuery Mobile 1.2.0

31 | 32 |
33 | 34 |
35 |
36 |
37 |
38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Progress-Bar-with-Percentage/examples/example_6.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Tolito Progress Bar for jQuery Mobile 1.2.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | 35 | 36 | 37 | 38 | 39 |
40 | 41 |
42 |

Tolito Progress Bar for jQuery Mobile 1.2.0

43 | 44 |
45 | 46 |
47 |
48 |
49 |
50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /lib/external/jquery.mobile/plugins/jQuery-Mobile-Progress-Bar-with-Percentage/examples/example_7.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Tolito Progress Bar for jQuery Mobile 1.2.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | 38 | 39 | 40 | 41 | 42 |
43 | 44 |
45 |

Tolito Progress Bar for jQuery Mobile 1.2.0

46 | 47 |
48 | 49 |
50 |
51 |
52 |
53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /lib/external/jquery/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright jQuery Foundation and other contributors, https://jquery.org/ 2 | 3 | This software consists of voluntary contributions made by many 4 | individuals. For exact contribution history, see the revision history 5 | available at https://github.com/jquery/jquery 6 | 7 | The following license applies to all parts of this software except as 8 | documented below: 9 | 10 | ==== 11 | 12 | Permission is hereby granted, free of charge, to any person obtaining 13 | a copy of this software and associated documentation files (the 14 | "Software"), to deal in the Software without restriction, including 15 | without limitation the rights to use, copy, modify, merge, publish, 16 | distribute, sublicense, and/or sell copies of the Software, and to 17 | permit persons to whom the Software is furnished to do so, subject to 18 | the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be 21 | included in all copies or substantial portions of the Software. 22 | 23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 27 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 28 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 29 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 30 | 31 | ==== 32 | 33 | All files located in the node_modules and external directories are 34 | externally maintained libraries used by this software which have their 35 | own licenses; we recommend you read them, as their terms may differ from 36 | the terms above. 37 | -------------------------------------------------------------------------------- /lib/external/mousetrap/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2015 Craig Campbell 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /lib/external/mousetrap/mousetrap.min.js: -------------------------------------------------------------------------------- 1 | /* mousetrap v1.4.6 craig.is/killing/mice */ 2 | (function(J,r,f){function s(a,b,d){a.addEventListener?a.addEventListener(b,d,!1):a.attachEvent("on"+b,d)}function A(a){if("keypress"==a.type){var b=String.fromCharCode(a.which);a.shiftKey||(b=b.toLowerCase());return b}return h[a.which]?h[a.which]:B[a.which]?B[a.which]:String.fromCharCode(a.which).toLowerCase()}function t(a){a=a||{};var b=!1,d;for(d in n)a[d]?b=!0:n[d]=0;b||(u=!1)}function C(a,b,d,c,e,v){var g,k,f=[],h=d.type;if(!l[a])return[];"keyup"==h&&w(a)&&(b=[a]);for(g=0;gg||h.hasOwnProperty(g)&&(p[h[g]]=g)}e=p[d]?"keydown":"keypress"}"keypress"==e&&f.length&&(e="keydown");return{key:c,modifiers:f,action:e}}function F(a,b,d,c,e){q[a+":"+d]=b;a=a.replace(/\s+/g," ");var f=a.split(" ");1":".","?":"/","|":"\\"},G={option:"alt",command:"meta","return":"enter",escape:"esc",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"},p,l={},q={},n={},D,z=!1,I=!1,u=!1;for(f=1;20>f;++f)h[111+f]="f"+f;for(f=0;9>=f;++f)h[f+96]=f;s(r,"keypress",y);s(r,"keydown",y);s(r,"keyup",y);var m={bind:function(a,b,d){a=a instanceof Array?a:[a];for(var c=0;c1&&void 0!==arguments[1]?arguments[1]:0,o=(i[t[e+0]]+i[t[e+1]]+i[t[e+2]]+i[t[e+3]]+"-"+i[t[e+4]]+i[t[e+5]]+"-"+i[t[e+6]]+i[t[e+7]]+"-"+i[t[e+8]]+i[t[e+9]]+"-"+i[t[e+10]]+i[t[e+11]]+i[t[e+12]]+i[t[e+13]]+i[t[e+14]]+i[t[e+15]]).toLowerCase();if(!r(o))throw TypeError("Stringified UUID is invalid");return o}(u)}})); -------------------------------------------------------------------------------- /lib/external/wmSlider/LICENSE.txt: -------------------------------------------------------------------------------- 1 | wmSlider is based on noUiSlider 9.2.0 2 | 3 | (C) Copyright AudioLabs 2017 4 | 5 | This source code is protected by copyright law and international treaties. 6 | This source code is made available to You subject to the terms and conditions 7 | of the Software License for the webMUSHRA.js Software. Said terms and conditions 8 | have been made available to You prior to Your download of this source code. 9 | By downloading this source code You agree to be bound by the above mentionend 10 | terms and conditions, which can also be found here: 11 | https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use 12 | of this source code may result in severe civil and criminal penalties, and 13 | will be prosecuted to the maximum extent possible under law. 14 | -------------------------------------------------------------------------------- /lib/external/wmSlider/slider.min.css: -------------------------------------------------------------------------------- 1 | /*! based on nouislider - 9.2.0 - 2017-01-11 10:35:35 */.noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-ms-touch-action:none;touch-action:none;-ms-user-select:none;-moz-user-select:none;user-select:none;-moz-box-sizing:border-box;box-sizing:border-box}.noUi-target{position:relative;direction:ltr}.noUi-base{width:100%;height:100%;position:relative;z-index:1}.noUi-connect{position:absolute;right:0;top:0;left:0;bottom:0}.noUi-origin{position:absolute;height:0;width:0}.noUi-handle{position:relative;z-index:1}.noUi-state-tap .noUi-connect,.noUi-state-tap .noUi-origin{-webkit-transition:top .3s,right .3s,bottom .3s,left .3s;transition:top .3s,right .3s,bottom .3s,left .3s}.noUi-state-drag *{cursor:inherit!important}.noUi-base,.noUi-handle{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.noUi-horizontal{height:18px}.noUi-horizontal .noUi-handle{width:34px;height:28px;left:-17px;top:-6px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{width:28px;height:34px;left:-6px;top:-17px}.noUi-target{background:#FAFAFA;border-radius:4px;border:1px solid #D3D3D3;box-shadow:inset 0 1px 1px #F0F0F0,0 3px 6px -5px #BBB}.noUi-connect{background:#3FB8AF;box-shadow:inset 0 0 3px rgba(51,51,51,.45);-webkit-transition:background 450ms;transition:background 450ms}.noUi-draggable{cursor:ew-resize}.noUi-vertical .noUi-draggable{cursor:ns-resize}.noUi-handle{border:1px solid #D9D9D9;border-radius:3px;background:#FFF;cursor:default;box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #EBEBEB,0 3px 6px -3px #BBB}.noUi-active{box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #DDD,0 3px 6px -3px #BBB}.noUi-handle:after,.noUi-handle:before{content:"";display:block;position:absolute;height:14px;width:1px;background:#E8E7E6;left:14px;top:6px}.noUi-handle:after{left:17px}.noUi-vertical .noUi-handle:after,.noUi-vertical .noUi-handle:before{width:14px;height:1px;left:6px;top:14px}.noUi-vertical .noUi-handle:after{top:17px}[disabled] .noUi-connect{background:#B8B8B8}[disabled] .noUi-handle,[disabled].noUi-handle,[disabled].noUi-target{cursor:not-allowed}.noUi-pips,.noUi-pips *{-moz-box-sizing:border-box;box-sizing:border-box}.noUi-pips{position:absolute;color:#999}.noUi-value{position:absolute;text-align:center}.noUi-value-sub{color:#ccc;font-size:10px}.noUi-marker{position:absolute;background:#CCC}.noUi-marker-large,.noUi-marker-sub{background:#AAA}.noUi-pips-horizontal{padding:10px 0;height:80px;top:100%;left:0;width:100%}.noUi-value-horizontal{-webkit-transform:translate3d(-50%,50%,0);transform:translate3d(-50%,50%,0)}.noUi-marker-horizontal.noUi-marker{margin-left:-1px;width:2px;height:5px}.noUi-marker-horizontal.noUi-marker-sub{height:10px}.noUi-marker-horizontal.noUi-marker-large{height:15px}.noUi-pips-vertical{padding:0 10px;height:100%;top:0;left:100%}.noUi-value-vertical{-webkit-transform:translate3d(0,50%,0);transform:translate3d(0,50%,0);padding-left:25px}.noUi-marker-vertical.noUi-marker{width:5px;height:2px;margin-top:-1px}.noUi-marker-vertical.noUi-marker-sub{width:10px}.noUi-marker-vertical.noUi-marker-large{width:15px}.noUi-tooltip{display:block;position:absolute;border:1px solid #D9D9D9;border-radius:3px;background:#fff;color:#000;padding:5px;text-align:center}.noUi-horizontal .noUi-tooltip{-webkit-transform:translate(-50%,0);transform:translate(-50%,0);left:50%;bottom:120%}.noUi-vertical .noUi-tooltip{-webkit-transform:translate(0,-50%);transform:translate(0,-50%);top:50%;right:120%} 2 | -------------------------------------------------------------------------------- /lib/external/wmSlider/slider.pips.css: -------------------------------------------------------------------------------- 1 | 2 | /* Base; 3 | * 4 | */ 5 | .noUi-pips, 6 | .noUi-pips * { 7 | -moz-box-sizing: border-box; 8 | box-sizing: border-box; 9 | } 10 | .noUi-pips { 11 | position: absolute; 12 | font: 400 12px Arial; 13 | color: #999; 14 | } 15 | 16 | /* Values; 17 | * 18 | */ 19 | .noUi-value { 20 | width: 40px; 21 | position: absolute; 22 | text-align: center; 23 | } 24 | .noUi-value-sub { 25 | color: #ccc; 26 | font-size: 10px; 27 | } 28 | 29 | /* Markings; 30 | * 31 | */ 32 | .noUi-marker { 33 | position: absolute; 34 | background: #CCC; 35 | } 36 | .noUi-marker-sub { 37 | background: #AAA; 38 | } 39 | .noUi-marker-large { 40 | background: #AAA; 41 | } 42 | 43 | /* Horizontal layout; 44 | * 45 | */ 46 | .noUi-pips-horizontal { 47 | padding: 10px 0; 48 | height: 50px; 49 | top: 100%; 50 | left: 0; 51 | width: 100%; 52 | } 53 | .noUi-value-horizontal { 54 | margin-left: -20px; 55 | padding-top: 20px; 56 | } 57 | .noUi-value-horizontal.noUi-value-sub { 58 | padding-top: 15px; 59 | } 60 | 61 | .noUi-marker-horizontal.noUi-marker { 62 | margin-left: -1px; 63 | width: 2px; 64 | height: 5px; 65 | } 66 | .noUi-marker-horizontal.noUi-marker-sub { 67 | height: 10px; 68 | } 69 | .noUi-marker-horizontal.noUi-marker-large { 70 | height: 15px; 71 | } 72 | 73 | /* Vertical layout; 74 | * 75 | */ 76 | .noUi-pips-vertical { 77 | padding: 0 10px; 78 | height: 100%; 79 | top: 0; 80 | left: 100%; 81 | } 82 | .noUi-value-vertical { 83 | width: 15px; 84 | margin-left: 20px; 85 | margin-top: -5px; 86 | } 87 | 88 | .noUi-marker-vertical.noUi-marker { 89 | width: 5px; 90 | height: 2px; 91 | margin-top: -1px; 92 | } 93 | .noUi-marker-vertical.noUi-marker-sub { 94 | width: 10px; 95 | } 96 | .noUi-marker-vertical.noUi-marker-large { 97 | width: 15px; 98 | } 99 | -------------------------------------------------------------------------------- /lib/external/yaml/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010 Jeremy Faivre 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. -------------------------------------------------------------------------------- /lib/webmushra/audio/AudioFileLoader.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | 9 | function AudioFileLoader(_audioContext, _errorHandler) { 10 | this.audioContext = _audioContext; 11 | this.errorHandler = _errorHandler; 12 | this.callbackSuccess = null; 13 | this.files = []; 14 | } 15 | 16 | AudioFileLoader.prototype.addFile = function(_url, _callback, _callbackArgument) { 17 | this.files[this.files.length] = {url: _url, callback: _callback, callbackArgument: _callbackArgument}; 18 | }; 19 | 20 | 21 | 22 | AudioFileLoader.prototype.startLoading = function(_callbackSuccess) { 23 | this.callbackSuccess = _callbackSuccess; 24 | 25 | if (this.files.length === 0) { 26 | _callbackSuccess(); 27 | } 28 | 29 | for (var i = 0; i < this.files.length; ++i) { 30 | 31 | var req = new XMLHttpRequest(); 32 | req.open("GET", this.files[i].url, true); 33 | req.responseType = "arraybuffer"; 34 | req.onerror = (function (e) { 35 | this.errorHandler.sendError("Loading audio file failed: " + e); 36 | _callbackSuccess(); 37 | }).bind(this); 38 | 39 | var param = {index: i, loader: this, request: req}; 40 | req.onload = (function() { 41 | this.loader.audioContext.decodeAudioData(this.request.response, (function(buffer) { 42 | this.loader.files[this.index].callback(buffer, this.loader.files[this.index].callbackArgument); 43 | this.loader.files[this.index] = null; 44 | for (var j = 0; j < this.loader.files.length; ++j) { 45 | if(this.loader.files[j] != null) { 46 | return; 47 | } 48 | } 49 | _callbackSuccess(); 50 | }).bind(this), 51 | (function(e){ 52 | this.errorHandler.sendError("Loading audio file failed: " + e); 53 | return; 54 | }).bind(this)); 55 | }).bind(param); 56 | req.send(); 57 | } 58 | 59 | 60 | 61 | 62 | 63 | 64 | }; 65 | 66 | 67 | 68 | /* 69 | AudioFileLoader.prototype.startLoading = function(_callbackSuccess) { 70 | this.callbackSuccess = _callbackSuccess; 71 | if (this.files.length === 0) { 72 | _callbackSuccess(); 73 | return; 74 | } 75 | 76 | var req = new XMLHttpRequest(); 77 | req.open("GET", this.files[0].url, true); 78 | req.responseType = "arraybuffer"; 79 | req.onerror = (function (e) { 80 | this.errorHandler.sendError("Loading audio file failed: " + e); 81 | _callbackSuccess(); 82 | }).bind(this); 83 | 84 | req.onload = (function() { 85 | this.audioContext.decodeAudioData(req.response, (function(buffer) { 86 | this.files[0].callback(buffer, this.files[0].callbackArgument); 87 | this.files.splice(0,1); 88 | this.startLoading(this.callbackSuccess); 89 | }).bind(this), 90 | (function(e){ 91 | this.errorHandler.sendError("Loading audio file failed: " + e); 92 | _callbackSuccess(); 93 | return; 94 | }).bind(this)); 95 | }).bind(this); 96 | 97 | 98 | req.send(); 99 | };*/ 100 | 101 | -------------------------------------------------------------------------------- /lib/webmushra/business/DataSender.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function DataSender(config) { 9 | this.target = config.remoteService; 10 | } 11 | 12 | DataSender.prototype.send = function(_session) { 13 | var sessionJSON = JSON.stringify(_session); 14 | var httpReq = new XMLHttpRequest(); 15 | var params = "sessionJSON=" + sessionJSON; 16 | try { 17 | httpReq.open("POST", config.remoteService, false); // synchron 18 | httpReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 19 | httpReq.send(params); 20 | } 21 | catch (e) { 22 | console.log(httpReq.responseText); 23 | return true; 24 | } 25 | if(httpReq.responseText != "" || httpReq.status != 200){ 26 | console.log(httpReq.responseText); 27 | return true; 28 | }else{ 29 | return false; 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /lib/webmushra/business/ErrorHandler.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function ErrorHandler() { 9 | this.errors = []; 10 | } 11 | 12 | ErrorHandler.prototype.sendError = function(_message) { 13 | this.errors[this.errors.length] = _message; 14 | console.log("ERROR: " + _message); 15 | }; 16 | 17 | 18 | ErrorHandler.prototype.errorOccurred = function() { 19 | return (this.errors.length > 0); 20 | }; 21 | 22 | ErrorHandler.prototype.getErrors = function() { 23 | return this.errors; 24 | }; 25 | -------------------------------------------------------------------------------- /lib/webmushra/business/PageTemplateRenderer.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function PageTemplateRenderer(_pageManager, _showButtonPreviousPage, _language) { 9 | this.progressbarId = null; 10 | this.headerId = null; 11 | this.navigationId = 0; 12 | this.showButtonPreviousPage = _showButtonPreviousPage; 13 | this.language = _language; 14 | this.pageManager = _pageManager; 15 | this.lockNextButtonQueued = false; 16 | 17 | this.callbacksEventRefreshed = []; 18 | } 19 | 20 | PageTemplateRenderer.prototype.addCallbackEventRefreshed = function (_callback) { 21 | this.callbacksEventRefreshed[this.callbacksEventRefreshed.length] = _callback; 22 | }; 23 | 24 | PageTemplateRenderer.prototype.eventRefreshed = function () { 25 | for (var i = 0; i < this.callbacksEventRefreshed.length; ++i) { 26 | this.callbacksEventRefreshed[i](); 27 | } 28 | }; 29 | 30 | 31 | 32 | PageTemplateRenderer.prototype.renderProgressBar = function(_parentId) { 33 | this.progressbarId = _parentId; 34 | TolitoProgressBar(this.progressbarId) 35 | .setOuterTheme('a') 36 | .setInnerTheme('b') 37 | .isMini(true) 38 | .setMax(100) 39 | .setStartFrom(0) 40 | .setInterval(0) 41 | .showCounter(false) 42 | .build(); 43 | }; 44 | 45 | PageTemplateRenderer.prototype.renderHeader = function(_parentId) { 46 | this.headerId = _parentId; 47 | $('#' + this.headerId).append(this.pageManager.getCurrentPage().getName()); 48 | }; 49 | 50 | PageTemplateRenderer.prototype.renderNavigation = function(_parentId) { 51 | this.navigationId = _parentId; 52 | var renderedSomething = false; 53 | 54 | if (this.pageManager.getPageIndex() > 0 && this.showButtonPreviousPage && this.pageManager.getPageIndex() < (this.pageManager.getNumPages() - 1)) { 55 | var buttonPrevious = $(""); 56 | $('#' + this.navigationId).append(buttonPrevious); 57 | renderedSomething = true; 58 | } 59 | 60 | 61 | if (this.pageManager.getPageIndex() < (this.pageManager.getNumPages() - 1)) { 62 | var buttonNext = $(""); 63 | if (this.lockNextButtonQueued) { 64 | buttonNext.attr('disabled', 'disabled'); 65 | } 66 | $('#' + this.navigationId).append(buttonNext); 67 | renderedSomething = true; 68 | } 69 | 70 | if (!renderedSomething) { 71 | $('#' + this.navigationId).remove(); 72 | } 73 | this.lockNextButtonQueued = false; 74 | }; 75 | 76 | PageTemplateRenderer.prototype.lockNextButton = function() { 77 | if ($('#__button_next').length > 0) { 78 | $('#__button_next').attr('disabled', 'disabled'); 79 | } else { 80 | this.lockNextButtonQueued = true; 81 | } 82 | }; 83 | 84 | PageTemplateRenderer.prototype.unlockNextButton = function() { 85 | $('#__button_next').removeAttr('disabled'); 86 | }; 87 | 88 | 89 | 90 | PageTemplateRenderer.prototype.refresh = function() { 91 | $('#' + this.progressbarId).progressbar('option', 'value', ((this.pageManager.getPageIndex()) / (this.pageManager.getNumPages()-1)) * 100); 92 | $('#' + this.headerId).empty(); 93 | this.renderHeader(this.headerId); 94 | 95 | $('#' + this.navigationId).empty(); 96 | this.renderNavigation(this.navigationId); 97 | 98 | if ($.mobile.activePage) { 99 | $.mobile.activePage.trigger('create'); 100 | } 101 | setTimeout((function() { this.eventRefreshed()}).bind(this), 1); 102 | }; 103 | 104 | 105 | PageTemplateRenderer.prototype.clear = function() { 106 | if (this.headerId != null) { 107 | $('#' + this.headerId).empty(); 108 | } 109 | 110 | if (this.navigationId != null) { 111 | $('#' + this.navigationId).empty(); 112 | } 113 | }; 114 | -------------------------------------------------------------------------------- /lib/webmushra/control/FilePlayerController.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function FilePlayerController(_filePlayer){ 9 | this.filePlayer = _filePlayer; 10 | } 11 | 12 | 13 | FilePlayerController.prototype.bind = function(){ 14 | var stimuli = this.filePlayer.getStimuli(); 15 | for (i = 0; i < stimuli.length; ++i) { 16 | (function(i) { 17 | Mousetrap.bind(String(i + 1), function() { $('#playCondition' + i).click(); }); 18 | })(i); 19 | } 20 | Mousetrap.bind(['space'], function(e){ $('#pause').click(); }); 21 | }; 22 | 23 | 24 | FilePlayerController.prototype.unbind = function(){ 25 | var stimuli = this.filePlayer.getStimuli(); 26 | for (i = 0; i < stimuli.length; ++i) { 27 | Mousetrap.unbind(String(i + 1)); 28 | } 29 | Mousetrap.unbind(['space']); 30 | }; -------------------------------------------------------------------------------- /lib/webmushra/control/InputController.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function InputControl(_mushraAudioControl, _looping){ 9 | this.mushraAudioControl = _mushraAudioControl; 10 | this.looping = _looping; 11 | } 12 | 13 | 14 | InputControl.prototype.bind = function(){ 15 | }; 16 | 17 | 18 | InputControl.prototype.unbind = function(){ 19 | 20 | }; -------------------------------------------------------------------------------- /lib/webmushra/datamodel/BS1116Rating.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function BS1116Rating() { 9 | this.reference = null; 10 | this.nonReference = null; 11 | this.referenceScore = null; 12 | this.nonReferenceScore = null; 13 | this.comment = null; 14 | this.time = null; 15 | } 16 | -------------------------------------------------------------------------------- /lib/webmushra/datamodel/LikertMultiStimulusRating.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function LikertMultiStimulusRating() { 9 | this.stimulus = null; 10 | this.stimulusRating = null; 11 | this.time = null; 12 | } 13 | -------------------------------------------------------------------------------- /lib/webmushra/datamodel/LikertResponse.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function LikertResponse() { 9 | this.stimulus = null; 10 | this.response = null; 11 | this.comment = null; 12 | this.time = null; 13 | } 14 | -------------------------------------------------------------------------------- /lib/webmushra/datamodel/LikertSingleStimulusRating.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function LikertSingleStimulusRating() { 9 | this.stimulus = null; 10 | this.stimulusRating = null; 11 | this.time = null; 12 | } 13 | -------------------------------------------------------------------------------- /lib/webmushra/datamodel/MUSHRARating.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | /** 9 | * Represents a mushra rating. 10 | * @constructor 11 | * @property {Stimulus} stimulus - Stimulus that was rated. 12 | * @property {Number} score - Mushra score that was given by the participant (0-100). 13 | * @property {Number} time - Time that the stimulus was visible in total. 14 | */ 15 | function MUSHRARating() { 16 | this.stimulus = null; 17 | this.score = null; 18 | this.comment = null; 19 | this.time = null; 20 | } 21 | -------------------------------------------------------------------------------- /lib/webmushra/datamodel/PairedComparisonChoice.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function PairedComparisonChoice() { 9 | this.reference = null; 10 | this.nonReference = null; 11 | this.answer = null; /* unknown/correct/incorrect/undecided */ 12 | this.comment = null; 13 | this.time = null; 14 | } 15 | -------------------------------------------------------------------------------- /lib/webmushra/datamodel/Participant.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | /** 9 | * Represents a participant. 10 | * @constructor 11 | * @property {String[]} name - Variable names of the configured questions of the finish page. 12 | * @property {String[]} response - Responses of the configured questions of the finish page. "response[i]" is the response to the question with variable name "name[i]". 13 | */ 14 | function Participant() { 15 | // todo => array questionnaire name => antwort 16 | this.name = []; 17 | this.response = []; 18 | } 19 | -------------------------------------------------------------------------------- /lib/webmushra/datamodel/Session.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | /** 9 | * Represents a session. 10 | * @constructor 11 | * @property {Participant} participant - Participant who has done the session. 12 | * @property {Trial[]} trials - Trials the participant has done within the session. 13 | * 14 | */ 15 | function Session() { 16 | /* 17 | this.startTime = null; 18 | this.endTime = null; 19 | NOTE: not yet 20 | */ 21 | this.testId = null; 22 | this.participant = new Participant(); 23 | this.trials = []; 24 | this.uuid = uuidv4(); 25 | } 26 | 27 | Session.prototype.getTrial = function(_type, _id) { 28 | 29 | for (var i = 0; i < this.trials.length; ++i) { 30 | var trial = this.trials[i]; 31 | if (trial.type === _type && trial.id === _id) { 32 | return trial; 33 | } 34 | } 35 | return null; 36 | }; -------------------------------------------------------------------------------- /lib/webmushra/datamodel/SpatialASWRating.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function SpatialASWRating() { 9 | this.position_outerRight = null; 10 | this.position_innerRight = null; 11 | this.position_outerLeft = null; 12 | this.position_innerLeft = null; 13 | this.stimulus = null; 14 | this.name = null; 15 | } 16 | -------------------------------------------------------------------------------- /lib/webmushra/datamodel/SpatialHWDRating.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function SpatialHWDRating() { 9 | this.position_outerRight = null; 10 | this.position_innerRight = null; 11 | this.position_outerLeft = null; 12 | this.position_innerLeft = null; 13 | this.stimulus = null; 14 | this.name = null; 15 | this.height = null; 16 | this.depth = null; 17 | } 18 | -------------------------------------------------------------------------------- /lib/webmushra/datamodel/SpatialLEVRating.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function SpatialLEVRating() { 9 | this.position_center = null; 10 | this.position_height = null; 11 | this.position_width1 = null; 12 | this.position_width2 = null; 13 | this.stimulus = null; 14 | this.name = null; 15 | } 16 | -------------------------------------------------------------------------------- /lib/webmushra/datamodel/SpatialLocalizationRating.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function SpatialLocalizationRating() { 9 | this.position = null; 10 | this.stimulus = null; 11 | this.name = null; 12 | } 13 | -------------------------------------------------------------------------------- /lib/webmushra/datamodel/Stimulus.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | /** 9 | * Represents a Stimulus 10 | * @param {Object} _id Identifier of the stimulus. 11 | * @param {Object} _filepath Filepath to the audio file. 12 | * @constructor 13 | * @property {String} id Identifier of the stimulus. 14 | * @property {String} filepath Filepath 15 | * @property {AudioBuffer} audioBuffer Web Audio API audio buffer. 16 | */ 17 | function Stimulus(_id, _filepath) { 18 | this.id = _id; 19 | this.filepath = _filepath; 20 | this.audioBuffer = null; 21 | } 22 | 23 | Stimulus.prototype.getId = function() { 24 | return this.id; 25 | }; 26 | 27 | Stimulus.prototype.getAudioBuffer = function() { 28 | return this.audioBuffer; 29 | }; 30 | 31 | Stimulus.prototype.setAudioBuffer = function(_audioBuffer) { 32 | this.audioBuffer = _audioBuffer; 33 | }; 34 | 35 | Stimulus.prototype.getFilepath = function() { 36 | return this.filepath; 37 | }; 38 | 39 | -------------------------------------------------------------------------------- /lib/webmushra/datamodel/Trial.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | /** 9 | * Respresents a trial. 10 | * @constructor 11 | * @property {String} id - Identifier of the trial. 12 | * @property {String} type - Type of the trial (e.g. mushra, bs1116, paired_comparison etc.) 13 | * @property {Object[]} responses - Responses given by the participant. The class depends on the type (e.g. MUSHRARating if type is mushra). 14 | */ 15 | function Trial() { 16 | this.id = ""; 17 | this.type = null; 18 | this.responses = []; 19 | } 20 | -------------------------------------------------------------------------------- /lib/webmushra/misc/FilePlayer.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function FilePlayer(_audioContext, _bufferSize, _stimuli, _errorHandler, _language, _localizer, _hideProgressBar) { 9 | this.audioContext = _audioContext; 10 | this.bufferSize = _bufferSize; 11 | this.stimuli = _stimuli; 12 | this.errorHandler = _errorHandler; 13 | this.language = _language; 14 | this.localizer = _localizer; 15 | this.genericAudioControl = new GenericAudioControl(this.audioContext, this.bufferSize, this.stimuli, this.errorHandler); 16 | this.progressBars = []; 17 | this.hideProgressBar = _hideProgressBar; 18 | 19 | this.genericAudioControl.addEventListener((function (_event) { 20 | if (_event.name == 'processUpdate') { 21 | $("#FilePlayer_progressbar_"+_event.index).progressbar('option', 'value', (_event.currentSample/(_event.numSamples-1)) * 100); 22 | } 23 | }).bind(this)); 24 | 25 | this.hooks = []; 26 | 27 | } 28 | 29 | FilePlayer.prototype.init = function() { 30 | this.genericAudioControl.initAudio(); 31 | if (this.hideProgressBar != true) { 32 | for (var i = 0; i < this.stimuli.length; ++i) { 33 | TolitoProgressBar(this.progressBars[i].attr('id')).setOuterTheme('a').setInnerTheme('b').isMini(true).setMax(100).setStartFrom(0).setInterval(0).showCounter(false).build(); 34 | } 35 | } 36 | }; 37 | 38 | FilePlayer.prototype.free = function() { 39 | this.genericAudioControl.freeAudio(); 40 | }; 41 | 42 | 43 | FilePlayer.prototype.load = function() { 44 | }; 45 | 46 | 47 | FilePlayer.prototype.renderElement = function(_parent, _i) { 48 | var buttonPlay = $(''); 49 | buttonPlay.bind( "click", (function(event, ui) { 50 | this.genericAudioControl.play(parseInt(event.target.name)); 51 | }).bind(this)); 52 | 53 | var buttonPause = $(''); 54 | buttonPause.bind( "click", (function(event, ui) { 55 | this.genericAudioControl.pause(); 56 | }).bind(this)); 57 | 58 | if (this.hideProgressBar != true) { 59 | var id = "FilePlayer_progressbar_" + _i; 60 | var progressBar = $('
'); 61 | this.progressBars[_i] = progressBar; 62 | } 63 | this.hooks[_i] = $(''); 64 | _parent.append( 65 | $('
').append( 66 | $('').append( 67 | $('').append(buttonPlay), 68 | $('').append(buttonPause), 69 | $('').append(progressBar), 70 | this.hooks[_i] 71 | ) 72 | ) 73 | ); 74 | }; 75 | 76 | FilePlayer.prototype.render = function(_parent) { 77 | 78 | var table = $('
'); 79 | _parent.append(table); 80 | 81 | for (var i = 0; i < this.stimuli.length; ++i) { 82 | var tr = $(''); 83 | table.append(tr); 84 | 85 | var td = $(''); 86 | 87 | this.renderElement(td, i); 88 | 89 | 90 | tr.append(td); 91 | 92 | } 93 | }; 94 | 95 | FilePlayer.prototype.getHook = function(_index) { 96 | return this.hooks[_index]; 97 | }; 98 | 99 | FilePlayer.prototype.getStimuli = function() { 100 | return this.stimuli; 101 | }; 102 | 103 | -------------------------------------------------------------------------------- /lib/webmushra/misc/LikertScale.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function LikertScale(_responseConfig, _prefix, _initDisabled, _callback) { 9 | this.responseConfig = _responseConfig; 10 | this.prefix = _prefix; 11 | this.initDisabled = _initDisabled; 12 | this.callback = _callback; 13 | this.group = null; 14 | this.elements = null; 15 | } 16 | 17 | LikertScale.prototype.enable = function () { 18 | $('input[name='+this.prefix+'_response]').checkboxradio('enable'); 19 | } 20 | 21 | 22 | LikertScale.prototype.render = function (_parent) { 23 | 24 | this.group = $("
"); 25 | _parent.append(this.group); 26 | 27 | this.elements = []; 28 | var i; 29 | if(this.responseConfig != null){ 30 | for (i = 0; i < this.responseConfig.length; ++i) { 31 | var responseValueConfig = this.responseConfig[i]; 32 | var img = ""; 33 | if (responseValueConfig.img) { 34 | img = "
"; 35 | } 36 | var element = $(" \ 37 | \ 38 | "); 39 | this.elements[this.elements.length] = element; 40 | this.group.append(element); 41 | } 42 | 43 | this.group.change((function() { 44 | 45 | var set = false; 46 | for (i = 0; i < this.elements.length; ++i) { 47 | if (set === true) { 48 | $("#"+this.prefix+"_response_img_"+i).attr("src", this.responseConfig[i].img); 49 | } else { 50 | if ($("#"+this.prefix+"_response_"+i+":checked").val()) { 51 | set = true; 52 | $("#"+this.prefix+"_response_img_"+i).attr("src", this.responseConfig[i].imgSelected); 53 | } else { 54 | $("#"+this.prefix+"_response_img_"+i).attr("src", this.responseConfig[i].imgHigherResponseSelected); 55 | } 56 | } 57 | } 58 | 59 | if (this.callback) { 60 | this.callback(this.prefix); 61 | } 62 | }).bind(this)); 63 | } 64 | if (this.initDisabled) { 65 | this.group.children().attr('disabled', 'disabled'); 66 | } 67 | 68 | }; 69 | 70 | -------------------------------------------------------------------------------- /lib/webmushra/misc/Localizer.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | function Localizer() { 4 | /* [lang_code][id] => [string] */ 5 | this.nlsFragments = new Object(); 6 | } 7 | 8 | 9 | /** 10 | * @param _nls_fragments 11 | */ 12 | Localizer.prototype.initializeNLSFragments = function(_nlsFragments) { 13 | this.nlsFragments = _nlsFragments; 14 | }; 15 | 16 | 17 | /** 18 | * @param _languageCode [ISO 639-1] 19 | */ 20 | Localizer.prototype.addFragment = function(_languageCode, _id, _fragment) { 21 | if (!this.nlsFragments[_languageCode]) { 22 | this.nlsFragments[_languageCode] = new Object(); 23 | } 24 | this.nlsFragments[_languageCode][_id] = _fragment; 25 | }; 26 | 27 | 28 | Localizer.prototype.getFragment = function(_languageCode, _id) { 29 | return this.nlsFragments[_languageCode][_id]; 30 | }; 31 | 32 | /** 33 | * Checks whether every string is localized. 34 | * @return true, if 35 | */ 36 | Localizer.prototype.checkLocalization = function() { 37 | var numFragments = null; 38 | for (var element in this.nlsFragments) { 39 | if (numFragments == null) { 40 | numFragments = element.length; 41 | } 42 | 43 | if (numFragments != element.length) { 44 | return false; 45 | } 46 | } 47 | return true; 48 | }; -------------------------------------------------------------------------------- /lib/webmushra/misc/MushraValidator.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function MushraValidator(_errorHandler) { 9 | this.errorHandler = _errorHandler; 10 | } 11 | 12 | /** 13 | * Audio device and files must have same sample rate. 14 | */ 15 | MushraValidator.prototype.checkSamplerate = function(_sampleRateDevice, _stimulus) { 16 | if (_sampleRateDevice != _stimulus.getAudioBuffer().sampleRate) { 17 | this.errorHandler.sendError("Sample rate of device and stimulus (" + _stimulus.getId() + " is different."); 18 | return false; 19 | } 20 | return true; 21 | }; 22 | 23 | 24 | /** 25 | * Audio device must have enough channels 26 | */ 27 | MushraValidator.prototype.checkNumChannels = function(_audioContext, _stimulus) { 28 | if (_audioContext.destination.channelCount < _stimulus.getAudioBuffer().numberOfChannels) { 29 | this.errorHandler.sendError("Audio device has not enough channels (" + _audioContext.destination.channelCount + ") for playing back stimulus " + _stimulus.getId() + " (" + _stimulus.getAudioBuffer().numberOfChannels + ")."); 30 | return false; 31 | } 32 | return true; 33 | }; 34 | 35 | /** 36 | * Number of conditions must be no more than 12. 37 | */ 38 | MushraValidator.prototype.checkNumConditions = function(_conditions) { 39 | if (_conditions.length > 12) { 40 | this.errorHandler.sendError("Number of conditions must be no more than 12."); 41 | return false; 42 | } 43 | return true; 44 | }; 45 | 46 | /** 47 | * Duration of stimulus must not exceed 12s. 48 | */ 49 | MushraValidator.prototype.checkStimulusDuration = function(_stimulus) { 50 | if (_stimulus.getAudioBuffer().duration > 12.0) { 51 | this.errorHandler.sendError("Duration of stimulus (" + _stimulus.getId() + ") must not exceed 12s."); 52 | return false; 53 | } 54 | return true; 55 | }; 56 | 57 | MushraValidator.prototype.checkConditionConsistency = function(_reference, _conditions) { 58 | var sampleRate = _reference.getAudioBuffer().sampleRate; 59 | var length = _reference.getAudioBuffer().length; 60 | var numberOfChannels = _reference.getAudioBuffer().numberOfChannels; 61 | var noError = true; 62 | for (var i = 0; i < _conditions.length; ++i) { 63 | if (sampleRate != _conditions[i].getAudioBuffer().sampleRate) { 64 | this.errorHandler.sendError("Reference/Conditions have different sample rates."); 65 | noError = false; 66 | } 67 | // length 68 | if (length != _conditions[i].getAudioBuffer().length) { 69 | this.errorHandler.sendError("Reference/Conditions have different (sample) lengths."); 70 | noError = false; 71 | } 72 | // numberOfChannels 73 | if (numberOfChannels != _conditions[i].getAudioBuffer().numberOfChannels) { 74 | this.errorHandler.sendError("Reference/Conditions have different numbers of channels."); 75 | noError = false; 76 | } 77 | } 78 | return noError; 79 | }; 80 | -------------------------------------------------------------------------------- /lib/webmushra/misc/Shuffle.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | // Durstenfeld shuffle (https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm) 9 | function shuffle(_array) { 10 | for (var i = _array.length - 1; i > 0; i--) { 11 | var j = Math.floor(Math.random() * (i + 1)); 12 | var temp = _array[i]; 13 | _array[i] = _array[j]; 14 | _array[j] = temp; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/webmushra/nls/nls.js: -------------------------------------------------------------------------------- 1 | nls['en'] = new Object(); 2 | nls['de'] = new Object(); 3 | nls['fr'] = new Object(); 4 | nls['es'] = new Object(); 5 | 6 | // Buttons 7 | nls['en']['nextButton'] = "Next"; 8 | nls['en']['previousButton'] = "Previous"; 9 | nls['en']['playButton'] = "Play"; 10 | nls['en']['stopButton'] = "Stop"; 11 | nls['en']['pauseButton'] = "Pause"; 12 | nls['en']['sendButton'] = "Send Results"; 13 | 14 | nls['de']['nextButton'] = "Nächste Seite"; 15 | nls['de']['previousButton'] = "Vorherige Seite"; 16 | nls['de']['playButton'] = "Start"; 17 | nls['de']['stopButton'] = "Stopp"; 18 | nls['de']['pauseButton'] = "Pause"; 19 | nls['de']['sendButton'] = "Ergebnisse senden"; 20 | 21 | nls['fr']['nextButton'] = "Suivant"; 22 | nls['fr']['previousButton'] = "Précédent"; 23 | nls['fr']['playButton'] = "Play"; 24 | nls['fr']['stopButton'] = "Stop"; 25 | nls['fr']['pauseButton'] = "Pause"; 26 | nls['fr']['sendButton'] = "Envoyer les résultats"; 27 | 28 | nls['es']['nextButton'] = "Siguiente"; 29 | nls['es']['previousButton'] = "Anterior"; 30 | nls['es']['playButton'] = "Reproducir"; 31 | nls['es']['stopButton'] = "Detener"; 32 | nls['es']['pauseButton'] = "Pausa"; 33 | nls['es']['sendButton'] = "Enviar resultados"; 34 | 35 | // captions MUSHRA 36 | 37 | nls['en']['excellent'] = "Excellent"; 38 | nls['en']['good'] = "Good"; 39 | nls['en']['fair'] = "Fair"; 40 | nls['en']['poor'] = "Poor"; 41 | nls['en']['bad'] = "Bad"; 42 | nls['en']['reference'] = "Reference"; 43 | nls['en']['cond'] = "Cond."; 44 | nls['en']['35'] = "Anchor35"; 45 | nls['en']['75'] = "Anchor75"; 46 | 47 | nls['de']['excellent'] = "Excellent"; 48 | nls['de']['good'] = "Good"; 49 | nls['de']['fair'] = "Fair"; 50 | nls['de']['poor'] = "Poor"; 51 | nls['de']['bad'] = "Bad"; 52 | nls['de']['reference'] = "Reference"; 53 | nls['de']['cond'] = "Cond."; 54 | nls['de']['35'] = "Anchor35"; 55 | nls['de']['75'] = "Anchor75"; 56 | 57 | nls['fr']['excellent'] = "Excellent"; 58 | nls['fr']['good'] = "Bien"; 59 | nls['fr']['fair'] = "Correct"; 60 | nls['fr']['poor'] = "Faible"; 61 | nls['fr']['bad'] = "Mauvais"; 62 | nls['fr']['reference'] = "Référence"; 63 | nls['fr']['cond'] = "Cond."; 64 | nls['fr']['35'] = "Ancre35"; 65 | nls['fr']['75'] = "Ancre75"; 66 | 67 | nls['es']['excellent'] = "Excelente"; 68 | nls['es']['good'] = "Bien"; 69 | nls['es']['fair'] = "Regular"; 70 | nls['es']['poor'] = "Pobre"; 71 | nls['es']['bad'] = "Malo"; 72 | nls['es']['reference'] = "Referencia"; 73 | nls['es']['cond'] = "Estado"; 74 | nls['es']['35'] = "Ancla35"; 75 | nls['es']['75'] = "Ancla75"; 76 | 77 | // captions BS1116 78 | 79 | nls['en']['imperceptible'] = "Imperceptible"; 80 | nls['en']['perceptible'] = "Perceptible, but not annoying"; 81 | nls['en']['slightly'] = "Slightly annoying"; 82 | nls['en']['annoying'] = "Annoying"; 83 | nls['en']['very'] = "Very annoying"; 84 | 85 | nls['de']['imperceptible'] = "Imperceptible"; 86 | nls['de']['perceptible'] = "Perceptible, but not annoying"; 87 | nls['de']['slightly'] = "Slightly annoying"; 88 | nls['de']['annoying'] = "Annoying"; 89 | nls['de']['very'] = "Very annoying"; 90 | 91 | nls['fr']['imperceptible'] = "Dégradation imperceptible"; 92 | nls['fr']['perceptible'] = "Perceptible, mais non gênante"; 93 | nls['fr']['slightly'] = "Légèrement gênante"; 94 | nls['fr']['annoying'] = "Dégradation gênante"; 95 | nls['fr']['very'] = "Dégradation très gênante"; 96 | 97 | nls['es']['imperceptible'] = "Imperceptible"; 98 | nls['es']['perceptible'] = "Perceptible, pero no molesto"; 99 | nls['es']['slightly'] = "Ligeramente molesto"; 100 | nls['es']['annoying'] = "Molesto"; 101 | nls['es']['very'] = "Muy molesto"; 102 | 103 | 104 | // captions Paired Comparison AB/ABN 105 | nls['en']['quest'] = "Which item is the reference?"; 106 | nls['de']['quest'] = "Welches Stück ist die Referenz?"; 107 | nls['fr']['quest'] = "Quel item est la référence?"; 108 | nls['es']['quest'] = "¿Cuál es la referencia?"; 109 | 110 | // captions finishPage 111 | nls['en']['results'] = "Your results:"; 112 | nls['de']['results'] = "Die Ergebnisse:"; 113 | nls['fr']['results'] = "Vos résultats:"; 114 | nls['es']['results'] = "Sus resultados:"; 115 | nls['en']['attending'] = "Thank you for your participation!"; 116 | nls['de']['attending'] = "Vielen Dank für die Teilnahme!"; 117 | nls['fr']['attending'] = "Merci pour votre participation!"; 118 | nls['es']['attending'] = "Gracias por participar!"; 119 | -------------------------------------------------------------------------------- /lib/webmushra/pages/BS1116PageManager.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function BS1116PageManager() { 9 | 10 | } 11 | 12 | BS1116PageManager.prototype.createPages = function (_pageManager, _pageTemplateRenderer, _pageConfig, _audioContext, _bufferSize, _audioFileLoader, _session, _errorHandler, _language) { 13 | this.conditions = []; 14 | for (var key in _pageConfig.stimuli) { 15 | this.conditions[this.conditions.length] = new Stimulus(key, _pageConfig.stimuli[key]); 16 | } 17 | this.reference = new Stimulus("reference", _pageConfig.reference); 18 | shuffle(this.conditions); 19 | 20 | for (var i = 0; i < this.conditions.length; ++i) { 21 | var page = new BS1116Page(this.reference, this.conditions[i], _pageManager, _pageTemplateRenderer, _audioContext, _bufferSize, _audioFileLoader, _session, _pageConfig, _errorHandler, _language); 22 | _pageManager.addPage(page); 23 | } 24 | }; 25 | -------------------------------------------------------------------------------- /lib/webmushra/pages/ConsentPage.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | /** 9 | * @class ConsentPage 10 | * @property {string} title the page title 11 | * @property {string} the page content 12 | */ 13 | function ConsentPage(_pageManager, _pageTemplateRenderer, _pageConfig) { 14 | this.pageManager = _pageManager; 15 | this.title = _pageConfig.name; 16 | this.content = _pageConfig.content; 17 | this.language = _pageConfig.language; 18 | this.mustConsent = _pageConfig.mustConsent; 19 | this.pageTemplateRenderer = _pageTemplateRenderer; 20 | } 21 | 22 | /** 23 | * Loads the page 24 | * @memberof ConsentPage 25 | */ 26 | ConsentPage.prototype.load = function () { 27 | if (this.mustConsent == true){ 28 | this.pageTemplateRenderer.lockNextButton(); 29 | } 30 | } 31 | 32 | /** 33 | * Returns the page title. 34 | * @memberof ConsentPage 35 | * @returns {string} 36 | */ 37 | ConsentPage.prototype.getName = function () { 38 | return this.title; 39 | }; 40 | 41 | /** 42 | * Renders the page 43 | * @memberof ConsentPage 44 | */ 45 | ConsentPage.prototype.render = function (_parent) { 46 | _parent.append(this.content); 47 | 48 | var radioChoice = $("
\ 49 | \ 50 | \ 51 | \ 52 | \ 53 |
"); 54 | radioChoice.find("input[type='radio']").bind("change", (function(){ 55 | if ($('#radio-choice-accept')[0].checked) { 56 | this.pageTemplateRenderer.unlockNextButton(); 57 | } else { 58 | this.pageTemplateRenderer.lockNextButton(); 59 | } 60 | }).bind(this)); 61 | _parent.append(radioChoice); 62 | return; 63 | }; 64 | 65 | /** 66 | * Saves the page 67 | * @memberof ConsentPage 68 | */ 69 | ConsentPage.prototype.save = function () { 70 | }; 71 | -------------------------------------------------------------------------------- /lib/webmushra/pages/GenericPage.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | /** 9 | * @class GenericPage 10 | * @property {string} title the page title 11 | * @property {string} the page content 12 | */ 13 | function GenericPage(_pageManager, _pageConfig) { 14 | this.pageManager = _pageManager; 15 | this.title = _pageConfig.name; 16 | this.content = _pageConfig.content; 17 | this.language = _pageConfig.language; 18 | } 19 | 20 | /** 21 | * Returns the page title. 22 | * @memberof GenericPage 23 | * @returns {string} 24 | */ 25 | GenericPage.prototype.getName = function () { 26 | return this.title; 27 | }; 28 | 29 | /** 30 | * Renders the page 31 | * @memberof GenericPage 32 | */ 33 | GenericPage.prototype.render = function (_parent) { 34 | _parent.append(this.content); 35 | return; 36 | }; 37 | 38 | /** 39 | * Saves the page 40 | * @memberof GenericPage 41 | */ 42 | GenericPage.prototype.save = function () { 43 | }; 44 | -------------------------------------------------------------------------------- /lib/webmushra/pages/LikertSingleStimulusPageManager.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function LikertSingleStimulusPageManager() { 9 | 10 | } 11 | 12 | LikertSingleStimulusPageManager.prototype.createPages = function (_pageManager, pageTemplateRenderer, _pageConfig, _audioContext, _bufferSize, _audioFileLoader, _session, _errorHandler, _language) { 13 | this.stimuli = []; 14 | for (var key in _pageConfig.stimuli) { 15 | this.stimuli[this.stimuli.length] = new Stimulus(key, _pageConfig.stimuli[key]); 16 | } 17 | shuffle(this.stimuli); 18 | 19 | var numStimuli = this.stimuli.length; 20 | if (_pageConfig.maxStimuli > 0) { 21 | numStimuli = Math.min(numStimuli, _pageConfig.maxStimuli); 22 | } 23 | for (var i = 0; i < numStimuli; ++i) { 24 | var page = new LikertSingleStimulusPage(_pageManager, pageTemplateRenderer, _pageConfig, _audioContext, _bufferSize, _audioFileLoader, this.stimuli[i], _session, _errorHandler, _language); 25 | _pageManager.addPage(page); 26 | } 27 | }; 28 | -------------------------------------------------------------------------------- /lib/webmushra/pages/Page.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function Page() { 9 | } 10 | 11 | /** 12 | * @return {String} Returns the name of the page. Objects of a Page class might have different names. 13 | */ 14 | Page.prototype.getName = function () { 15 | }; 16 | 17 | /** 18 | * The ini method is called before the pages are rendered. The method is called only once. 19 | * @param {Function} _callbackError The function that must be called if an error occurs. The function has one argument which is the error message. 20 | */ 21 | Page.prototype.init = function (_callbackError) { 22 | }; 23 | 24 | /** 25 | * Renders the page. This function might be called multiple times (depending on whether navigation is allowed and on the user behaviour) 26 | * @param {Object} _parent JQuery element which represent the parent DOM element where the content of the page must be stored. 27 | */ 28 | Page.prototype.render = function (_parent) { 29 | }; 30 | 31 | /** 32 | * This method is called after the page is rendered. The purpose of this method is to load default values or saved values of the input controls. 33 | */ 34 | Page.prototype.load = function () { 35 | }; 36 | 37 | /** 38 | * This method is called just before the next page is presented to the user. In case values of input controls are needed for rerendering, they must be saved within in method. 39 | */ 40 | Page.prototype.save = function () { 41 | }; 42 | 43 | /** 44 | * @param {ResponsesStorage} _reponsesStorage 45 | */ 46 | Page.prototype.store = function (_reponsesStorage) { 47 | }; 48 | -------------------------------------------------------------------------------- /lib/webmushra/pages/PairedComparisonPageManager.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function PairedComparisonPageManager() { 9 | 10 | } 11 | 12 | PairedComparisonPageManager.prototype.createPages = function (_pageManager, _pageTemplateRenderer, _pageConfig, _audioContext, _bufferSize, _audioFileLoader, _session, _errorHandler, _language) { 13 | this.conditions = []; 14 | for (var key in _pageConfig.stimuli) { 15 | this.conditions[this.conditions.length] = new Stimulus(key, _pageConfig.stimuli[key]); 16 | } 17 | this.reference = new Stimulus("reference", _pageConfig.reference); 18 | shuffle(this.conditions); 19 | 20 | for (var i = 0; i < this.conditions.length; ++i) { 21 | var page = new PairedComparisonPage(this.reference, this.conditions[i], _pageManager, _pageTemplateRenderer, _audioContext, _bufferSize, _audioFileLoader, _session, _pageConfig, _errorHandler, _language); 22 | _pageManager.addPage(page); 23 | } 24 | }; 25 | -------------------------------------------------------------------------------- /lib/webmushra/pages/VolumePage.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function VolumePage(_pageManager, _audioContext, _audioFileLoader, _pageConfig, _bufferSize, _errorHandler, _language) { 9 | this.pageManager = _pageManager; 10 | this.audioContext = _audioContext; 11 | this.audioFileLoader = _audioFileLoader; 12 | this.pageConfig = _pageConfig; 13 | this.bufferSize = _bufferSize; 14 | this.errorHandler = _errorHandler; 15 | this.language = _language; 16 | this.fpc = null; 17 | this.played = false; 18 | 19 | this.stimulus = new Stimulus("stimulus", _pageConfig.stimulus); 20 | 21 | this.audioFileLoader.addFile(this.pageConfig.stimulus, (function (_buffer, _stimulus) { _stimulus.setAudioBuffer(_buffer); }), this.stimulus); 22 | this.filePlayer = null; 23 | 24 | this.audioContext.volume = this.volume = this.pageConfig.defaultVolume; 25 | } 26 | 27 | VolumePage.prototype.init = function (_callbackError) { 28 | this.filePlayer = new FilePlayer(this.audioContext, this.bufferSize, [this.stimulus], this.errorHandler, this.language, this.pageManager.getLocalizer()); 29 | }; 30 | 31 | 32 | VolumePage.prototype.getName = function () { 33 | return this.pageConfig.name; 34 | }; 35 | 36 | VolumePage.prototype.load = function() { 37 | this.filePlayer.init(); 38 | }; 39 | 40 | VolumePage.prototype.save = function() { 41 | this.volume = this.audioContext.volume; 42 | this.filePlayer.free(); 43 | }; 44 | 45 | VolumePage.prototype.gainVolume = function(value) { 46 | this.audioContext.volume = parseInt(value, 10) / 100.0; 47 | }; 48 | 49 | 50 | VolumePage.prototype.render = function (_parent) { 51 | var content = $("

" + this.pageConfig.content + "

"); 52 | var slider = $("
"); 53 | slider.append( 54 | $('').append( 55 | $('').append( 56 | $('') 57 | ) 58 | ) 59 | ); 60 | _parent.append(content); 61 | this.filePlayer.render(_parent); 62 | _parent.append(slider); 63 | }; 64 | -------------------------------------------------------------------------------- /lib/webmushra/spatial/objects/LocalizationObject.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function LocalizationObject(_objConfig) { 9 | this.objConfig = _objConfig; 10 | 11 | this.material = new THREE.MeshPhongMaterial({ 12 | color : _objConfig.color, 13 | ambient : 0x330000, 14 | emmissive : 0x222222, 15 | }); 16 | this.geometry = new THREE.SphereGeometry(_objConfig.size, 34, 30); 17 | this.mesh = new THREE.Mesh(this.geometry, this.material); 18 | this.mesh.position.x = _objConfig.position[0]; 19 | this.mesh.position.y = _objConfig.position[1]; 20 | this.mesh.position.z = _objConfig.position[2]; 21 | } 22 | 23 | LocalizationObject.prototype.init = function(_scene) { 24 | _scene.add(this.mesh); 25 | }; 26 | 27 | LocalizationObject.prototype.eventOnMouseUp = function(_event, _x, _y, _z) { 28 | }; 29 | 30 | LocalizationObject.prototype.eventOnMouseDown = function(_event, _x, _y, _z) { 31 | if (_x != null) { 32 | this.mesh.position.x = _x; 33 | } 34 | if (_y != null) { 35 | this.mesh.position.y = _y; 36 | } 37 | if (_z != null) { 38 | this.mesh.position.z = _z; 39 | } 40 | }; 41 | 42 | LocalizationObject.prototype.render = function() { 43 | }; 44 | 45 | LocalizationObject.prototype.getCenterPosition = function() { 46 | return [this.mesh.position.x, this.mesh.position.y, this.mesh.position.z]; 47 | }; 48 | 49 | 50 | /** 51 | * Returns a hash map with values to save. 52 | */ 53 | LocalizationObject.prototype.storeValues = function(_trial, _session, _trial_id) { 54 | if (_trial === null) { 55 | _trial = new Trial(); 56 | _trial.type = this.objConfig.type; 57 | _trial.id = _trial_id; 58 | _session.trials[_session.trials.length] = _trial; 59 | } 60 | var rating = new SpatialLocalizationRating(); 61 | rating.name = this.objConfig.name; 62 | rating.stimulus = this.objConfig.stimulus; 63 | rating.position = []; 64 | rating.position[0] = this.mesh.position.x; 65 | rating.position[1] = this.mesh.position.y; 66 | rating.position[2] = this.mesh.position.z; 67 | 68 | 69 | _trial.responses[_trial.responses.length] = rating; 70 | }; 71 | 72 | 73 | -------------------------------------------------------------------------------- /lib/webmushra/spatial/objects/SpatialObject.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | function SpatialObject(_scene) { 9 | this.scene = _scene; 10 | } 11 | 12 | SpatialObject.prototype.getName = function() { 13 | return "template"; 14 | }; 15 | 16 | 17 | SpatialObject.prototype.init = function() { 18 | }; 19 | 20 | SpatialObject.prototype.eventOnMouseUp = function(_event) { 21 | }; 22 | 23 | SpatialObject.prototype.eventOnMouseDown = function(_event) { 24 | }; 25 | 26 | 27 | SpatialObject.prototype.render = function() { 28 | }; 29 | 30 | /** 31 | * Returns a hash map with values to save. 32 | */ 33 | SpatialObject.prototype.storeValues = function(_trial, _session, _trial_id) { 34 | }; 35 | 36 | 37 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webMUSHRA", 3 | "version": "1.4.3", 4 | "description": "Web Audio API based Listening Experiment Framework", 5 | "author": "International Audio Laboratories Erlangen", 6 | "repository": "https://github.com/audiolabs/webMUSHRA", 7 | "main": "Gruntfile.js", 8 | "directories": { 9 | "test": "test" 10 | }, 11 | "scripts": { 12 | "test": "grunt test", 13 | "start": "" 14 | }, 15 | "keywords": [ 16 | "MUSHRA" 17 | ], 18 | "devDependencies": { 19 | "grunt": "^1.5.3", 20 | "grunt-contrib-compress": "^1.4.1", 21 | "grunt-contrib-concat": "^1.0.1", 22 | "grunt-contrib-jshint": "^1.1.0", 23 | "grunt-contrib-qunit": "^1.3.0", 24 | "grunt-contrib-uglify": "^2.2.0", 25 | "grunt-jsdoc": "^2.1.0", 26 | "grunt-processhtml": "^0.4.1", 27 | "jsdoc": "^3.4.3" 28 | }, 29 | "license": "SEE LICENSE IN LICENSE.txt" 30 | } 31 | -------------------------------------------------------------------------------- /res/spatial/carpet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/res/spatial/carpet.png -------------------------------------------------------------------------------- /res/spatial/ceiling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/res/spatial/ceiling.png -------------------------------------------------------------------------------- /res/spatial/wall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/res/spatial/wall.png -------------------------------------------------------------------------------- /results/results_will_be_added_here.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/audiolabs/webMUSHRA/b006ed592cfa4adcbda9d06ee0909af61ea2d71b/results/results_will_be_added_here.txt -------------------------------------------------------------------------------- /tests/test_yaml.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | QUnit Example 11 | 12 | 13 | 14 | 20 | 21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | 30 | 35 | 36 | 38 | 39 | 40 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /tests/tests/sampleTests.js: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | (C) Copyright AudioLabs 2017 3 | 4 | This source code is protected by copyright law and international treaties. This source code is made available to You subject to the terms and conditions of the Software License for the webMUSHRA.js Software. Said terms and conditions have been made available to You prior to Your download of this source code. By downloading this source code You agree to be bound by the above mentionend terms and conditions, which can also be found here: https://www.audiolabs-erlangen.de/resources/webMUSHRA. Any unauthorised use of this source code may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under law. 5 | 6 | **************************************************************************/ 7 | 8 | 9 | var configFile = new Array; 10 | for (i = 0; i < configs.length; i++) { 11 | configFile[i] = '../configs/'+configs[i]+'.yaml'; 12 | } 13 | 14 | $q(function() { 15 | $q('#testframe0').load(function() { 16 | YAML.load(configFile[0], (function(result) { 17 | var config = result; 18 | $q('#testframe0').get(0).contentWindow.pageTemplateRenderer.addCallbackEventRefreshed(function() { 19 | QUnit.module("Testframe0"); 20 | QUnit.test('Check Headers', 2, function() { 21 | QUnit.strictEqual($q('#testframe0').contents().find('#header').get(0).innerHTML, config.testname, "Header Matches"); 22 | QUnit.strictEqual($q('#testframe0').contents().find('#page_header').get(0).innerHTML, config.pages[0].name, "Page Header Matches"); 23 | }); 24 | QUnit.test('Check Button Texts at Testframe0', 5, function() { 25 | 26 | QUnit.strictEqual($q('#testframe0').contents().find('#pause').get(0).innerHTML, "Pause", "Pause Button Text Matches"); 27 | QUnit.strictEqual($q('#testframe0').contents().find('#playCondition0').get(0).innerHTML, "Play", "Play Button Text Matches"); 28 | QUnit.strictEqual($q('#testframe0').contents().find('#__button_next').get(0).innerHTML, "Next", "Next Button Text Matches"); 29 | for (i = 0; i < config.pages[0].response.length; i++) { 30 | QUnit.strictEqual($q('#testframe0').contents().find('#1__response_'+i).get(0).value, config.pages[0].response[i].value, "Likert"+i+" Button Text Matches"); 31 | } 32 | }); 33 | }); 34 | })); 35 | }); 36 | 37 | $q('#testframe1').load(function(){ 38 | YAML.load(configFile[1], (function(result) { 39 | var config = result; 40 | $q('#testframe1').get(0).contentWindow.pageTemplateRenderer.addCallbackEventRefreshed(function() { 41 | QUnit.module( "Testframe1"); 42 | QUnit.test('check if name matches', 1, function() { 43 | QUnit.strictEqual($q('#testframe1').contents().find('#page_header').get(0).innerHTML, config.pages[0].name, "page_header matches"); 44 | }); 45 | }); 46 | })); 47 | }); 48 | 49 | /*}); 50 | 51 | //MORE TESTS TO COME 52 | 53 | 54 | $q('#testframe2').load(function(){ 55 | YAML.load(configFile[2], (function(result) { 56 | var config = result; 57 | $q('#testframe2').get(0).contentWindow.pageTemplateRenderer.addCallbackEventRefreshed(function() { 58 | QUnit.module( "Testframe2"); 59 | QUnit.test('check if name matches', 1, function() { 60 | QUnit.strictEqual($q('#testframe2').contents().find('#page_header').get(0).innerHTML, config.pages[0].name, "page_header matches"); 61 | }); 62 | }); 63 | })); 64 | }); 65 | 66 | 67 | 68 | */ 69 | }); --------------------------------------------------------------------------------