@voice-ping/cognitive-services-speech
Version:
VoicePing Cognitive Services Speech SDK for JavaScript forked from Microsoft
1 lines • 12.2 kB
Source Map (JSON)
{"version":3,"sources":["src/sdk/Audio/AudioOutputStream.ts"],"names":[],"mappings":"AAGA,OAAO,EAGH,iBAAiB,EAEjB,OAAO,EAGV,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACH,iBAAiB,EACjB,6BAA6B,EAChC,MAAM,YAAY,CAAC;AAGpB;;;GAGG;AACH,8BAAsB,iBAAiB;IAEnC;;;OAGG;IACH,SAAS;IAET;;;;OAIG;IACH,aAAoB,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE;IAEtD;;;;;;OAMG;WACW,gBAAgB,IAAI,qBAAqB;IAIvD;;;;;OAKG;aACa,KAAK,IAAI,IAAI;CAChC;AAED;;;GAGG;AAEH,8BAAsB,qBAAsB,SAAQ,iBAAiB;IAEjE;;;;;;OAMG;WACW,MAAM,IAAI,qBAAqB;IAI7C;;;;;;;OAOG;aACa,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAE9D;;;;;OAKG;aACa,KAAK,IAAI,IAAI;CAChC;AAED;;;;GAIG;AAEH,qBAAa,yBAA0B,SAAQ,qBAAsB,YAAW,iBAAiB;IAC7F,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,iBAAiB,CAAY;IAErC;;;OAGG;;IAOH;;;OAGG;IACH,IAAW,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAK1C;IAED;;OAEG;IACH,IAAW,MAAM,IAAI,iBAAiB,CAErC;IAED;;;;;OAKG;IACH,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED;;;;;OAKG;IACI,EAAE,IAAI,MAAM;IAInB;;;;;;;OAOG;IACI,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IA6CrD;;;;;;OAMG;IACI,KAAK,CAAC,UAAU,EAAE,WAAW,GAAG,IAAI;IAS3C;;;;;OAKG;IACI,KAAK,IAAI,IAAI;CAGvB;AAOD,8BAAsB,qBAAsB,SAAQ,iBAAiB;IACjE;;;OAGG;IACH,SAAS;IAET;;;;;;;;;OASG;WACW,MAAM,CAAC,QAAQ,EAAE,6BAA6B,GAAG,qBAAqB;IAIpF;;;;;OAKG;aACa,KAAK,IAAI,IAAI;CAEhC;AAED;;;;GAIG;AAEH,qBAAa,yBAA0B,SAAQ,qBAAsB,YAAW,iBAAiB;IAC7F,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,YAAY,CAAgC;IAEpD;;;;;;OAMG;gBACgB,QAAQ,EAAE,6BAA6B;IAO1D,IAAW,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAI;IAExC,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAMhC,KAAK,IAAI,IAAI;IAMb,EAAE,IAAI,MAAM;CAGtB","file":"AudioOutputStream.d.ts","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT license.\n\nimport {\n createNoDashGuid,\n Deferred,\n IAudioDestination,\n IStreamChunk,\n Promise,\n PromiseHelper,\n Stream,\n} from \"../../common/Exports\";\nimport {Contracts} from \"../Contracts\";\nimport {\n AudioStreamFormat,\n PushAudioOutputStreamCallback\n} from \"../Exports\";\nimport { AudioOutputFormatImpl } from \"./AudioOutputFormat\";\n\n/**\n * Represents audio output stream used for custom audio output configurations.\n * @class AudioOutputStream\n */\nexport abstract class AudioOutputStream {\n\n /**\n * Creates and initializes an instance.\n * @constructor\n */\n protected constructor() { }\n\n /**\n * Sets the format of the AudioOutputStream\n * Note: the format is set by the synthesizer before writing. Do not set it before passing it to AudioConfig\n * @member AudioOutputStream.prototype.format\n */\n public abstract set format(format: AudioStreamFormat);\n\n /**\n * Creates a memory backed PullAudioOutputStream with the specified audio format.\n * @member AudioOutputStream.createPullStream\n * @function\n * @public\n * @returns {PullAudioOutputStream} The audio output stream being created.\n */\n public static createPullStream(): PullAudioOutputStream {\n return PullAudioOutputStream.create();\n }\n\n /**\n * Explicitly frees any external resource attached to the object\n * @member AudioOutputStream.prototype.close\n * @function\n * @public\n */\n public abstract close(): void;\n}\n\n/**\n * Represents memory backed push audio output stream used for custom audio output configurations.\n * @class PullAudioOutputStream\n */\n// tslint:disable-next-line:max-classes-per-file\nexport abstract class PullAudioOutputStream extends AudioOutputStream {\n\n /**\n * Creates a memory backed PullAudioOutputStream with the specified audio format.\n * @member PullAudioOutputStream.create\n * @function\n * @public\n * @returns {PullAudioOutputStream} The push audio output stream being created.\n */\n public static create(): PullAudioOutputStream {\n return new PullAudioOutputStreamImpl();\n }\n\n /**\n * Reads audio data from the internal buffer.\n * @member PullAudioOutputStream.prototype.read\n * @function\n * @public\n * @param {ArrayBuffer} dataBuffer - An ArrayBuffer to store the read data.\n * @returns {Promise<number>} Audio buffer length has been read.\n */\n public abstract read(dataBuffer: ArrayBuffer): Promise<number>;\n\n /**\n * Closes the stream.\n * @member PullAudioOutputStream.prototype.close\n * @function\n * @public\n */\n public abstract close(): void;\n}\n\n/**\n * Represents memory backed push audio output stream used for custom audio output configurations.\n * @private\n * @class PullAudioOutputStreamImpl\n */\n// tslint:disable-next-line:max-classes-per-file\nexport class PullAudioOutputStreamImpl extends PullAudioOutputStream implements IAudioDestination {\n private privFormat: AudioOutputFormatImpl;\n private privId: string;\n private privStream: Stream<ArrayBuffer>;\n private privLastChunkView: Int8Array;\n\n /**\n * Creates and initializes an instance with the given values.\n * @constructor\n */\n public constructor() {\n super();\n this.privId = createNoDashGuid();\n this.privStream = new Stream<ArrayBuffer>();\n }\n\n /**\n * Sets the format information to the stream. For internal use only.\n * @param {AudioStreamFormat} format - the format to be set.\n */\n public set format(format: AudioStreamFormat) {\n if (format === undefined || format === null) {\n this.privFormat = AudioOutputFormatImpl.getDefaultOutputFormat();\n }\n this.privFormat = format as AudioOutputFormatImpl;\n }\n\n /**\n * Format information for the audio\n */\n public get format(): AudioStreamFormat {\n return this.privFormat;\n }\n\n /**\n * Checks if the stream is closed\n * @member PullAudioOutputStreamImpl.prototype.isClosed\n * @property\n * @public\n */\n public get isClosed(): boolean {\n return this.privStream.isClosed;\n }\n\n /**\n * Gets the id of the stream\n * @member PullAudioOutputStreamImpl.prototype.id\n * @property\n * @public\n */\n public id(): string {\n return this.privId;\n }\n\n /**\n * Reads audio data from the internal buffer.\n * @member PullAudioOutputStreamImpl.prototype.read\n * @function\n * @public\n * @param {ArrayBuffer} dataBuffer - An ArrayBuffer to store the read data.\n * @returns {Promise<number>} - Audio buffer length has been read.\n */\n public read(dataBuffer: ArrayBuffer): Promise<number> {\n const intView: Int8Array = new Int8Array(dataBuffer);\n let totalBytes: number = 0;\n\n if (this.privLastChunkView !== undefined) {\n if (this.privLastChunkView.length > dataBuffer.byteLength) {\n intView.set(this.privLastChunkView.slice(0, dataBuffer.byteLength));\n this.privLastChunkView = this.privLastChunkView.slice(dataBuffer.byteLength);\n return PromiseHelper.fromResult(dataBuffer.byteLength);\n }\n intView.set(this.privLastChunkView);\n totalBytes = this.privLastChunkView.length;\n this.privLastChunkView = undefined;\n }\n\n const deffer: Deferred<number> = new Deferred<number>();\n // Until we have the minimum number of bytes to send in a transmission, keep asking for more.\n const readUntilFilled: () => void = (): void => {\n if (totalBytes < dataBuffer.byteLength && !this.privStream.isReadEnded) {\n this.privStream.read()\n .onSuccessContinueWith((chunk: IStreamChunk<ArrayBuffer>) => {\n if (chunk !== undefined && !chunk.isEnd) {\n let tmpBuffer: ArrayBuffer;\n if (chunk.buffer.byteLength > dataBuffer.byteLength - totalBytes) {\n tmpBuffer = chunk.buffer.slice(0, dataBuffer.byteLength - totalBytes);\n this.privLastChunkView = new Int8Array(chunk.buffer.slice(dataBuffer.byteLength - totalBytes));\n } else {\n tmpBuffer = chunk.buffer;\n }\n intView.set(new Int8Array(tmpBuffer), totalBytes);\n totalBytes += tmpBuffer.byteLength;\n readUntilFilled();\n } else {\n this.privStream.readEnded();\n deffer.resolve(totalBytes);\n }\n });\n } else {\n deffer.resolve(totalBytes);\n }\n };\n readUntilFilled();\n return deffer.promise();\n }\n\n /**\n * Writes the audio data specified by making an internal copy of the data.\n * @member PullAudioOutputStreamImpl.prototype.write\n * @function\n * @public\n * @param {ArrayBuffer} dataBuffer - The audio buffer of which this function will make a copy.\n */\n public write(dataBuffer: ArrayBuffer): void {\n Contracts.throwIfNullOrUndefined(this.privStream, \"must set format before writing\");\n this.privStream.writeStreamChunk({\n buffer: dataBuffer,\n isEnd: false,\n timeReceived: Date.now()\n });\n }\n\n /**\n * Closes the stream.\n * @member PullAudioOutputStreamImpl.prototype.close\n * @function\n * @public\n */\n public close(): void {\n this.privStream.close();\n }\n}\n\n/*\n * Represents audio output stream used for custom audio output configurations.\n * @class PushAudioOutputStream\n */\n// tslint:disable-next-line:max-classes-per-file\nexport abstract class PushAudioOutputStream extends AudioOutputStream {\n /**\n * Creates and initializes and instance.\n * @constructor\n */\n protected constructor() { super(); }\n\n /**\n * Creates a PushAudioOutputStream that delegates to the specified callback interface for\n * write() and close() methods.\n * @member PushAudioOutputStream.create\n * @function\n * @public\n * @param {PushAudioOutputStreamCallback} callback - The custom audio output object,\n * derived from PushAudioOutputStreamCallback\n * @returns {PushAudioOutputStream} The push audio output stream being created.\n */\n public static create(callback: PushAudioOutputStreamCallback): PushAudioOutputStream {\n return new PushAudioOutputStreamImpl(callback);\n }\n\n /**\n * Explicitly frees any external resource attached to the object\n * @member PushAudioOutputStream.prototype.close\n * @function\n * @public\n */\n public abstract close(): void;\n\n}\n\n/**\n * Represents audio output stream used for custom audio output configurations.\n * @private\n * @class PushAudioOutputStreamImpl\n */\n// tslint:disable-next-line:max-classes-per-file\nexport class PushAudioOutputStreamImpl extends PushAudioOutputStream implements IAudioDestination {\n private readonly privId: string;\n private privCallback: PushAudioOutputStreamCallback;\n\n /**\n * Creates a PushAudioOutputStream that delegates to the specified callback interface for\n * read() and close() methods.\n * @constructor\n * @param {PushAudioOutputStreamCallback} callback - The custom audio output object,\n * derived from PushAudioOutputStreamCallback\n */\n public constructor(callback: PushAudioOutputStreamCallback) {\n super();\n this.privId = createNoDashGuid();\n this.privCallback = callback;\n }\n\n // tslint:disable-next-line:no-empty\n public set format(format: AudioStreamFormat) {}\n\n public write(buffer: ArrayBuffer): void {\n if (!!this.privCallback.write) {\n this.privCallback.write(buffer);\n }\n }\n\n public close(): void {\n if (!!this.privCallback.close) {\n this.privCallback.close();\n }\n }\n\n public id(): string {\n return this.privId;\n }\n}\n"]}