@euirim/microsoft-cognitiveservices-speech-sdk
Version:
Microsoft Cognitive Services Speech SDK for JavaScript
286 lines (284 loc) • 10.8 kB
JavaScript
// 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