UNPKG

@voice-ping/cognitive-services-speech

Version:

VoicePing Cognitive Services Speech SDK for JavaScript forked from Microsoft

279 lines (277 loc) 9.43 kB
// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. import { FileAudioSource, MicAudioSource, PcmRecorder, } from "../../common.browser/Exports"; import { Contracts } from "../Contracts"; import { AudioInputStream, PullAudioInputStreamCallback, PullAudioOutputStream, PushAudioOutputStream, PushAudioOutputStreamCallback, SpeakerAudioDestination } from "../Exports"; import { AudioFileWriter } from "./AudioFileWriter"; import { PullAudioInputStreamImpl } from "./AudioInputStream"; import { PushAudioOutputStreamImpl } from "./AudioOutputStream"; /** * Represents audio input configuration used for specifying what type of input to use (microphone, file, stream). * @class AudioConfig * Updated in version 1.11.0 */ export class AudioConfig { /** * Creates an AudioConfig object representing the default microphone on the system. * @member AudioConfig.fromDefaultMicrophoneInput * @function * @public * @returns {AudioConfig} The audio input configuration being created. */ static fromDefaultMicrophoneInput() { const pcmRecorder = new PcmRecorder(); return new AudioConfigImpl(new MicAudioSource(pcmRecorder)); } /** * Creates an AudioConfig object representing a microphone with the specified device ID. * @member AudioConfig.fromMicrophoneInput * @function * @public * @param {string | undefined} deviceId - Specifies the device ID of the microphone to be used. * Default microphone is used the value is omitted. * @returns {AudioConfig} The audio input configuration being created. */ static fromMicrophoneInput(deviceId) { const pcmRecorder = new PcmRecorder(); return new AudioConfigImpl(new MicAudioSource(pcmRecorder, deviceId)); } /** * Creates an AudioConfig object representing the specified file. * @member AudioConfig.fromWavFileInput * @function * @public * @param {File} fileName - Specifies the audio input file. Currently, only WAV / PCM is supported. * @returns {AudioConfig} The audio input configuration being created. */ static fromWavFileInput(file) { return new AudioConfigImpl(new FileAudioSource(file)); } /** * Creates an AudioConfig object representing the specified stream. * @member AudioConfig.fromStreamInput * @function * @public * @param {AudioInputStream | PullAudioInputStreamCallback} audioStream - Specifies the custom audio input * stream. Currently, only WAV / PCM is supported. * @returns {AudioConfig} The audio input configuration being created. */ static fromStreamInput(audioStream) { if (audioStream instanceof PullAudioInputStreamCallback) { return new AudioConfigImpl(new PullAudioInputStreamImpl(audioStream)); } if (audioStream instanceof AudioInputStream) { return new AudioConfigImpl(audioStream); } throw new Error("Not Supported Type"); } /** * Creates an AudioConfig object representing the default speaker. * @member AudioConfig.fromDefaultSpeakerOutput * @function * @public * @returns {AudioConfig} The audio output configuration being created. * Added in version 1.11.0 */ static fromDefaultSpeakerOutput() { return new AudioOutputConfigImpl(new SpeakerAudioDestination()); } /** * Creates an AudioConfig object representing the custom IPlayer object. * You can use the IPlayer object to control pause, resume, etc. * @member AudioConfig.fromSpeakerOutput * @function * @public * @param {IPlayer} player - the IPlayer object for playback. * @returns {AudioConfig} The audio output configuration being created. * Added in version 1.12.0 */ static fromSpeakerOutput(player) { if (player === undefined) { return AudioConfig.fromDefaultSpeakerOutput(); } if (player instanceof SpeakerAudioDestination) { return new AudioOutputConfigImpl(player); } throw new Error("Not Supported Type"); } /** * Creates an AudioConfig object representing a specified output audio file * @member AudioConfig.fromAudioFileOutput * @function * @public * @param {PathLike} filename - the filename of the output audio file * @returns {AudioConfig} The audio output configuration being created. * Added in version 1.11.0 */ static fromAudioFileOutput(filename) { return new AudioOutputConfigImpl(new AudioFileWriter(filename)); } /** * Creates an AudioConfig object representing a specified audio output stream * @member AudioConfig.fromStreamOutput * @function * @public * @param {AudioOutputStream | PushAudioOutputStreamCallback} audioStream - Specifies the custom audio output * stream. * @returns {AudioConfig} The audio output configuration being created. * Added in version 1.11.0 */ static fromStreamOutput(audioStream) { if (audioStream instanceof PushAudioOutputStreamCallback) { return new AudioOutputConfigImpl(new PushAudioOutputStreamImpl(audioStream)); } if (audioStream instanceof PushAudioOutputStream) { return new AudioOutputConfigImpl(audioStream); } if (audioStream instanceof PullAudioOutputStream) { return new AudioOutputConfigImpl(audioStream); } throw new Error("Not Supported Type"); } } /** * Represents audio input stream used for custom audio input configurations. * @private * @class AudioConfigImpl */ // tslint:disable-next-line:max-classes-per-file export class AudioConfigImpl extends AudioConfig { /** * Creates and initializes an instance of this class. * @constructor * @param {IAudioSource} source - An audio source. */ constructor(source) { super(); this.privSource = source; } /** * Format information for the audio */ get format() { return this.privSource.format; } /** * @member AudioConfigImpl.prototype.close * @function * @public */ close() { this.privSource.turnOff(); } /** * @member AudioConfigImpl.prototype.id * @function * @public */ id() { return this.privSource.id(); } /** * @member AudioConfigImpl.prototype.blob * @function * @public */ get blob() { return this.privSource.blob; } /** * @member AudioConfigImpl.prototype.turnOn * @function * @public * @returns {Promise<boolean>} A promise. */ turnOn() { return this.privSource.turnOn(); } /** * @member AudioConfigImpl.prototype.attach * @function * @public * @param {string} audioNodeId - The audio node id. * @returns {Promise<IAudioStreamNode>} A promise. */ attach(audioNodeId) { return this.privSource.attach(audioNodeId); } /** * @member AudioConfigImpl.prototype.detach * @function * @public * @param {string} audioNodeId - The audio node id. */ detach(audioNodeId) { return this.privSource.detach(audioNodeId); } /** * @member AudioConfigImpl.prototype.turnOff * @function * @public * @returns {Promise<boolean>} A promise. */ turnOff() { return this.privSource.turnOff(); } /** * @member AudioConfigImpl.prototype.events * @function * @public * @returns {EventSource<AudioSourceEvent>} An event source for audio events. */ get events() { return this.privSource.events; } setProperty(name, value) { Contracts.throwIfNull(value, "value"); if (undefined !== this.privSource.setProperty) { this.privSource.setProperty(name, value); } else { throw new Error("This AudioConfig instance does not support setting properties."); } } getProperty(name, def) { if (undefined !== this.privSource.getProperty) { return this.privSource.getProperty(name, def); } else { throw new Error("This AudioConfig instance does not support getting properties."); } return def; } get deviceInfo() { return this.privSource.deviceInfo; } } // tslint:disable-next-line:max-classes-per-file export class AudioOutputConfigImpl extends AudioConfig { /** * Creates and initializes an instance of this class. * @constructor * @param {IAudioDestination} destination - An audio destination. */ constructor(destination) { super(); this.privDestination = destination; } set format(format) { this.privDestination.format = format; } write(buffer) { this.privDestination.write(buffer); } close() { this.privDestination.close(); } id() { return this.privDestination.id(); } setProperty(name, value) { throw new Error("This AudioConfig instance does not support setting properties."); } getProperty(name, def) { throw new Error("This AudioConfig instance does not support getting properties."); } } //# sourceMappingURL=AudioConfig.js.map