UNPKG

ivr-tester-transcriber-amazon-transcribe

Version:
81 lines (80 loc) 2.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AmazonTranscribe = void 0; const ivr_tester_1 = require("ivr-tester"); const aws_transcribe_1 = require("aws-transcribe"); const wavefile_1 = require("wavefile"); const Debugger_1 = require("./Debugger"); class AmazonTranscribe extends ivr_tester_1.TypedEmitter { constructor(region, languageCode) { super(); this.region = region; this.languageCode = languageCode; this.config = { region: this.region, sampleRate: 8000, languageCode: this.languageCode, }; AmazonTranscribe.debug("Configuration: %O", this.config); } static convertAudioEncoding(data) { const wav = new wavefile_1.WaveFile(); wav.fromScratch(1, 8000, "8m", data); wav.fromMuLaw(); // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore return Buffer.from(wav.data.samples); } getStream() { if (this.stream) { return this.stream; } else { this.stream = this.createStream(); AmazonTranscribe.debug("New stream created"); return this.stream; } } createStream() { const client = new aws_transcribe_1.AwsTranscribe(); return client .createStreamingClient(this.config) .on(aws_transcribe_1.StreamingClient.EVENTS.OPEN, () => AmazonTranscribe.debug("Connection with Amazon opened")) .on(aws_transcribe_1.StreamingClient.EVENTS.CLOSE, () => AmazonTranscribe.debug("Connection with Amazon closed")) .on(aws_transcribe_1.StreamingClient.EVENTS.ERROR, (error) => { AmazonTranscribe.debug(error); throw error; }) .on(aws_transcribe_1.StreamingClient.EVENTS.DATA, (data) => { AmazonTranscribe.debug("Data: %O", data.Transcript); const results = data.Transcript.Results; if (!results || results.length === 0) { return; } const result = results[0]; const event = { transcription: result.Alternatives[0].Transcript.trim(), isFinal: !result.IsPartial, }; this.emit("transcription", event); }); } close() { if (this.stream) { this.stream.removeAllListeners(); this.stream.write(Buffer.from([])); this.stream.destroy(); this.stream = null; AmazonTranscribe.debug("Stream destroyed"); } } transcribe(payload) { const pcmPayload = AmazonTranscribe.convertAudioEncoding(payload); this.getStream().write(pcmPayload); } transcriptionComplete() { this.close(); } } exports.AmazonTranscribe = AmazonTranscribe; AmazonTranscribe.debug = Debugger_1.Debugger.getPackageDebugger();