UNPKG

web-speech-cognitive-services

Version:

Polyfill Web Speech API with Cognitive Services Speech-to-Text service

403 lines (381 loc) 19.4 kB
import { AudioConfig, SpeechRecognizer } from 'microsoft-cognitiveservices-speech-sdk'; import * as valibot from 'valibot'; import { InferOutput } from 'valibot'; import * as memoize_one from 'memoize-one'; type SpeechRecognitionErrorType = 'aborted' | 'audio-capture' | 'bad-grammar' | 'language-not-supported' | 'network' | 'no-speech' | 'not-allowed' | 'service-not-allowed' | 'unknown'; type SpeechRecognitionErrorEventInit = { error: SpeechRecognitionErrorType; message?: string | undefined; }; declare class SpeechRecognitionErrorEvent extends Event { #private; constructor(type: 'error', { error, message }: SpeechRecognitionErrorEventInit); get error(): SpeechRecognitionErrorType; get message(): string | undefined; get type(): 'error'; } interface FakeArrayInterface<T> { [index: number]: T | undefined; get length(): number; } declare class FakeArray<T> implements FakeArrayInterface<T> { #private; constructor(array: readonly T[]); [index: number]: T | undefined; [Symbol.iterator](): ArrayIterator<T>; get length(): number; } type SpeechRecognitionResultInit = { isFinal: boolean; results: readonly SpeechRecognitionAlternative[]; }; declare class SpeechRecognitionResult extends FakeArray<SpeechRecognitionAlternative> { #private; constructor(init: SpeechRecognitionResultInit); get isFinal(): boolean; } declare class SpeechRecognitionResultList extends FakeArray<SpeechRecognitionResult> { constructor(result: readonly SpeechRecognitionResult[]); } type SpeechRecognitionEventInit = { data?: undefined | unknown; resultIndex?: number | undefined; results?: SpeechRecognitionResultList | undefined; }; declare class SpeechRecognitionEvent<T extends 'audioend' | 'audiostart' | 'cognitiveservices' | 'end' | 'result' | 'soundend' | 'soundstart' | 'speechend' | 'speechstart' | 'start'> extends Event { #private; constructor(type: 'cognitiveservices', init: SpeechRecognitionEventInit & { data: { type: string; }; }); constructor(type: 'audioend'); constructor(type: 'audiostart'); constructor(type: 'end'); constructor(type: 'result', init: SpeechRecognitionEventInit); constructor(type: 'soundend'); constructor(type: 'soundstart'); constructor(type: 'speechend'); constructor(type: 'speechstart'); constructor(type: 'start'); get data(): unknown; get resultIndex(): number | undefined; get results(): SpeechRecognitionResultList; get type(): T; } declare class EventListenerMap<T extends string, EventMap extends { [Name in T]: unknown; }> { #private; constructor(eventTarget: EventTarget); getProperty<U extends T>(name: U): ((event: EventMap[U]) => void) | undefined; setProperty<U extends T>(name: U, value: ((event: EventMap[U]) => void) | undefined): void; } type SpeechRecognitionEventListenerMap = EventListenerMap<'audioend' | 'audiostart' | 'cognitiveservices' | 'end' | 'error' | 'result' | 'soundend' | 'soundstart' | 'speechend' | 'speechstart' | 'start', { audioend: SpeechRecognitionEvent<'audioend'>; audiostart: SpeechRecognitionEvent<'audiostart'>; cognitiveservices: SpeechRecognitionEvent<'cognitiveservices'>; end: SpeechRecognitionEvent<'end'>; error: SpeechRecognitionErrorEvent; result: SpeechRecognitionEvent<'result'>; soundend: SpeechRecognitionEvent<'soundend'>; soundstart: SpeechRecognitionEvent<'soundstart'>; speechend: SpeechRecognitionEvent<'speechend'>; speechstart: SpeechRecognitionEvent<'speechstart'>; start: SpeechRecognitionEvent<'start'>; }>; interface W3CSpeechGrammar { src: string; weight: number; } interface W3CSpeechGrammarList { readonly length: number; addFromString(string: string, weight?: number): void; addFromURI(src: string, weight?: number): void; item(index: number): W3CSpeechGrammar; [index: number]: W3CSpeechGrammar; } declare class SpeechGrammarList implements W3CSpeechGrammarList { #private; constructor(); addFromString(): void; addFromURI(): void; item(): W3CSpeechGrammar; get length(): number; [index: number]: { src: string; weight: number; }; get phrases(): readonly string[]; set phrases(value: readonly string[]); } declare const credentialsSchema: valibot.SchemaWithPipe<readonly [valibot.IntersectSchema<[valibot.UnionSchema<[valibot.ObjectSchema<{ readonly authorizationToken: valibot.StringSchema<undefined>; readonly subscriptionKey: valibot.OptionalSchema<valibot.UndefinedSchema<"\"subscriptionKey\" must be unset when \"authorizationToken\" is set.">, undefined>; }, undefined>, valibot.ObjectSchema<{ readonly authorizationToken: valibot.OptionalSchema<valibot.UndefinedSchema<"\"authorizationToken\" must be unset when \"subscriptionKey\" is set.">, undefined>; readonly subscriptionKey: valibot.StringSchema<undefined>; }, undefined>], "The object must either have either \"authorizationToken\" or \"subscriptionKey\" set, but not both.">, valibot.UnionSchema<[valibot.ObjectSchema<{ readonly customVoiceHostname: valibot.OptionalSchema<valibot.UndefinedSchema<"\"customVoiceHostname\" must be unest when \"region\" is set.">, undefined>; readonly region: valibot.StringSchema<undefined>; readonly speechRecognitionHostname: valibot.OptionalSchema<valibot.UndefinedSchema<"\"speechRecognitionHostname\" must be unest when \"region\" is set.">, undefined>; readonly speechSynthesisHostname: valibot.OptionalSchema<valibot.UndefinedSchema<"\"speechSynthesisHostname\" must be unest when \"region\" is set.">, undefined>; }, undefined>, valibot.ObjectSchema<{ readonly customVoiceHostname: valibot.OptionalSchema<valibot.UnionSchema<[valibot.StringSchema<undefined>, valibot.UndefinedSchema<undefined>], undefined>, undefined>; readonly region: valibot.OptionalSchema<valibot.UndefinedSchema<"\"region\" must be unset when \"*Hostname\" is set.">, undefined>; readonly speechRecognitionHostname: valibot.StringSchema<undefined>; readonly speechSynthesisHostname: valibot.StringSchema<undefined>; }, undefined>], "The object must either have either \"region\" or \"*Hostname\" set, but not both.">], undefined>, valibot.ReadonlyAction<({ authorizationToken: string; subscriptionKey?: undefined; } | { authorizationToken?: undefined; subscriptionKey: string; }) & ({ customVoiceHostname?: undefined; region: string; speechRecognitionHostname?: undefined; speechSynthesisHostname?: undefined; } | { customVoiceHostname?: string | undefined; region?: undefined; speechRecognitionHostname: string; speechSynthesisHostname: string; })>]>; type Credentials = InferOutput<typeof credentialsSchema>; type PatchOptionsInit = { audioConfig?: AudioConfig | undefined; credentials: (() => Credentials | Promise<Credentials>) | Credentials | Promise<Credentials>; enableTelemetry?: boolean | undefined; initialSilenceTimeout?: number | undefined; looseEvent?: boolean | undefined; looseEvents?: boolean | undefined; referenceGrammars?: readonly string[] | undefined; speechRecognitionEndpointId?: string | undefined; textNormalization?: 'display' | 'itn' | 'lexical' | 'maskeditn' | undefined; }; declare function createSpeechRecognitionPonyfill$1(options: PatchOptionsInit): { SpeechGrammarList: typeof SpeechGrammarList; SpeechRecognition: { new (): { "__#private@#continuous": boolean; "__#private@#eventListenerMap": SpeechRecognitionEventListenerMap; "__#private@#grammars": SpeechGrammarList; "__#private@#interimResults": boolean; "__#private@#lang": string; "__#private@#maxAlternatives": number; emitCognitiveServices<T extends { type: string; }>(type: string, event: T): void; get continuous(): boolean; set continuous(value: boolean); get grammars(): SpeechGrammarList; set grammars(value: SpeechGrammarList); get interimResults(): boolean; set interimResults(value: boolean); get maxAlternatives(): number; set maxAlternatives(value: number); get lang(): string; set lang(value: string); get onaudioend(): ((event: SpeechRecognitionEvent<"audioend">) => void) | undefined; set onaudioend(value: ((event: SpeechRecognitionEvent<"audioend">) => void) | undefined); get onaudiostart(): ((event: SpeechRecognitionEvent<"audiostart">) => void) | undefined; set onaudiostart(value: ((event: SpeechRecognitionEvent<"audiostart">) => void) | undefined); get oncognitiveservices(): ((event: SpeechRecognitionEvent<"cognitiveservices">) => void) | undefined; set oncognitiveservices(value: ((event: SpeechRecognitionEvent<"cognitiveservices">) => void) | undefined); get onend(): ((event: SpeechRecognitionEvent<"end">) => void) | undefined; set onend(value: ((event: SpeechRecognitionEvent<"end">) => void) | undefined); get onerror(): ((event: SpeechRecognitionErrorEvent) => void) | undefined; set onerror(value: ((event: SpeechRecognitionErrorEvent) => void) | undefined); get onresult(): ((event: SpeechRecognitionEvent<"result">) => void) | undefined; set onresult(value: ((event: SpeechRecognitionEvent<"result">) => void) | undefined); get onsoundend(): ((event: SpeechRecognitionEvent<"soundend">) => void) | undefined; set onsoundend(value: ((event: SpeechRecognitionEvent<"soundend">) => void) | undefined); get onsoundstart(): ((event: SpeechRecognitionEvent<"soundstart">) => void) | undefined; set onsoundstart(value: ((event: SpeechRecognitionEvent<"soundstart">) => void) | undefined); get onspeechend(): ((event: SpeechRecognitionEvent<"speechend">) => void) | undefined; set onspeechend(value: ((event: SpeechRecognitionEvent<"speechend">) => void) | undefined); get onspeechstart(): ((event: SpeechRecognitionEvent<"speechstart">) => void) | undefined; set onspeechstart(value: ((event: SpeechRecognitionEvent<"speechstart">) => void) | undefined); get onstart(): ((event: SpeechRecognitionEvent<"start">) => void) | undefined; set onstart(value: ((event: SpeechRecognitionEvent<"start">) => void) | undefined); abort: (() => void) | undefined; stop: (() => void) | undefined; start(): void; _startOnce(): Promise<void>; addEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: AddEventListenerOptions | boolean): void; dispatchEvent(event: Event): boolean; removeEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: EventListenerOptions | boolean): void; }; }; SpeechRecognitionEvent: typeof SpeechRecognitionEvent; }; type CreateSpeechRecognitionPonyfillFromRecognizerInit = { createRecognizer: (lang: string) => Promise<SpeechRecognizer>; enableTelemetry: boolean | undefined; looseEvents: boolean; referenceGrammars?: readonly string[] | undefined; textNormalization: 'display' | 'itn' | 'lexical' | 'maskeditn'; }; declare function createSpeechRecognitionPonyfillFromRecognizer({ createRecognizer, enableTelemetry, looseEvents, referenceGrammars, textNormalization }: CreateSpeechRecognitionPonyfillFromRecognizerInit): { SpeechGrammarList: typeof SpeechGrammarList; SpeechRecognition: { new (): { "__#private@#continuous": boolean; "__#private@#eventListenerMap": SpeechRecognitionEventListenerMap; "__#private@#grammars": SpeechGrammarList; "__#private@#interimResults": boolean; "__#private@#lang": string; "__#private@#maxAlternatives": number; emitCognitiveServices<T extends { type: string; }>(type: string, event: T): void; get continuous(): boolean; set continuous(value: boolean); get grammars(): SpeechGrammarList; set grammars(value: SpeechGrammarList); get interimResults(): boolean; set interimResults(value: boolean); get maxAlternatives(): number; set maxAlternatives(value: number); get lang(): string; set lang(value: string); get onaudioend(): ((event: SpeechRecognitionEvent<"audioend">) => void) | undefined; set onaudioend(value: ((event: SpeechRecognitionEvent<"audioend">) => void) | undefined); /** @type { ((event: SpeechRecognitionEvent<'audiostart'>) => void) | undefined } */ get onaudiostart(): ((event: SpeechRecognitionEvent<"audiostart">) => void) | undefined; set onaudiostart(value: ((event: SpeechRecognitionEvent<"audiostart">) => void) | undefined); /** @type { ((event: SpeechRecognitionEvent<'cognitiveservices'>) => void) | undefined } */ get oncognitiveservices(): ((event: SpeechRecognitionEvent<"cognitiveservices">) => void) | undefined; set oncognitiveservices(value: ((event: SpeechRecognitionEvent<"cognitiveservices">) => void) | undefined); /** @type { ((event: SpeechRecognitionEvent<'end'>) => void) | undefined } */ get onend(): ((event: SpeechRecognitionEvent<"end">) => void) | undefined; set onend(value: ((event: SpeechRecognitionEvent<"end">) => void) | undefined); /** @type { ((event: SpeechRecognitionErrorEvent) => void) | undefined } */ get onerror(): ((event: SpeechRecognitionErrorEvent) => void) | undefined; set onerror(value: ((event: SpeechRecognitionErrorEvent) => void) | undefined); /** @type { ((event: SpeechRecognitionEvent<'result'>) => void) | undefined } */ get onresult(): ((event: SpeechRecognitionEvent<"result">) => void) | undefined; set onresult(value: ((event: SpeechRecognitionEvent<"result">) => void) | undefined); /** @type { ((event: SpeechRecognitionEvent<'soundend'>) => void) | undefined } */ get onsoundend(): ((event: SpeechRecognitionEvent<"soundend">) => void) | undefined; set onsoundend(value: ((event: SpeechRecognitionEvent<"soundend">) => void) | undefined); /** @type { ((event: SpeechRecognitionEvent<'soundstart'>) => void) | undefined } */ get onsoundstart(): ((event: SpeechRecognitionEvent<"soundstart">) => void) | undefined; set onsoundstart(value: ((event: SpeechRecognitionEvent<"soundstart">) => void) | undefined); /** @type { ((event: SpeechRecognitionEvent<'speechend'>) => void) | undefined } */ get onspeechend(): ((event: SpeechRecognitionEvent<"speechend">) => void) | undefined; set onspeechend(value: ((event: SpeechRecognitionEvent<"speechend">) => void) | undefined); /** @type { ((event: SpeechRecognitionEvent<'speechstart'>) => void) | undefined } */ get onspeechstart(): ((event: SpeechRecognitionEvent<"speechstart">) => void) | undefined; set onspeechstart(value: ((event: SpeechRecognitionEvent<"speechstart">) => void) | undefined); /** @type { ((event: SpeechRecognitionEvent<'start'>) => void) | undefined } */ get onstart(): ((event: SpeechRecognitionEvent<"start">) => void) | undefined; set onstart(value: ((event: SpeechRecognitionEvent<"start">) => void) | undefined); abort: (() => void) | undefined; stop: (() => void) | undefined; start(): void; _startOnce(): Promise<void>; addEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: AddEventListenerOptions | boolean): void; dispatchEvent(event: Event): boolean; removeEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: EventListenerOptions | boolean): void; }; }; SpeechRecognitionEvent: typeof SpeechRecognitionEvent; }; declare class AudioContextConsumer { constructor(audioContext: any); audioContext: any; pause(): void; resume(): void; start(queue: any): Promise<void>; playingUtterance: any; stop(): void; } declare class AudioContextQueue { constructor({ audioContext, ponyfill }: { audioContext: any; ponyfill: any; }); consumer: AudioContextConsumer | null; paused: boolean; queue: any[]; getAudioContext: memoize_one.MemoizedFn<() => any>; pause(): void; push(utterance: any): void; resume(): void; get speaking(): boolean; startConsumer(): Promise<void>; stop(): void; } declare class SpeechSynthesisEvent { constructor(type: any); } declare class SpeechSynthesisUtterance { constructor(text: any); _lang: any; _pitch: number; _rate: number; _voice: any; _volume: number; text: any; set onboundary(value: any); get onboundary(): any; set onend(value: any); get onend(): any; set onerror(value: any); get onerror(): any; set onmark(value: any); get onmark(): any; set onpause(value: any); get onpause(): any; set onresume(value: any); get onresume(): any; set onstart(value: any); get onstart(): any; set lang(value: any); get lang(): any; set pitch(value: number); get pitch(): number; set rate(value: number); get rate(): number; set voice(value: any); get voice(): any; set volume(value: number); get volume(): number; preload({ deploymentId, fetchCredentials, outputFormat }: { deploymentId: any; fetchCredentials: any; outputFormat: any; }): void; arrayBufferPromise: Promise<ArrayBuffer> | undefined; play(audioContext: any): Promise<void>; _playingSource: any; stop(): void; } declare function createSpeechRecognitionPonyfill(options: any): { speechSynthesis?: undefined; SpeechSynthesisEvent?: undefined; SpeechSynthesisUtterance?: undefined; } | { speechSynthesis: { queue: AudioContextQueue; cancel(): void; getVoices(): any[]; onvoiceschanged: any; pause(): void; resume(): void; speak(utterance: any): Promise<any>; get speaking(): boolean; updateVoices(): Promise<void>; }; SpeechSynthesisEvent: typeof SpeechSynthesisEvent; SpeechSynthesisUtterance: typeof SpeechSynthesisUtterance; }; type FetchAuthorizationTokenInit = { region: string; subscriptionKey: string; }; declare function fetchAuthorizationToken({ region, subscriptionKey }: FetchAuthorizationTokenInit): Promise<string>; declare function createSpeechServicesPonyfill(options?: any): any; export { createSpeechRecognitionPonyfill$1 as createSpeechRecognitionPonyfill, createSpeechRecognitionPonyfillFromRecognizer, createSpeechServicesPonyfill, createSpeechRecognitionPonyfill as createSpeechSynthesisPonyfill, fetchAuthorizationToken };