{"version":3,"sources":["src/sdk/Audio/AudioOutputStream.ts"],"names":[],"mappings":"AAIA,OAAO,EAGH,OAAO,EAIV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,eAAO,MAAM,UAAU,EAAE,MAAa,CAAC;AAEvC;;;GAGG;AACH,8BAAsB,iBAAiB;IAEnC;;;OAGG;IACH,SAAS;IAET;;;;;;;;OAQG;WACW,gBAAgB,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,qBAAqB;IAIjF;;;;;OAKG;aACa,KAAK,IAAI,IAAI;CAChC;AAED;;;GAGG;AAEH,8BAAsB,qBAAsB,SAAQ,iBAAiB;IAEjE;;;;;;;;OAQG;WACW,MAAM,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,qBAAqB;IAIvE;;;;;;OAMG;aACa,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;IAE5C;;;;;OAKG;aACa,KAAK,IAAI,IAAI;CAChC;AAED;;;;GAIG;AAEH,qBAAa,yBAA0B,SAAQ,qBAAqB;IAEhE,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,YAAY,CAA4B;IAEhD;;;;OAIG;gBACgB,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB;IAahE;;OAEG;aACQ,MAAM,EAAI,iBAAiB;IAItC;;;;;OAKG;aACQ,QAAQ,EAAI,OAAO;IAI9B;;;;;OAKG;aACQ,EAAE,EAAI,MAAM;IAIvB;;;;;;OAMG;IACI,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;IAOnC;;;;;;OAMG;IACI,KAAK,CAAC,UAAU,EAAE,WAAW,GAAG,IAAI;IAQ3C;;;;;OAKG;IACI,KAAK,IAAI,IAAI;CAGvB","file":"AudioOutputStream.d.ts","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT license.\n\nimport { createNoDashGuid } from \"../../../src/common/Guid\";\nimport {\n    ChunkedArrayBufferStream,\n    IStreamChunk,\n    Promise,\n    PromiseHelper,\n    Stream,\n    StreamReader,\n} from \"../../common/Exports\";\nimport { AudioStreamFormat } from \"../Exports\";\nimport { AudioStreamFormatImpl } from \"./AudioStreamFormat\";\n\nexport const bufferSize: number = 4096;\n\n/**\n * Represents audio input stream used for custom audio input configurations.\n * @class AudioInputStream\n */\nexport abstract class AudioOutputStream {\n\n    /**\n     * Creates and initializes an instance.\n     * @constructor\n     */\n    protected constructor() { }\n\n    /**\n     * Creates a memory backed PullAudioOutputStream with the specified audio format.\n     * @member AudioInputStream.createPullStream\n     * @function\n     * @public\n     * @param {AudioStreamFormat} format - The audio data format in which audio will be\n     *        written to the push audio stream's write() method (currently only support 16 kHz 16bit mono PCM).\n     * @returns {PullAudioOutputStream} The audio input stream being created.\n     */\n    public static createPullStream(format?: AudioStreamFormat): PullAudioOutputStream {\n        return PullAudioOutputStream.create(format);\n    }\n\n    /**\n     * Explicitly frees any external resource attached to the object\n     * @member AudioInputStream.prototype.close\n     * @function\n     * @public\n     */\n    public abstract close(): void;\n}\n\n/**\n * Represents memory backed push audio input stream used for custom audio input 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     * @param {AudioStreamFormat} format - The audio data format in which audio will be written to the\n     *        push audio stream's write() method (currently only support 16 kHz 16bit mono PCM).\n     * @returns {PullAudioOutputStream} The push audio input stream being created.\n     */\n    public static create(format?: AudioStreamFormat): PullAudioOutputStream {\n        return new PullAudioOutputStreamImpl(bufferSize, format);\n    }\n\n    /**\n     * Reads audio data from the internal buffer.\n     * @member PullAudioOutputStream.prototype.read\n     * @function\n     * @public\n     * @returns {Promise<ArrayBuffer>} Audio buffer data.\n     */\n    public abstract read(): Promise<ArrayBuffer>;\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 input stream used for custom audio input configurations.\n * @private\n * @class PullAudioOutputStreamImpl\n */\n// tslint:disable-next-line:max-classes-per-file\nexport class PullAudioOutputStreamImpl extends PullAudioOutputStream {\n\n    private privFormat: AudioStreamFormatImpl;\n    private privId: string;\n    private privStream: Stream<ArrayBuffer>;\n    private streamReader: StreamReader<ArrayBuffer>;\n\n    /**\n     * Creates and initalizes an instance with the given values.\n     * @constructor\n     * @param {AudioStreamFormat} format - The audio stream format.\n     */\n    public constructor(chunkSize: number, format?: AudioStreamFormat) {\n        super();\n        if (format === undefined) {\n            this.privFormat = AudioStreamFormatImpl.getDefaultInputFormat();\n        } else {\n            this.privFormat = format as AudioStreamFormatImpl;\n        }\n\n        this.privId = createNoDashGuid();\n        this.privStream = new ChunkedArrayBufferStream(chunkSize);\n        this.streamReader = this.privStream.getReader();\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 get id(): string {\n        return this.privId;\n    }\n\n    /**\n     * Reads data from the buffer\n     * @member PullAudioOutputStreamImpl.prototype.read\n     * @function\n     * @public\n     * @param {ArrayBuffer} dataBuffer - The audio buffer of which this function will make a copy.\n     */\n    public read(): Promise<ArrayBuffer> {\n        return this.streamReader.read()\n            .onSuccessContinueWithPromise<ArrayBuffer>((chunk: IStreamChunk<ArrayBuffer>) => {\n                return PromiseHelper.fromResult(chunk.buffer);\n            });\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        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"]}