{"version":3,"sources":["src/sdk/Audio/AudioOutputFormat.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,oBAAY,cAAc;IACtB,GAAG,IAAI;IACP,KAAK,IAAA;IACL,KAAK,IAAA;IACL,GAAG,IAAA;IACH,SAAS,IAAA;IACT,IAAI,IAAA;CACP;AAED;;;;GAIG;AAEH,qBAAa,qBAAsB,SAAQ,qBAAqB;IAC5D,OAAc,mCAAmC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAoB1E;IACF,OAAO,CAAC,oBAAoB,CAAS;IACrC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAS;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IAEvC;;;;;;;;;;;;OAYG;gBACgB,SAAS,EAAE,cAAc,EACzB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,iBAAiB,EAAE,MAAM,EACzB,wBAAwB,EAAE,MAAM,EAChC,SAAS,EAAE,OAAO;WAUvB,+BAA+B,CAAC,2BAA2B,CAAC,EAAE,2BAA2B,GAAG,qBAAqB;WAQjH,qCAAqC,CAAC,iCAAiC,EAAE,MAAM,GAAG,qBAAqB;WAwNvG,sBAAsB,IAAI,qBAAqB;IAK7D;;;;;OAKG;IACI,SAAS,EAAE,cAAc,CAAC;IAEjC;;;;;OAKG;IACH,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED;;;;;OAKG;IACH,IAAW,MAAM,IAAI,WAAW,CAK/B;IAED;;;;;;OAMG;IACI,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAO9C;;;;;OAKG;IACH,IAAW,wBAAwB,IAAI,MAAM,CAE5C;CAEJ","file":"AudioOutputFormat.d.ts","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT license.\n\nimport { INumberDictionary } from \"../../common/Exports\";\nimport { SpeechSynthesisOutputFormat } from \"../SpeechSynthesisOutputFormat\";\nimport { AudioStreamFormatImpl } from \"./AudioStreamFormat\";\n\nexport enum AudioFormatTag {\n    PCM = 1,\n    MuLaw,\n    Siren,\n    MP3,\n    SILKSkype,\n    Opus,\n}\n\n/**\n * @private\n * @class AudioOutputFormatImpl\n * Added in version 1.11.0\n */\n// tslint:disable-next-line:max-classes-per-file\nexport class AudioOutputFormatImpl extends AudioStreamFormatImpl {\n    public static SpeechSynthesisOutputFormatToString: INumberDictionary<string> = {\n        [SpeechSynthesisOutputFormat.Raw8Khz8BitMonoMULaw]: \"raw-8khz-8bit-mono-mulaw\",\n        [SpeechSynthesisOutputFormat.Riff16Khz16KbpsMonoSiren]: \"riff-16khz-16kbps-mono-siren\",\n        [SpeechSynthesisOutputFormat.Audio16Khz16KbpsMonoSiren]: \"audio-16khz-16kbps-mono-siren\",\n        [SpeechSynthesisOutputFormat.Audio16Khz32KBitRateMonoMp3]: \"audio-16khz-32kbitrate-mono-mp3\",\n        [SpeechSynthesisOutputFormat.Audio16Khz128KBitRateMonoMp3]: \"audio-16khz-128kbitrate-mono-mp3\",\n        [SpeechSynthesisOutputFormat.Audio16Khz64KBitRateMonoMp3]: \"audio-16khz-64kbitrate-mono-mp3\",\n        [SpeechSynthesisOutputFormat.Audio24Khz48KBitRateMonoMp3]: \"audio-24khz-48kbitrate-mono-mp3\",\n        [SpeechSynthesisOutputFormat.Audio24Khz96KBitRateMonoMp3]: \"audio-24khz-96kbitrate-mono-mp3\",\n        [SpeechSynthesisOutputFormat.Audio24Khz160KBitRateMonoMp3]: \"audio-24khz-160kbitrate-mono-mp3\",\n        [SpeechSynthesisOutputFormat.Raw16Khz16BitMonoTrueSilk]: \"raw-16khz-16bit-mono-truesilk\",\n        [SpeechSynthesisOutputFormat.Riff16Khz16BitMonoPcm]: \"riff-16khz-16bit-mono-pcm\",\n        [SpeechSynthesisOutputFormat.Riff8Khz16BitMonoPcm]: \"riff-8khz-16bit-mono-pcm\",\n        [SpeechSynthesisOutputFormat.Riff24Khz16BitMonoPcm]: \"riff-24khz-16bit-mono-pcm\",\n        [SpeechSynthesisOutputFormat.Riff8Khz8BitMonoMULaw]: \"riff-8khz-8bit-mono-mulaw\",\n        [SpeechSynthesisOutputFormat.Raw16Khz16BitMonoPcm]: \"raw-16khz-16bit-mono-pcm\",\n        [SpeechSynthesisOutputFormat.Raw24Khz16BitMonoPcm]: \"raw-24khz-16bit-mono-pcm\",\n        [SpeechSynthesisOutputFormat.Raw8Khz16BitMonoPcm]: \"raw-8khz-16bit-mono-pcm\",\n        [SpeechSynthesisOutputFormat.Ogg16Khz16BitMonoOpus]: \"ogg-16khz-16bit-mono-opus\",\n        [SpeechSynthesisOutputFormat.Ogg24Khz16BitMonoOpus]: \"ogg-24khz-16bit-mono-opus\",\n    };\n    private priAudioFormatString: string;\n    /**\n     * audio format string for synthesis request, which may differ from priAudioFormatString.\n     * e.g. for riff format, we will request raw format and add a header in SDK side.\n     */\n    private readonly priRequestAudioFormatString: string;\n    private readonly priHasHeader: boolean;\n\n    /**\n     * Creates an instance with the given values.\n     * @constructor\n     * @param formatTag\n     * @param {number} samplesPerSec - Samples per second.\n     * @param {number} bitsPerSample - Bits per sample.\n     * @param {number} channels - Number of channels.\n     * @param avgBytesPerSec\n     * @param blockAlign\n     * @param audioFormatString\n     * @param requestAudioFormatString\n     * @param hasHeader\n     */\n    public constructor(formatTag: AudioFormatTag,\n                       channels: number,\n                       samplesPerSec: number,\n                       avgBytesPerSec: number,\n                       blockAlign: number,\n                       bitsPerSample: number,\n                       audioFormatString: string,\n                       requestAudioFormatString: string,\n                       hasHeader: boolean) {\n        super(samplesPerSec, bitsPerSample, channels);\n        this.formatTag = formatTag;\n        this.avgBytesPerSec = avgBytesPerSec;\n        this.blockAlign = blockAlign;\n        this.priAudioFormatString = audioFormatString;\n        this.priRequestAudioFormatString = requestAudioFormatString;\n        this.priHasHeader = hasHeader;\n    }\n\n    public static fromSpeechSynthesisOutputFormat(speechSynthesisOutputFormat?: SpeechSynthesisOutputFormat): AudioOutputFormatImpl {\n        if (speechSynthesisOutputFormat === undefined) {\n            return AudioOutputFormatImpl.getDefaultOutputFormat();\n        }\n        return AudioOutputFormatImpl.fromSpeechSynthesisOutputFormatString(\n            AudioOutputFormatImpl.SpeechSynthesisOutputFormatToString[speechSynthesisOutputFormat]);\n    }\n\n    public static fromSpeechSynthesisOutputFormatString(speechSynthesisOutputFormatString: string): AudioOutputFormatImpl {\n        switch (speechSynthesisOutputFormatString) {\n            case \"raw-8khz-8bit-mono-mulaw\":\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.PCM,\n                    1,\n                    8000,\n                    8000,\n                    1,\n                    8,\n                    speechSynthesisOutputFormatString,\n                    speechSynthesisOutputFormatString,\n                    false);\n            case \"riff-16khz-16kbps-mono-siren\":\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.Siren,\n                    1,\n                    16000,\n                    2000,\n                    40,\n                    0,\n                    speechSynthesisOutputFormatString,\n                    \"audio-16khz-16kbps-mono-siren\",\n                    true);\n            case \"audio-16khz-16kbps-mono-siren\":\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.Siren,\n                    1,\n                    16000,\n                    2000,\n                    40,\n                    0,\n                    speechSynthesisOutputFormatString,\n                    speechSynthesisOutputFormatString,\n                    false);\n            case \"audio-16khz-32kbitrate-mono-mp3\":\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.MP3,\n                    1,\n                    16000,\n                    32 << 7,\n                    2,\n                    16,\n                    speechSynthesisOutputFormatString,\n                    speechSynthesisOutputFormatString,\n                    false);\n            case \"audio-16khz-128kbitrate-mono-mp3\":\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.MP3,\n                    1,\n                    16000,\n                    128 << 7,\n                    2,\n                    16,\n                    speechSynthesisOutputFormatString,\n                    speechSynthesisOutputFormatString,\n                    false);\n            case \"audio-16khz-64kbitrate-mono-mp3\":\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.MP3,\n                    1,\n                    16000,\n                    64 << 7,\n                    2,\n                    16,\n                    speechSynthesisOutputFormatString,\n                    speechSynthesisOutputFormatString,\n                    false);\n            case \"audio-24khz-48kbitrate-mono-mp3\":\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.MP3,\n                    1,\n                    16000,\n                    48 << 7,\n                    2,\n                    16,\n                    speechSynthesisOutputFormatString,\n                    speechSynthesisOutputFormatString,\n                    false);\n            case \"audio-24khz-96kbitrate-mono-mp3\":\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.MP3,\n                    1,\n                    16000,\n                    96 << 7,\n                    2,\n                    16,\n                    speechSynthesisOutputFormatString,\n                    speechSynthesisOutputFormatString,\n                    false);\n            case \"audio-24khz-160kbitrate-mono-mp3\":\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.MP3,\n                    1,\n                    16000,\n                    160 << 7,\n                    2,\n                    16,\n                    speechSynthesisOutputFormatString,\n                    speechSynthesisOutputFormatString,\n                    false);\n            case \"raw-16khz-16bit-mono-truesilk\":\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.SILKSkype,\n                    1,\n                    16000,\n                    32000,\n                    2,\n                    16,\n                    speechSynthesisOutputFormatString,\n                    speechSynthesisOutputFormatString,\n                    false);\n\n            case \"riff-8khz-16bit-mono-pcm\":\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.PCM,\n                    1,\n                    8000,\n                    16000,\n                    2,\n                    16,\n                    speechSynthesisOutputFormatString,\n                    \"raw-8khz-16bit-mono-pcm\",\n                    true);\n            case \"riff-24khz-16bit-mono-pcm\":\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.PCM,\n                    1,\n                    24000,\n                    48000,\n                    2,\n                    16,\n                    speechSynthesisOutputFormatString,\n                    \"raw-24khz-16bit-mono-pcm\",\n                    true);\n            case \"riff-8khz-8bit-mono-mulaw\":\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.MuLaw,\n                    1,\n                    8000,\n                    8000,\n                    1,\n                    8,\n                    speechSynthesisOutputFormatString,\n                    \"raw-8khz-8bit-mono-mulaw\",\n                    true);\n            case \"raw-16khz-16bit-mono-pcm\":\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.PCM,\n                    1,\n                    16000,\n                    32000,\n                    2,\n                    16,\n                    speechSynthesisOutputFormatString,\n                    \"raw-16khz-16bit-mono-pcm\",\n                    false);\n            case \"raw-24khz-16bit-mono-pcm\":\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.PCM,\n                    1,\n                    24000,\n                    48000,\n                    2,\n                    16,\n                    speechSynthesisOutputFormatString,\n                    \"raw-24khz-16bit-mono-pcm\",\n                    false);\n            case \"raw-8khz-16bit-mono-pcm\":\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.PCM,\n                    1,\n                    8000,\n                    16000,\n                    2,\n                    16,\n                    speechSynthesisOutputFormatString,\n                    \"raw-8khz-16bit-mono-pcm\",\n                    false);\n            case \"ogg-16khz-16bit-mono-opus\":\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.Opus,\n                    1,\n                    16000,\n                    8192,\n                    2,\n                    16,\n                    speechSynthesisOutputFormatString,\n                    \"ogg-16khz-16bit-mono-opus\",\n                    false);\n            case \"ogg-24khz-16bit-mono-opus\":\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.Opus,\n                    1,\n                    24000,\n                    8192,\n                    2,\n                    16,\n                    speechSynthesisOutputFormatString,\n                    \"ogg-24khz-16bit-mono-opus\",\n                    false);\n            case \"riff-16khz-16bit-mono-pcm\":\n            default:\n                return new AudioOutputFormatImpl(\n                    AudioFormatTag.PCM,\n                    1,\n                    16000,\n                    32000,\n                    2,\n                    16,\n                    \"riff-16khz-16bit-mono-pcm\",\n                    \"raw-16khz-16bit-mono-pcm\",\n                    true);\n        }\n    }\n\n    public static getDefaultOutputFormat(): AudioOutputFormatImpl {\n        return AudioOutputFormatImpl.fromSpeechSynthesisOutputFormatString(\n            (typeof window !== \"undefined\") ? \"audio-24khz-48kbitrate-mono-mp3\" : \"riff-16khz-16bit-mono-pcm\");\n    }\n\n    /**\n     * The format tag of the audio\n     * @AudioFormatTag AudioOutputFormatImpl.prototype.formatTag\n     * @function\n     * @public\n     */\n    public formatTag: AudioFormatTag;\n\n    /**\n     * Specifies if this audio output format has a header\n     * @boolean AudioOutputFormatImpl.prototype.hasHeader\n     * @function\n     * @public\n     */\n    public get hasHeader(): boolean {\n        return this.priHasHeader;\n    }\n\n    /**\n     * Specifies the header of this format\n     * @ArrayBuffer AudioOutputFormatImpl.prototype.header\n     * @function\n     * @public\n     */\n    public get header(): ArrayBuffer {\n        if (this.hasHeader) {\n            return this.privHeader;\n        }\n        return undefined;\n    }\n\n    /**\n     * Updates the header based on the audio length\n     * @member AudioOutputFormatImpl.updateHeader\n     * @function\n     * @public\n     * @param {number} audioLength - the audio length\n     */\n    public updateHeader(audioLength: number): void {\n        if (this.priHasHeader) {\n            const view = new DataView(this.privHeader);\n            view.setUint32(40, audioLength, true);\n        }\n    }\n\n    /**\n     * Specifies the audio format string to be sent to the service\n     * @string AudioOutputFormatImpl.prototype.requestAudioFormatString\n     * @function\n     * @public\n     */\n    public get requestAudioFormatString(): string {\n        return this.priRequestAudioFormatString;\n    }\n\n}\n"]}