UNPKG

@euirim/microsoft-cognitiveservices-speech-sdk

Version:
286 lines (284 loc) 10.8 kB
// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. import { OutputFormatPropertyName, RecognitionMode, RecognizerConfig, SpeechServiceRecognizer, } from "../common.speech/Exports"; import { SpeechConnectionFactory } from "../common.speech/SpeechConnectionFactory"; import { Contracts } from "./Contracts"; import { OutputFormat, PropertyId, Recognizer, } from "./Exports"; /** * Performs speech recognition from microphone, file, or other audio input streams, and gets transcribed text as result. * @class SpeechRecognizer */ export class SpeechRecognizer extends Recognizer { /** * SpeechRecognizer constructor. * @constructor * @param {SpeechConfig} speechConfig - An set of initial properties for this recognizer * @param {AudioConfig} audioConfig - An optional audio configuration associated with the recognizer */ constructor(speechConfig, audioConfig) { const speechConfigImpl = speechConfig; Contracts.throwIfNull(speechConfigImpl, "speechConfig"); Contracts.throwIfNullOrWhitespace(speechConfigImpl.properties.getProperty(PropertyId.SpeechServiceConnection_RecoLanguage), PropertyId[PropertyId.SpeechServiceConnection_RecoLanguage]); super(audioConfig, speechConfigImpl.properties, new SpeechConnectionFactory()); this.privDisposedSpeechRecognizer = false; } /** * Gets the endpoint id of a customized speech model that is used for speech recognition. * @member SpeechRecognizer.prototype.endpointId * @function * @public * @returns {string} the endpoint id of a customized speech model that is used for speech recognition. */ get endpointId() { Contracts.throwIfDisposed(this.privDisposedSpeechRecognizer); return this.properties.getProperty(PropertyId.SpeechServiceConnection_EndpointId, "00000000-0000-0000-0000-000000000000"); } /** * Gets the authorization token used to communicate with the service. * @member SpeechRecognizer.prototype.authorizationToken * @function * @public * @returns {string} Authorization token. */ get authorizationToken() { return this.properties.getProperty(PropertyId.SpeechServiceAuthorization_Token); } /** * Gets/Sets the authorization token used to communicate with the service. * @member SpeechRecognizer.prototype.authorizationToken * @function * @public * @param {string} token - Authorization token. */ set authorizationToken(token) { Contracts.throwIfNullOrWhitespace(token, "token"); this.properties.setProperty(PropertyId.SpeechServiceAuthorization_Token, token); } /** * Gets the spoken language of recognition. * @member SpeechRecognizer.prototype.speechRecognitionLanguage * @function * @public * @returns {string} The spoken language of recognition. */ get speechRecognitionLanguage() { Contracts.throwIfDisposed(this.privDisposedSpeechRecognizer); return this.properties.getProperty(PropertyId.SpeechServiceConnection_RecoLanguage); } /** * Gets the output format of recognition. * @member SpeechRecognizer.prototype.outputFormat * @function * @public * @returns {OutputFormat} The output format of recognition. */ get outputFormat() { Contracts.throwIfDisposed(this.privDisposedSpeechRecognizer); if (this.properties.getProperty(OutputFormatPropertyName, OutputFormat[OutputFormat.Simple]) === OutputFormat[OutputFormat.Simple]) { return OutputFormat.Simple; } else { return OutputFormat.Detailed; } } /** * The collection of properties and their values defined for this SpeechRecognizer. * @member SpeechRecognizer.prototype.properties * @function * @public * @returns {PropertyCollection} The collection of properties and their values defined for this SpeechRecognizer. */ get properties() { return this.privProperties; } /** * Starts speech recognition, and stops after the first utterance is recognized. * The task returns the recognition text as result. * Note: RecognizeOnceAsync() returns when the first utterance has been recognized, * so it is suitable only for single shot recognition * like command or query. For long-running recognition, use StartContinuousRecognitionAsync() instead. * @member SpeechRecognizer.prototype.recognizeOnceAsync * @function * @public * @param cb - Callback that received the SpeechRecognitionResult. * @param err - Callback invoked in case of an error. */ recognizeOnceAsync(cb, err) { try { Contracts.throwIfDisposed(this.privDisposedSpeechRecognizer); this.implRecognizerStop(); this.implRecognizerStart(RecognitionMode.Interactive, (e) => { this.implRecognizerStop(); if (!!cb) { cb(e); } }, (e) => { this.implRecognizerStop(); if (!!err) { err(e); } }); } catch (error) { if (!!err) { if (error instanceof Error) { const typedError = error; err(typedError.name + ": " + typedError.message); } else { err(error); } } // Destroy the recognizer. this.dispose(true); } } /** * Starts speech recognition, until stopContinuousRecognitionAsync() is called. * User must subscribe to events to receive recognition results. * @member SpeechRecognizer.prototype.startContinuousRecognitionAsync * @function * @public * @param cb - Callback invoked once the recognition has started. * @param err - Callback invoked in case of an error. */ startContinuousRecognitionAsync(cb, err) { try { Contracts.throwIfDisposed(this.privDisposedSpeechRecognizer); this.implRecognizerStop(); this.implRecognizerStart(RecognitionMode.Conversation, undefined, undefined); // report result to promise. if (!!cb) { try { cb(); } catch (e) { if (!!err) { err(e); } } cb = undefined; } } catch (error) { if (!!err) { if (error instanceof Error) { const typedError = error; err(typedError.name + ": " + typedError.message); } else { err(error); } } // Destroy the recognizer. this.dispose(true); } } /** * Stops continuous speech recognition. * @member SpeechRecognizer.prototype.stopContinuousRecognitionAsync * @function * @public * @param cb - Callback invoked once the recognition has stopped. * @param err - Callback invoked in case of an error. */ stopContinuousRecognitionAsync(cb, err) { try { Contracts.throwIfDisposed(this.privDisposedSpeechRecognizer); this.implRecognizerStop(); if (!!cb) { try { cb(); } catch (e) { if (!!err) { err(e); } } } } catch (error) { if (!!err) { if (error instanceof Error) { const typedError = error; err(typedError.name + ": " + typedError.message); } else { err(error); } } // Destroy the recognizer. this.dispose(true); } } /** * Starts speech recognition with keyword spotting, until * stopKeywordRecognitionAsync() is called. * User must subscribe to events to receive recognition results. * Note: Key word spotting functionality is only available on the * Speech Devices SDK. This functionality is currently not included in the SDK itself. * @member SpeechRecognizer.prototype.startKeywordRecognitionAsync * @function * @public * @param {KeywordRecognitionModel} model The keyword recognition model that * specifies the keyword to be recognized. * @param cb - Callback invoked once the recognition has started. * @param err - Callback invoked in case of an error. */ startKeywordRecognitionAsync(model, cb, err) { Contracts.throwIfNull(model, "model"); if (!!err) { err("Not yet implemented."); } } /** * Stops continuous speech recognition. * Note: Key word spotting functionality is only available on the * Speech Devices SDK. This functionality is currently not included in the SDK itself. * @member SpeechRecognizer.prototype.stopKeywordRecognitionAsync * @function * @public * @param cb - Callback invoked once the recognition has stopped. * @param err - Callback invoked in case of an error. */ stopKeywordRecognitionAsync(cb, err) { if (!!cb) { cb(); } } /** * closes all external resources held by an instance of this class. * @member SpeechRecognizer.prototype.close * @function * @public */ close() { Contracts.throwIfDisposed(this.privDisposedSpeechRecognizer); this.dispose(true); } /** * Disposes any resources held by the object. * @member SpeechRecognizer.prototype.dispose * @function * @public * @param {boolean} disposing - true if disposing the object. */ dispose(disposing) { if (this.privDisposedSpeechRecognizer) { return; } if (disposing) { this.implRecognizerStop(); this.privDisposedSpeechRecognizer = true; } super.dispose(disposing); } createRecognizerConfig(speechConfig) { return new RecognizerConfig(speechConfig, this.properties); } createServiceRecognizer(authentication, connectionFactory, audioConfig, recognizerConfig) { const configImpl = audioConfig; return new SpeechServiceRecognizer(authentication, connectionFactory, configImpl, recognizerConfig, this); } } //# sourceMappingURL=SpeechRecognizer.js.map