diff --git a/webspeechapi/webspeechapi-tests.ts b/webspeechapi/webspeechapi-tests.ts new file mode 100644 index 000000000..3479f897d --- /dev/null +++ b/webspeechapi/webspeechapi-tests.ts @@ -0,0 +1,152 @@ +/// + +/* +Examples from the spec: +https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#examples-recognition +*/ + +// 6.1 Speech Recognition Examples + +// Example 1 +declare var q: HTMLInputElement; +() => { + var recognition = new SpeechRecognition(); + recognition.onresult = function (event) { + if (event.results.length > 0) { + q.value = event.results[0][0].transcript; + q.form.submit(); + } + } +} + +// Example 2 +declare var select: HTMLSelectElement; +() => { + var recognition = new SpeechRecognition(); + recognition.maxAlternatives = 10; + recognition.onresult = function (event) { + if (event.results.length > 0) { + var result = event.results[0]; + for (var i = 0; i < result.length; ++i) { + var text = result[i].transcript; + select.options[i] = new Option(text, text); + } + } + } + + function start() { + select.options.length = 0; + recognition.start(); + } +} + +// Example 3 +/* +This example has some changes from the one in spec. +`var i = resultIndex` -> `var i = event.resultIndex` (Recorded as Errata 16) +`event.results.final` -> `event.results[i].final` +*/ +declare var textarea: HTMLTextAreaElement; +declare var button: HTMLButtonElement; +() => { + var recognizing: boolean; + var recognition = new SpeechRecognition(); + recognition.continuous = true; + reset(); + recognition.onend = reset; + + recognition.onresult = function (event) { + for (var i = event.resultIndex; i < event.results.length; ++i) { + if (event.results[i].final) { + textarea.value += event.results[i][0].transcript; + } + } + } + + function reset() { + recognizing = false; + button.innerHTML = "Click to Speak"; + } + + function toggleStartStop() { + if (recognizing) { + recognition.stop(); + reset(); + } else { + recognition.start(); + recognizing = true; + button.innerHTML = "Click to Stop"; + } + } +} + +// Example 4 +/* +This example has a change from the one in spec. +`recognition.interim = true;` -> `recognition.interimResults = true;` (Recorded as Errata 1) +*/ +declare var button: HTMLButtonElement; +declare var final_span: HTMLSpanElement; +declare var interim_span: HTMLSpanElement; +() => { + var recognizing: boolean; + var recognition = new SpeechRecognition(); + recognition.continuous = true; + recognition.interimResults = true; + reset(); + recognition.onend = reset; + + recognition.onresult = function (event) { + var final = ""; + var interim = ""; + for (var i = 0; i < event.results.length; ++i) { + if (event.results[i].final) { + final += event.results[i][0].transcript; + } else { + interim += event.results[i][0].transcript; + } + } + final_span.innerHTML = final; + interim_span.innerHTML = interim; + } + + function reset() { + recognizing = false; + button.innerHTML = "Click to Speak"; + } + + function toggleStartStop() { + if (recognizing) { + recognition.stop(); + reset(); + } else { + recognition.start(); + recognizing = true; + button.innerHTML = "Click to Stop"; + final_span.innerHTML = ""; + interim_span.innerHTML = ""; + } + } +} + + +// 6.2 Speech Synthesis Examples + +// Example 1 +/* +This example has a change from the one in spec. +`SpeechSynthesisUtterance('Hello World')` -> `new SpeechSynthesisUtterance('Hello World')` +*/ +() => { + speechSynthesis.speak(new SpeechSynthesisUtterance('Hello World')); +} + +//Example 2 +() => { + var u = new SpeechSynthesisUtterance(); + u.text = 'Hello World'; + u.lang = 'en-US'; + u.rate = 1.2; + u.onend = function (event) { alert('Finished in ' + event.elapsedTime + ' seconds.'); } + speechSynthesis.speak(u); +} \ No newline at end of file diff --git a/webspeechapi/webspeechapi.d.ts b/webspeechapi/webspeechapi.d.ts index a0c088bab..47e7ce561 100644 --- a/webspeechapi/webspeechapi.d.ts +++ b/webspeechapi/webspeechapi.d.ts @@ -46,12 +46,14 @@ interface SpeechRecognitionAlternative { interface SpeechRecognitionResult { length: number; item(index: number): SpeechRecognitionAlternative; + [index: number]: SpeechRecognitionAlternative; final: boolean; } interface SpeechRecognitionResultList { length: number; item(index: number): SpeechRecognitionResult; + [index: number]: SpeechRecognitionResult; } interface SpeechRecognitionEvent extends Event { @@ -75,6 +77,7 @@ declare var webkitSpeechGrammar: SpeechGrammarStatic; interface SpeechGrammarList { length: number; item(index: number): SpeechGrammar; + [index: number]: SpeechGrammar; addFromURI(src: string, weight: number): void; addFromString(string: string, weight: number): void; } @@ -102,6 +105,7 @@ interface SpeechSynthesisGetter { } interface Window extends SpeechSynthesisGetter { } +declare var speechSynthesis: SpeechSynthesis; interface SpeechSynthesisUtterance extends EventTarget { text: string; @@ -143,4 +147,5 @@ interface SpeechSynthesisVoice { interface SpeechSynthesisVoiceList { length: number; item(index: number): SpeechSynthesisVoice; + [index: number]: SpeechSynthesisVoice; } \ No newline at end of file