UNPKG

@100mslive/hms-video-store

Version:

@100mslive Core SDK which abstracts the complexities of webRTC while providing a reactive store for data management with a unidirectional data flow

117 lines (105 loc) 3.04 kB
import { IAnalyticsPropertiesProvider } from '../../analytics/IAnalyticsPropertiesProvider'; import { HMSAudioCodec, HMSAudioMode, HMSAudioTrackSettings as IHMSAudioTrackSettings } from '../../interfaces'; export class HMSAudioTrackSettingsBuilder { private _volume = 1.0; private _codec?: HMSAudioCodec = HMSAudioCodec.OPUS; private _maxBitrate?: number = 32; private _deviceId = 'default'; private _audioMode: HMSAudioMode = HMSAudioMode.VOICE; private _advanced: Array<MediaTrackConstraintSet> = [ // @ts-ignore { autoGainControl: { exact: true } }, // @ts-ignore { noiseSuppression: { exact: true } }, // @ts-ignore { highpassFilter: { exact: true } }, // @ts-ignore { audioMirroring: { exact: true } }, ]; volume(volume: number) { if (!(0.0 <= volume && volume <= 1.0)) { throw Error('volume can only be in range [0.0, 1.0]'); } this._volume = volume; return this; } codec(codec?: HMSAudioCodec) { this._codec = codec; return this; } maxBitrate(maxBitrate?: number) { if (maxBitrate && maxBitrate <= 0) { throw Error('maxBitrate should be >= 1'); } this._maxBitrate = this._audioMode === HMSAudioMode.MUSIC ? 320 : maxBitrate; return this; } deviceId(deviceId: string) { // TODO: Validate if device-id is OK this._deviceId = deviceId; return this; } audioMode(mode: HMSAudioMode = HMSAudioMode.VOICE) { this._audioMode = mode; if (this._audioMode === HMSAudioMode.MUSIC) { this._maxBitrate = 320; } else { this._maxBitrate = 32; } return this; } advanced(advanced: Array<MediaTrackConstraintSet>) { this._advanced = advanced; return this; } build() { return new HMSAudioTrackSettings( this._volume, this._codec, this._maxBitrate, this._deviceId, this._advanced, this._audioMode, ); } } export class HMSAudioTrackSettings implements IHMSAudioTrackSettings, IAnalyticsPropertiesProvider { readonly volume?: number; readonly codec?: HMSAudioCodec; readonly maxBitrate?: number; readonly deviceId?: string; readonly advanced?: Array<MediaTrackConstraintSet>; readonly audioMode?: HMSAudioMode; constructor( volume?: number, codec?: HMSAudioCodec, maxBitrate?: number, deviceId?: string, advanced?: Array<MediaTrackConstraintSet>, audioMode?: HMSAudioMode, ) { this.volume = volume; this.codec = codec; this.maxBitrate = maxBitrate; this.deviceId = deviceId; this.advanced = advanced; this.audioMode = audioMode; if (this.audioMode === HMSAudioMode.MUSIC) { this.maxBitrate = 320; } else { this.maxBitrate = 32; } } toConstraints(): MediaTrackConstraints { return { deviceId: this.deviceId, advanced: this.audioMode === HMSAudioMode.MUSIC ? [] : this.advanced, }; } toAnalyticsProperties() { return { audio_bitrate: this.maxBitrate, audio_codec: this.codec, }; } }