ivr-tester-transcriber-amazon-transcribe
Version:
Amazon Transcribe integration for IVR Tester
81 lines (80 loc) • 2.95 kB
JavaScript
"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();