15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (c) 2011 The Chromium Authors. All rights reserved. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var voiceArray; 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var trials = 3; 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var resultMap = {}; 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var updateDependencyFunctions = []; 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var testRunIndex = 0; 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var emergencyStop = false; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function $(id) { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return document.getElementById(id); 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function isErrorEvent(evt) { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (evt.type == 'error' || 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) evt.type == 'interrupted' || 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) evt.type == 'cancelled'); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function logEvent(callTime, testRunName, evt) { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var elapsed = ((new Date() - callTime) / 1000).toFixed(3); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (elapsed.length < 7) { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) elapsed = ' ' + elapsed; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.log(elapsed + ' ' + testRunName + ': ' + JSON.stringify(evt)); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function logSpeakCall(utterance, options, callback) { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var optionsCopy = {}; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var key in options) { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (key != 'onEvent') { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) optionsCopy[key] = options[key]; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.log('Calling chrome.tts.speak(\'' + 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) utterance + '\', ' + 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JSON.stringify(optionsCopy) + ')'); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (callback) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.tts.speak(utterance, options, callback); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.tts.speak(utterance, options); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var tests = [ 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name: 'Baseline', 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) description: 'Ensures that the speech engine sends both start and ' + 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'end events, and establishes a baseline time to speak a ' + 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'key phrase, to compare other tests against.', 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dependencies: [], 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trials: 3, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run: function(testRunName, voiceName, callback) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var callTime = new Date(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var startTime; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var warnings = []; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var errors = []; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logSpeakCall('Alpha Bravo Charlie Delta Echo', { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceName: voiceName, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onEvent: function(evt) { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logEvent(callTime, testRunName, evt); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (isErrorEvent(evt)) { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(false, null, []); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'start') { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTime = new Date(); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (evt.charIndex != 0) { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Error: start event should have a charIndex of 0.'); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'end') { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (startTime == undefined) { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Error: no "start" event received!'); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTime = callTime; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (evt.charIndex != 30) { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Error: end event should have a charIndex of 30.'); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var endTime = new Date(); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (startTime - callTime > 1000) { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var delta = ((startTime - callTime) / 1000).toFixed(3); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) warnings.push('Note: Delay of ' + delta + 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' before speech started. ' + 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'Less than 1.0 s latency is recommended.'); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var delta = (endTime - startTime) / 1000; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delta < 1.0) { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) warnings.push('Warning: Default speech rate seems too fast.'); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (delta > 3.0) { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) warnings.push('Warning: Default speech rate seems too slow.'); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(errors.length == 0, delta, warnings.concat(errors)); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name: 'Fast', 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) description: 'Speaks twice as fast and compares the time to the baseline.', 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dependencies: ['Baseline'], 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trials: 3, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run: function(testRunName, voiceName, callback) { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var callTime = new Date(); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var startTime; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var errors = []; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logSpeakCall('Alpha Bravo Charlie Delta Echo', { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceName: voiceName, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rate: 2.0, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onEvent: function(evt) { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logEvent(callTime, testRunName, evt); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (isErrorEvent(evt)) { 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(false, null, []); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'start') { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTime = new Date(); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'end') { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (startTime == undefined) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTime = callTime; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var endTime = new Date(); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var delta = (endTime - startTime) / 1000; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var relative = delta / resultMap['Baseline']; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (relative < 0.35) { 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('2x speech rate seems too fast.'); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (relative > 0.65) { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('2x speech rate seems too slow.'); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(errors.length == 0, delta, errors); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name: 'Slow', 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) description: 'Speaks twice as slow and compares the time to the baseline.', 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dependencies: ['Baseline'], 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trials: 3, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run: function(testRunName, voiceName, callback) { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var callTime = new Date(); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var startTime; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var errors = []; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logSpeakCall('Alpha Bravo Charlie Delta Echo', { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceName: voiceName, 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rate: 0.5, 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onEvent: function(evt) { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logEvent(callTime, testRunName, evt); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (isErrorEvent(evt)) { 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(false, null, []); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'start') { 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTime = new Date(); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'end') { 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (startTime == undefined) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTime = callTime; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var endTime = new Date(); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var delta = (endTime - startTime) / 1000; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var relative = delta / resultMap['Baseline']; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (relative < 1.6) { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Half-speed speech rate seems too fast.'); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (relative > 2.4) { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Half-speed speech rate seems too slow.'); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(errors.length == 0, delta, errors); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name: 'Interrupt and restart', 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) description: 'Interrupts partway through a long sentence and then ' + 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'the baseline utterance, to make sure that speech after ' + 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'an interruption works correctly.', 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dependencies: ['Baseline'], 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trials: 1, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run: function(testRunName, voiceName, callback) { 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var callTime = new Date(); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var startTime; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var errors = []; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logSpeakCall('When in the course of human events it becomes ' + 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'necessary for one people to dissolve the political ' + 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'bands which have connected them ', { 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceName: voiceName, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onEvent: function(evt) { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logEvent(callTime, testRunName, evt); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window.setTimeout(function() { 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logSpeakCall('Alpha Bravo Charlie Delta Echo', { 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceName: voiceName, 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onEvent: function(evt) { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logEvent(callTime, testRunName, evt); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (isErrorEvent(evt)) { 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(false, null, []); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'start') { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTime = new Date(); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'end') { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (startTime == undefined) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTime = callTime; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var endTime = new Date(); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var delta = (endTime - startTime) / 1000; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var relative = delta / resultMap['Baseline']; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (relative < 0.9) { 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Interrupting speech seems too short.'); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (relative > 1.1) { 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Interrupting speech seems too long.'); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(errors.length == 0, delta, errors); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4000); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name: 'Low volume', 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) description: '<b>Manual</b> test - verify that the volume is lower.', 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dependencies: [], 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trials: 1, 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run: function(testRunName, voiceName, callback) { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var callTime = new Date(); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logSpeakCall('Alpha Bravo Charlie Delta Echo', { 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceName: voiceName, 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) volume: 0.5, 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onEvent: function(evt) { 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logEvent(callTime, testRunName, evt); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (isErrorEvent(evt)) { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(false, null, []); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'end') { 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(true, null, []); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name: 'High pitch', 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) description: '<b>Manual</b> test - verify that the pitch is ' + 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'moderately higher, but quite understandable.', 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dependencies: [], 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trials: 1, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run: function(testRunName, voiceName, callback) { 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var callTime = new Date(); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logSpeakCall('Alpha Bravo Charlie Delta Echo', { 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceName: voiceName, 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pitch: 1.2, 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onEvent: function(evt) { 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logEvent(callTime, testRunName, evt); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (isErrorEvent(evt)) { 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(false, null, []); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'end') { 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(true, null, []); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name: 'Low pitch', 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) description: '<b>Manual</b> test - verify that the pitch is ' + 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'moderately lower, but quite understandable.', 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dependencies: [], 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trials: 1, 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run: function(testRunName, voiceName, callback) { 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var callTime = new Date(); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logSpeakCall('Alpha Bravo Charlie Delta Echo', { 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceName: voiceName, 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pitch: 0.8, 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onEvent: function(evt) { 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logEvent(callTime, testRunName, evt); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (isErrorEvent(evt)) { 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(false, null, []); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'end') { 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(true, null, []); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name: 'Word and sentence callbacks', 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) description: 'Checks to see if proper word and sentence callbacks ' + 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'are received.', 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dependencies: ['Baseline'], 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trials: 1, 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run: function(testRunName, voiceName, callback) { 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var callTime = new Date(); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var startTime; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var errors = []; 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var wordExpected = [{min: 5, max: 6}, 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {min: 11, max: 12}, 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {min: 19, max: 20}, 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {min: 25, max: 26}, 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {min: 30, max: 32}, 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {min: 37, max: 38}, 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {min: 43, max: 44}, 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {min: 51, max: 52}, 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {min: 57, max: 58}]; 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var sentenceExpected = [{min: 30, max: 32}] 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var wordCount = 0; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var sentenceCount = 0; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var lastWordTime = callTime; 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var lastSentenceTime = callTime; 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var avgWordTime = resultMap['Baseline'] / 5; 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logSpeakCall('Alpha Bravo Charlie Delta Echo. ' + 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'Alpha Bravo Charlie Delta Echo.', { 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceName: voiceName, 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onEvent: function(evt) { 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logEvent(callTime, testRunName, evt); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (isErrorEvent(evt)) { 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(false, null, []); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'start') { 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTime = new Date(); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lastWordTime = startTime; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lastSentenceTime = startTime; 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'word') { 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (evt.charIndex > 0 && evt.charIndex < 62) { 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var min = wordExpected[wordCount].min; 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var max = wordExpected[wordCount].max; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (evt.charIndex < min || evt.charIndex > max) { 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Got word at charIndex ' + evt.charIndex + ', ' + 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'was expecting next word callback charIndex ' + 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'in the range ' + min + ':' + max + '.'); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (wordCount != 4) { 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var delta = (new Date() - lastWordTime) / 1000; 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delta < 0.6 * avgWordTime) { 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Word at charIndex ' + evt.charIndex + 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' came after only ' + delta.toFixed(3) + 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' s, which seems too short.'); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (delta > 1.3 * avgWordTime) { 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Word at charIndex ' + evt.charIndex + 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' came after ' + delta.toFixed(3) + 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' s, which seems too long.'); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wordCount++; 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lastWordTime = new Date(); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'sentence') { 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (evt.charIndex > 0 && evt.charIndex < 62) { 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var min = sentenceExpected[sentenceCount].min; 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var max = sentenceExpected[sentenceCount].max; 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (evt.charIndex < min || evt.charIndex > max) { 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Got sentence at charIndex ' + evt.charIndex + 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ', was expecting next callback charIndex ' + 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'in the range ' + min + ':' + max + '.'); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var delta = (new Date() - lastSentenceTime) / 1000; 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delta < 0.75 * resultMap['Baseline']) { 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Sentence at charIndex ' + evt.charIndex + 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' came after only ' + delta.toFixed(3) + 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' s, which seems too short.'); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (delta > 1.25 * resultMap['Baseline']) { 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Sentence at charIndex ' + evt.charIndex + 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' came after ' + delta.toFixed(3) + 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' s, which seems too long.'); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sentenceCount++; 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lastSentenceTime = new Date(); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'end') { 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (wordCount == 0) { 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Didn\'t get any word callbacks.'); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (wordCount < wordExpected.length) { 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Not enough word callbacks.'); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (wordCount > wordExpected.length) { 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Too many word callbacks.'); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sentenceCount == 0) { 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Didn\'t get any sentence callbacks.'); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (sentenceCount < sentenceExpected.length) { 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Not enough sentence callbacks.'); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (sentenceCount > sentenceExpected.length) { 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Too many sentence callbacks.'); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (startTime == undefined) { 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Error: no "start" event received!'); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTime = callTime; 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var endTime = new Date(); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var delta = (endTime - startTime) / 1000; 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delta < 2.5) { 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Default speech rate seems too fast.'); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (delta > 7.0) { 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Default speech rate seems too slow.'); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(errors.length == 0, delta, errors); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name: 'Baseline Queueing Test', 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) description: 'Establishes a baseline time to speak a ' + 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'sequence of three enqueued phrases, to compare ' + 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'other tests against.', 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dependencies: [], 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trials: 3, 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run: function(testRunName, voiceName, callback) { 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var callTime = new Date(); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var startTime; 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var errors = []; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logSpeakCall('Alpha Alpha', { 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceName: voiceName, 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onEvent: function(evt) { 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logEvent(callTime, testRunName, evt); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (isErrorEvent(evt)) { 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(false, null, []); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'start') { 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTime = new Date(); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logSpeakCall('Bravo bravo.', { 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceName: voiceName, 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enqueue: true, 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onEvent: function(evt) { 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logEvent(callTime, testRunName, evt); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (isErrorEvent(evt)) { 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(false, null, []); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logSpeakCall('Charlie charlie', { 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceName: voiceName, 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enqueue: true, 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onEvent: function(evt) { 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logEvent(callTime, testRunName, evt); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (isErrorEvent(evt)) { 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(false, null, []); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'end') { 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (startTime == undefined) { 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Error: no "start" event received!'); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTime = callTime; 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var endTime = new Date(); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var delta = (endTime - startTime) / 1000; 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(errors.length == 0, delta, errors); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name: 'Interruption with Queueing', 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) description: 'Queue a sequence of three utterances, then before they ' + 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'are finished, interrupt and queue a sequence of three ' + 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'more utterances. Make sure that interrupting and ' + 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'cancelling the previous utterances doesn\'t interfere ' + 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'with the interrupting utterances.', 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dependencies: ['Baseline Queueing Test'], 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trials: 1, 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run: function(testRunName, voiceName, callback) { 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var callTime = new Date(); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var startTime; 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var errors = []; 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logSpeakCall('Just when I\'m about to say something interesting,', { 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceName: voiceName 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logSpeakCall('it seems that I always get interrupted.', { 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceName: voiceName, 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enqueue: true, 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logSpeakCall('How rude! Will you ever let me finish?', { 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceName: voiceName, 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enqueue: true, 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window.setTimeout(function() { 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logSpeakCall('Alpha Alpha', { 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceName: voiceName, 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onEvent: function(evt) { 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logEvent(callTime, testRunName, evt); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (isErrorEvent(evt)) { 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(false, null, []); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'start') { 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTime = new Date(); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logSpeakCall('Bravo bravo.', { 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceName: voiceName, 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enqueue: true, 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onEvent: function(evt) { 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logEvent(callTime, testRunName, evt); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (isErrorEvent(evt)) { 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(false, null, []); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logSpeakCall('Charlie charlie', { 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceName: voiceName, 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enqueue: true, 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onEvent: function(evt) { 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logEvent(callTime, testRunName, evt); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (isErrorEvent(evt)) { 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(false, null, []); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evt.type == 'end') { 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (startTime == undefined) { 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Error: no "start" event received!'); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTime = callTime; 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var endTime = new Date(); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var delta = (endTime - startTime) / 1000; 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var relative = delta / resultMap['Baseline Queueing Test']; 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (relative < 0.9) { 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Interrupting speech seems too short.'); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (relative > 1.1) { 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.push('Interrupting speech seems too long.'); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(errors.length == 0, delta, errors); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4000); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)]; 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function updateDependencies() { 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < updateDependencyFunctions.length; i++) { 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateDependencyFunctions[i](); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function registerTest(test) { 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var outer = document.createElement('div'); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outer.className = 'outer'; 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('container').appendChild(outer); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var buttonWrap = document.createElement('div'); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buttonWrap.className = 'buttonWrap'; 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outer.appendChild(buttonWrap); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var button = document.createElement('button'); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) button.className = 'runTestButton'; 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) button.innerText = test.name; 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buttonWrap.appendChild(button); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var busy = document.createElement('img'); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) busy.src = 'pacman.gif'; 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) busy.alt = 'Busy indicator'; 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buttonWrap.appendChild(busy); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) busy.style.visibility = 'hidden'; 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var description = document.createElement('div'); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) description.className = 'description'; 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) description.innerHTML = test.description; 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outer.appendChild(description); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var resultsWrap = document.createElement('div'); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resultsWrap.className = 'results'; 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outer.appendChild(resultsWrap); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var results = []; 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var j = 0; j < test.trials; j++) { 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var result = document.createElement('span'); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resultsWrap.appendChild(result); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) results.push(result); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var avg = document.createElement('span'); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resultsWrap.appendChild(avg); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var messagesWrap = document.createElement('div'); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) messagesWrap.className = 'messages'; 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outer.appendChild(messagesWrap); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var totalTime; 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var successCount; 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function finishTrials() { 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) busy.style.visibility = 'hidden'; 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (successCount == test.trials) { 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.log('Test succeeded.'); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var success = document.createElement('div'); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) success.className = 'success'; 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) success.innerText = 'Test succeeded.'; 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) messagesWrap.appendChild(success); 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (totalTime > 0.0) { 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var avgTime = totalTime / test.trials; 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) avg.className = 'result'; 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) avg.innerText = 'Avg: ' + avgTime.toFixed(3) + ' s'; 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resultMap[test.name] = avgTime; 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateDependencies(); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.log('Test failed.'); 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var failure = document.createElement('div'); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) failure.className = 'failure'; 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) failure.innerText = 'Test failed.'; 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) messagesWrap.appendChild(failure); 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function runTest(index, voiceName) { 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (emergencyStop) { 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) busy.style.visibility = 'hidden'; 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) emergencyStop = false; 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var testRunName = 'Test run ' + testRunIndex + ', ' + 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test.name + ', trial ' + (index+1) + ' of ' + 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test.trials; 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.log('*** Beginning ' + testRunName + 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' with voice ' + voiceName); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test.run(testRunName, voiceName, function(success, resultTime, errors) { 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (success) { 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) successCount++; 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < errors.length; i++) { 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.log(errors[i]); 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var error = document.createElement('div'); 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error.className = 'error'; 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error.innerText = errors[i]; 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) messagesWrap.appendChild(error); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (resultTime != null) { 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) results[index].className = 'result'; 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) results[index].innerText = resultTime.toFixed(3) + ' s'; 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totalTime += resultTime; 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) index++; 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (index < test.trials) { 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runTest(index, voiceName); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) finishTrials(); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) button.addEventListener('click', function() { 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var voiceIndex = $('voices').selectedIndex - 1; 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (voiceIndex < 0) { 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alert('Please select a voice first!'); 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testRunIndex++; 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) busy.style.visibility = 'visible'; 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totalTime = 0.0; 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) successCount = 0; 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) messagesWrap.innerHTML = ''; 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var voiceName = voiceArray[voiceIndex].voiceName; 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runTest(0, voiceName); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, false); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateDependencyFunctions.push(function() { 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < test.dependencies.length; i++) { 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (resultMap[test.dependencies[i]] != undefined) { 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) button.disabled = false; 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outer.className = 'outer'; 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) button.disabled = true; 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outer.className = 'outer disabled'; 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function load() { 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var voice = localStorage['voice']; 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.tts.getVoices(function(va) { 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceArray = va; 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < voiceArray.length; i++) { 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var opt = document.createElement('option'); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var name = voiceArray[i].voiceName; 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (name == localStorage['voice']) { 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt.setAttribute('selected', ''); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt.setAttribute('value', name); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt.innerText = voiceArray[i].voiceName; 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('voices').appendChild(opt); 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('voices').addEventListener('change', function() { 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var i = $('voices').selectedIndex; 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['voice'] = $('voices').item(i).value; 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, false); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('stop').addEventListener('click', stop); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < tests.length; i++) { 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registerTest(tests[i]); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateDependencies(); 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function stop() { 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.log('*** Emergency stop!'); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) emergencyStop = true; 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.tts.stop(); 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)document.addEventListener('DOMContentLoaded', load); 695