UNPKG

@voice-ping/cognitive-services-speech

Version:

VoicePing Cognitive Services Speech SDK for JavaScript forked from Microsoft

1 lines 20.2 kB
{"version":3,"sources":["src/common.speech/Transcription/ConversationTranslatorRecognizer.ts"],"names":[],"mappings":"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","file":"ConversationTranslatorRecognizer.d.ts","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT license.\n\nimport {\n IAuthentication,\n IConnectionFactory,\n RecognizerConfig,\n ServiceRecognizerBase,\n SpeechServiceConfig\n} from \"../../common.speech/Exports\";\nimport { AudioConfigImpl } from \"../../sdk/Audio/AudioConfig\";\nimport { Contracts } from \"../../sdk/Contracts\";\nimport { AudioConfig,\n ConversationExpirationEventArgs,\n ConversationParticipantsChangedEventArgs,\n ConversationTranslationCanceledEventArgs,\n PropertyCollection,\n Recognizer,\n SessionEventArgs,\n SpeechTranslationConfig} from \"../../sdk/Exports\";\nimport { SpeechTranslationConfigImpl } from \"../../sdk/SpeechTranslationConfig\";\nimport { Callback } from \"../../sdk/Transcription/IConversation\";\nimport { ConversationConnectionFactory } from \"./ConversationConnectionFactory\";\nimport { ConversationServiceAdapter } from \"./ConversationServiceAdapter\";\nimport {\n ConversationReceivedTranslationEventArgs,\n LockRoomEventArgs,\n MuteAllEventArgs,\n ParticipantAttributeEventArgs,\n ParticipantEventArgs,\n ParticipantsListEventArgs } from \"./ConversationTranslatorEventArgs\";\nimport {\n ConversationTranslatorCommandTypes,\n ConversationTranslatorMessageTypes,\n IChangeNicknameCommand,\n IConversationTranslatorRecognizer,\n IEjectParticipantCommand,\n IInstantMessageCommand,\n IInternalConversation,\n ILockConversationCommand,\n IMuteAllCommand,\n IMuteCommand} from \"./ConversationTranslatorInterfaces\";\nimport { PromiseToEmptyCallback } from \"./ConversationUtils\";\n\n/**\n * Sends messages to the Conversation Translator websocket and listens for incoming events containing websocket messages.\n * Based off the recognizers in the SDK folder.\n */\nexport class ConversationTranslatorRecognizer extends Recognizer implements IConversationTranslatorRecognizer {\n\n private privIsDisposed: boolean;\n private privSpeechRecognitionLanguage: string;\n private privRoom: IInternalConversation;\n\n public constructor(speechConfig: SpeechTranslationConfig, audioConfig?: AudioConfig) {\n const serviceConfigImpl = speechConfig as SpeechTranslationConfigImpl;\n Contracts.throwIfNull(serviceConfigImpl, \"speechConfig\");\n\n super(audioConfig, serviceConfigImpl.properties, new ConversationConnectionFactory());\n\n this.privIsDisposed = false;\n this.privProperties = serviceConfigImpl.properties.clone();\n\n }\n\n public canceled: (sender: IConversationTranslatorRecognizer, event: ConversationTranslationCanceledEventArgs) => void;\n public conversationExpiration: (sender: IConversationTranslatorRecognizer, event: ConversationExpirationEventArgs) => void;\n public lockRoomCommandReceived: (sender: IConversationTranslatorRecognizer, event: LockRoomEventArgs) => void;\n public muteAllCommandReceived: (sender: IConversationTranslatorRecognizer, event: MuteAllEventArgs) => void;\n public participantJoinCommandReceived: (sender: IConversationTranslatorRecognizer, event: ParticipantEventArgs) => void;\n public participantLeaveCommandReceived: (sender: IConversationTranslatorRecognizer, event: ParticipantEventArgs) => void;\n public participantUpdateCommandReceived: (sender: IConversationTranslatorRecognizer, event: ParticipantAttributeEventArgs) => void;\n public connectionOpened: (sender: IConversationTranslatorRecognizer, event: SessionEventArgs) => void;\n public connectionClosed: (sender: IConversationTranslatorRecognizer, event: SessionEventArgs) => void;\n public translationReceived: (sender: IConversationTranslatorRecognizer, event: ConversationReceivedTranslationEventArgs) => void;\n public participantsListReceived: (sender: IConversationTranslatorRecognizer, event: ParticipantsListEventArgs) => void;\n public participantsChanged: (sender: IConversationTranslatorRecognizer, event: ConversationParticipantsChangedEventArgs) => void;\n\n public set conversation(value: IInternalConversation) {\n this.privRoom = value;\n }\n\n /**\n * Return the speech language used by the recognizer\n */\n public get speechRecognitionLanguage(): string {\n return this.privSpeechRecognitionLanguage;\n }\n\n /**\n * Return the properties for the recognizer\n */\n public get properties(): PropertyCollection {\n return this.privProperties;\n }\n\n public isDisposed(): boolean {\n return this.privIsDisposed;\n }\n\n /**\n * Connect to the recognizer\n * @param token\n */\n public connect(token: string, cb?: () => void, err?: (e: string) => void): void {\n try {\n Contracts.throwIfDisposed(this.privIsDisposed);\n Contracts.throwIfNullOrWhitespace(token, \"token\");\n this.privReco.conversationTranslatorToken = token;\n this.privReco.connectAsync(cb, err);\n } catch (error) {\n if (!!err) {\n if (error instanceof Error) {\n const typedError: Error = error as Error;\n err(typedError.name + \": \" + typedError.message);\n } else {\n err(error);\n }\n }\n }\n }\n\n /**\n * Disconnect from the recognizer\n */\n public disconnect(cb?: () => void, err?: (e: string) => void): void {\n try {\n Contracts.throwIfDisposed(this.privIsDisposed);\n this.privRoom = undefined;\n this.privReco.disconnectAsync(cb, err);\n } catch (error) {\n if (!!err) {\n if (error instanceof Error) {\n const typedError: Error = error as Error;\n err(typedError.name + \": \" + typedError.message);\n } else {\n err(error);\n }\n }\n // Destroy the recognizer.\n this.dispose(true);\n }\n }\n\n /**\n * Send the text message command to the websocket\n * @param conversationId\n * @param participantId\n * @param message\n */\n public sendMessageRequest(message: string, cb?: () => void, err?: (e: string) => void): void {\n try {\n Contracts.throwIfDisposed(this.privIsDisposed);\n Contracts.throwIfNullOrWhitespace(this.privRoom.roomId, \"conversationId\");\n Contracts.throwIfNullOrWhitespace(this.privRoom.participantId, \"participantId\");\n Contracts.throwIfNullOrWhitespace(message, \"message\");\n\n const command: IInstantMessageCommand = {\n // tslint:disable-next-line: object-literal-shorthand\n participantId: this.privRoom.participantId,\n roomId: this.privRoom.roomId,\n text: message,\n type: ConversationTranslatorMessageTypes.instantMessage\n };\n\n this.sendMessage(JSON.stringify(command), cb, err);\n\n } catch (error) {\n if (!!err) {\n if (error instanceof Error) {\n const typedError: Error = error as Error;\n err(typedError.name + \": \" + typedError.message);\n } else {\n err(error);\n }\n }\n\n // Destroy the recognizer.\n this.dispose(true);\n }\n }\n\n /**\n * Send the lock conversation command to the websocket\n * @param conversationId\n * @param participantId\n * @param isLocked\n */\n public sendLockRequest(isLocked: boolean, cb?: () => void, err?: (e: string) => void): void {\n\n try {\n Contracts.throwIfDisposed(this.privIsDisposed);\n Contracts.throwIfNullOrWhitespace(this.privRoom.roomId, \"conversationId\");\n Contracts.throwIfNullOrWhitespace(this.privRoom.participantId, \"participantId\");\n Contracts.throwIfNullOrUndefined(isLocked, \"isLocked\");\n\n const command: ILockConversationCommand = {\n command: ConversationTranslatorCommandTypes.setLockState,\n // tslint:disable-next-line: object-literal-shorthand\n participantId: this.privRoom.participantId,\n roomid: this.privRoom.roomId,\n type: ConversationTranslatorMessageTypes.participantCommand,\n value: isLocked\n };\n\n this.sendMessage(JSON.stringify(command), cb, err);\n } catch (error) {\n if (!!err) {\n if (error instanceof Error) {\n const typedError: Error = error as Error;\n err(typedError.name + \": \" + typedError.message);\n } else {\n err(error);\n }\n }\n\n // Destroy the recognizer.\n this.dispose(true);\n }\n }\n\n /**\n * Send the mute all participants command to the websocket\n * @param conversationId\n * @param participantId\n * @param isMuted\n */\n public sendMuteAllRequest(isMuted: boolean, cb?: () => void, err?: (e: string) => void): void {\n\n try {\n Contracts.throwIfDisposed(this.privIsDisposed);\n Contracts.throwIfNullOrWhitespace(this.privRoom.roomId, \"conversationId\");\n Contracts.throwIfNullOrWhitespace(this.privRoom.participantId, \"participantId\");\n Contracts.throwIfNullOrUndefined(isMuted, \"isMuted\");\n\n const command: IMuteAllCommand = {\n command: ConversationTranslatorCommandTypes.setMuteAll,\n // tslint:disable-next-line: object-literal-shorthand\n participantId: this.privRoom.participantId, // the id of the host\n roomid: this.privRoom.roomId,\n type: ConversationTranslatorMessageTypes.participantCommand,\n value: isMuted\n };\n\n this.sendMessage(JSON.stringify(command), cb, err);\n } catch (error) {\n if (!!err) {\n if (error instanceof Error) {\n const typedError: Error = error as Error;\n err(typedError.name + \": \" + typedError.message);\n } else {\n err(error);\n }\n }\n\n // Destroy the recognizer.\n this.dispose(true);\n }\n }\n\n /**\n * Send the mute participant command to the websocket\n * @param conversationId\n * @param participantId\n * @param isMuted\n */\n public sendMuteRequest(participantId: string, isMuted: boolean, cb?: () => void, err?: (e: string) => void): void {\n\n try {\n Contracts.throwIfDisposed(this.privIsDisposed);\n Contracts.throwIfNullOrWhitespace(this.privRoom.roomId, \"conversationId\");\n Contracts.throwIfNullOrWhitespace(participantId, \"participantId\");\n Contracts.throwIfNullOrUndefined(isMuted, \"isMuted\");\n\n const command: IMuteCommand = {\n command: ConversationTranslatorCommandTypes.setMute,\n // tslint:disable-next-line: object-literal-shorthand\n participantId: participantId, // the id of the participant\n roomid: this.privRoom.roomId,\n type: ConversationTranslatorMessageTypes.participantCommand,\n value: isMuted\n };\n\n this.sendMessage(JSON.stringify(command), cb, err);\n } catch (error) {\n if (!!err) {\n if (error instanceof Error) {\n const typedError: Error = error as Error;\n err(typedError.name + \": \" + typedError.message);\n } else {\n err(error);\n }\n }\n\n // Destroy the recognizer.\n this.dispose(true);\n }\n }\n\n /**\n * Send the eject participant command to the websocket\n * @param conversationId\n * @param participantId\n */\n public sendEjectRequest(participantId: string, cb?: () => void, err?: (e: string) => void): void {\n\n try {\n Contracts.throwIfDisposed(this.privIsDisposed);\n Contracts.throwIfNullOrWhitespace(this.privRoom.roomId, \"conversationId\");\n Contracts.throwIfNullOrWhitespace(participantId, \"participantId\");\n\n const command: IEjectParticipantCommand = {\n command: ConversationTranslatorCommandTypes.ejectParticipant,\n // tslint:disable-next-line: object-literal-shorthand\n participantId: participantId,\n roomid: this.privRoom.roomId,\n type: ConversationTranslatorMessageTypes.participantCommand,\n };\n\n this.sendMessage(JSON.stringify(command), cb, err);\n\n if (!!cb) {\n try {\n cb();\n } catch (e) {\n if (!!err) {\n err(e);\n }\n }\n }\n\n } catch (error) {\n if (!!err) {\n if (error instanceof Error) {\n const typedError: Error = error as Error;\n err(typedError.name + \": \" + typedError.message);\n } else {\n err(error);\n }\n }\n\n // Destroy the recognizer.\n this.dispose(true);\n }\n }\n\n /**\n * Send the mute participant command to the websocket\n * @param conversationId\n * @param participantId\n * @param isMuted\n */\n public sendChangeNicknameRequest(nickname: string, cb?: () => void, err?: (e: string) => void): void {\n\n try {\n Contracts.throwIfDisposed(this.privIsDisposed);\n Contracts.throwIfNullOrWhitespace(this.privRoom.roomId, \"conversationId\");\n Contracts.throwIfNullOrWhitespace(nickname, \"nickname\");\n\n const command: IChangeNicknameCommand = {\n command: ConversationTranslatorCommandTypes.changeNickname,\n nickname,\n // tslint:disable-next-line: object-literal-shorthand\n participantId: this.privRoom.participantId, // the id of the host\n roomid: this.privRoom.roomId,\n type: ConversationTranslatorMessageTypes.participantCommand,\n value: nickname\n };\n\n this.sendMessage(JSON.stringify(command), cb, err);\n\n } catch (error) {\n if (!!err) {\n if (error instanceof Error) {\n const typedError: Error = error as Error;\n err(typedError.name + \": \" + typedError.message);\n } else {\n err(error);\n }\n }\n\n // Destroy the recognizer.\n this.dispose(true);\n }\n }\n\n /**\n * Close and dispose the recognizer\n */\n public close(): void {\n Contracts.throwIfDisposed(this.privIsDisposed);\n this.dispose(true);\n }\n\n /**\n * Dispose the recognizer\n * @param disposing\n */\n protected dispose(disposing: boolean): boolean {\n if (this.privIsDisposed) {\n return;\n }\n if (disposing) {\n this.privIsDisposed = true;\n super.dispose(disposing);\n }\n }\n\n /**\n * Create the config for the recognizer\n * @param speechConfig\n */\n protected createRecognizerConfig(speechConfig: SpeechServiceConfig): RecognizerConfig {\n return new RecognizerConfig(speechConfig, this.privProperties);\n }\n\n /**\n * Create the service recognizer.\n * The audio source is redundnant here but is required by the implementation.\n * @param authentication\n * @param connectionFactory\n * @param audioConfig\n * @param recognizerConfig\n */\n protected createServiceRecognizer(\n authentication: IAuthentication,\n connectionFactory: IConnectionFactory,\n audioConfig: AudioConfig,\n recognizerConfig: RecognizerConfig): ServiceRecognizerBase {\n\n const audioSource: AudioConfigImpl = audioConfig as AudioConfigImpl;\n\n return new ConversationServiceAdapter(authentication, connectionFactory, audioSource, recognizerConfig, this);\n }\n\n private sendMessage(msg: string, cb?: Callback, err?: Callback): void {\n const withAsync = this.privReco as ConversationServiceAdapter;\n PromiseToEmptyCallback(withAsync.sendMessageAsync(msg), cb, err);\n }\n\n}\n"]}