{"version":3,"sources":["webpack:///./node_modules/recorder-js/lib/index.js","webpack:///./src/views/recorder/lib/recorder.ts","webpack:///./node_modules/inline-worker/index.js","webpack:///./node_modules/recorder-js/lib/microphone.js","webpack:///./src/views/recorder/lib/devices.ts","webpack:///./node_modules/recorder-js/index.js"],"names":["Object","defineProperty","exports","value","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","key","Constructor","protoProps","staticProps","prototype","_microphone","_microphone2","_interopRequireDefault","obj","__esModule","default","_classCallCheck","instance","TypeError","defaultConfig","nFrequencyBars","onAnalysed","Recorder","audioContext","config","arguments","undefined","this","assign","audioInput","realAudioInput","inputPoint","audioRecorder","rafID","analyserContext","recIndex","stream","updateAnalysers","bind","_this","Promise","resolve","createGain","createMediaStreamSource","connect","analyserNode","createAnalyser","fftSize","zeroGain","gain","destination","_this2","reject","clear","record","_this3","stop","getBuffer","buffer","exportWAV","blob","requestAnimationFrame","freqByteData","Uint8Array","frequencyBinCount","getByteFrequencyData","data","Array","lastNonZero","datum","idx","Math","floor","lineTo","handler","download","filename","forceDownload","onupdate","muted","prevGain","isRecording","inputDevice","getInputDevice","constraints","video","audio","channelCount","echoCancellation","deviceId","exact","navigator","mediaDevices","getUserMedia","_micCaptured","getTracks","forEach","t","console","log","recorder","res","stopAudio","now","Date","recordedAt","toISOString","title","i18n","toLocaleString","clearInterval","interval","track","src","disconnect","analyzer","context","close","gainNode","setValueAtTime","currentTime","toggleMuted","window","AudioContext","webkitAudioContext","dest","createMediaStreamDestination","setInterval","sum","reduce","cum","curr","vol","duration","init","start","InlineWorker","func","self","functionBody","WORKER_ENABLED","toString","trim","match","global","Worker","URL","createObjectURL","Blob","type","postMessage","setTimeout","onmessage","module","_inlineWorker","_inlineWorker2","bufferLen","numChannels","mimeType","Microphone","source","recording","callbacks","node","createScriptProcessor","createJavaScriptNode","call","onaudioprocess","e","channel","push","inputBuffer","getChannelData","worker","command","recLength","recBuffers","sampleRate","initBuffers","buffers","mergeBuffers","interleaved","interleave","dataview","encodeWAV","audioBlob","result","Float32Array","offset","set","inputL","inputR","index","inputIndex","floatTo16BitPCM","output","input","s","max","min","setInt16","writeString","view","string","setUint8","charCodeAt","samples","ArrayBuffer","DataView","setUint32","setUint16","cb","pop","callback","Error","a","document","createElement","style","body","appendChild","url","href","click","revokeObjectURL","removeChild","selectDevice","id","LocalStorage","setInputDevice","setVideoInputDevice","getVideoInputDevice","getDevices","enumerateDevices","warn","devices","deviceType","inputDevices","filter","device","kind","map","name","label","error"],"mappings":"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","file":"assets/js/chunk-a65348e4.80d6b348.js","sourcesContent":["'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _microphone = require('./microphone');\n\nvar _microphone2 = _interopRequireDefault(_microphone);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar defaultConfig = {\n nFrequencyBars: 255,\n onAnalysed: null\n};\n\nvar Recorder = function () {\n function Recorder(audioContext) {\n var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Recorder);\n\n this.config = Object.assign({}, defaultConfig, config);\n\n this.audioContext = audioContext;\n this.audioInput = null;\n this.realAudioInput = null;\n this.inputPoint = null;\n this.audioRecorder = null;\n this.rafID = null;\n this.analyserContext = null;\n this.recIndex = 0;\n this.stream = null;\n\n this.updateAnalysers = this.updateAnalysers.bind(this);\n }\n\n _createClass(Recorder, [{\n key: 'init',\n value: function init(stream) {\n var _this = this;\n\n return new Promise(function (resolve) {\n _this.inputPoint = _this.audioContext.createGain();\n\n _this.stream = stream;\n\n _this.realAudioInput = _this.audioContext.createMediaStreamSource(stream);\n _this.audioInput = _this.realAudioInput;\n _this.audioInput.connect(_this.inputPoint);\n\n _this.analyserNode = _this.audioContext.createAnalyser();\n _this.analyserNode.fftSize = 2048;\n _this.inputPoint.connect(_this.analyserNode);\n\n _this.audioRecorder = new _microphone2.default(_this.inputPoint);\n\n var zeroGain = _this.audioContext.createGain();\n zeroGain.gain.value = 0.0;\n\n _this.inputPoint.connect(zeroGain);\n zeroGain.connect(_this.audioContext.destination);\n\n _this.updateAnalysers();\n\n resolve();\n });\n }\n }, {\n key: 'start',\n value: function start() {\n var _this2 = this;\n\n return new Promise(function (resolve, reject) {\n if (!_this2.audioRecorder) {\n reject('Not currently recording');\n return;\n }\n\n _this2.audioRecorder.clear();\n _this2.audioRecorder.record();\n\n resolve(_this2.stream);\n });\n }\n }, {\n key: 'stop',\n value: function stop() {\n var _this3 = this;\n\n return new Promise(function (resolve) {\n _this3.audioRecorder.stop();\n\n _this3.audioRecorder.getBuffer(function (buffer) {\n _this3.audioRecorder.exportWAV(function (blob) {\n return resolve({ buffer: buffer, blob: blob });\n });\n });\n });\n }\n }, {\n key: 'updateAnalysers',\n value: function updateAnalysers() {\n if (this.config.onAnalysed) {\n requestAnimationFrame(this.updateAnalysers);\n\n var freqByteData = new Uint8Array(this.analyserNode.frequencyBinCount);\n\n this.analyserNode.getByteFrequencyData(freqByteData);\n\n var data = new Array(255);\n var lastNonZero = 0;\n var datum = void 0;\n\n for (var idx = 0; idx < 255; idx += 1) {\n datum = Math.floor(freqByteData[idx]) - Math.floor(freqByteData[idx]) % 5;\n\n if (datum !== 0) {\n lastNonZero = idx;\n }\n\n data[idx] = datum;\n }\n\n this.config.onAnalysed({ data: data, lineTo: lastNonZero });\n }\n }\n }, {\n key: 'setOnAnalysed',\n value: function setOnAnalysed(handler) {\n this.config.onAnalysed = handler;\n }\n }]);\n\n return Recorder;\n}();\n\nRecorder.download = function download(blob) {\n var filename = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'audio';\n\n _microphone2.default.forceDownload(blob, filename + '.wav');\n};\n\nexports.default = Recorder;","import Recorder from \"recorder-js\";\r\n\r\nimport { Recording } from \"@/core/models\";\r\nimport i18n from \"@/core/plugins/i18n\";\r\nimport { getInputDevice } from \"./devices\";\r\n\r\ntype Status = {\r\n vol: number;\r\n duration: number;\r\n};\r\nexport default class {\r\n interval: any;\r\n muted = false;\r\n prevGain = 1;\r\n isRecording = false;\r\n recorder?: Recorder;\r\n onupdate: (status: Status) => void;\r\n\r\n gainNode?: GainNode;\r\n stream?: MediaStream;\r\n context?: AudioContext;\r\n analyzer?: AnalyserNode;\r\n src?: MediaStreamAudioSourceNode;\r\n dest?: MediaStreamAudioDestinationNode;\r\n\r\n constructor(onupdate: (status: Status) => void = () => {}) {\r\n this.onupdate = onupdate;\r\n }\r\n\r\n async start() {\r\n const inputDevice = getInputDevice();\r\n const constraints: MediaStreamConstraints = {\r\n video: false,\r\n audio: {\r\n channelCount: 1,\r\n echoCancellation: false,\r\n deviceId: inputDevice ? { exact: inputDevice } : undefined,\r\n },\r\n };\r\n\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\r\n this.stream = stream;\r\n this._micCaptured(stream);\r\n return true;\r\n } catch (error) {\r\n this.stream?.getTracks().forEach(t => t.stop());\r\n console.log(\"Mic error\", error);\r\n return false;\r\n }\r\n }\r\n\r\n async stop() {\r\n const res = await this.recorder?.stop();\r\n await this.stopAudio();\r\n this.isRecording = false;\r\n\r\n if (!res) return null;\r\n\r\n const { blob } = res;\r\n const now = new Date();\r\n const record = {\r\n blob,\r\n recordedAt: now.toISOString(),\r\n title: `${i18n.t(\"rec.prefix\")} ${now.toLocaleString()}`,\r\n } as Recording;\r\n return record;\r\n }\r\n\r\n async cancel() {\r\n await this.recorder?.stop();\r\n await this.stopAudio();\r\n }\r\n\r\n async stopAudio() {\r\n clearInterval(this.interval);\r\n this.stream?.getTracks().forEach((track: MediaStreamTrack) => track.stop());\r\n this.src?.disconnect();\r\n this.analyzer?.disconnect();\r\n await this.context?.close();\r\n }\r\n\r\n toggleMuted() {\r\n // todo - transcription must be paused, not stopped\r\n if (this.muted)\r\n this.gainNode?.gain.setValueAtTime(\r\n this.prevGain,\r\n this.context?.currentTime || 0,\r\n );\r\n else this.gainNode?.gain.setValueAtTime(0, this.context?.currentTime || 0);\r\n this.muted = !this.muted;\r\n }\r\n\r\n setVolume(value: number) {\r\n if (value == 0) this.toggleMuted();\r\n else {\r\n this.gainNode?.gain.setValueAtTime(value, this.context?.currentTime || 0);\r\n this.prevGain = value;\r\n }\r\n }\r\n\r\n async _micCaptured(stream: MediaStream) {\r\n // @ts-ignore\r\n this.context = new (window.AudioContext || window.webkitAudioContext)();\r\n this.analyzer = this.context.createAnalyser();\r\n this.src = this.context.createMediaStreamSource(stream);\r\n this.dest = this.context.createMediaStreamDestination();\r\n this.gainNode = this.context.createGain();\r\n\r\n this.analyzer.fftSize = 256;\r\n this.src.connect(this.analyzer);\r\n this.analyzer.connect(this.gainNode);\r\n this.gainNode.connect(this.dest);\r\n\r\n this.interval = setInterval(() => {\r\n if (!this.analyzer) return;\r\n const buffer = new Uint8Array(this.analyzer.frequencyBinCount);\r\n this.analyzer.getByteFrequencyData(buffer);\r\n const sum = buffer.reduce((cum, curr) => cum + curr, 0);\r\n const vol = sum / buffer.length;\r\n const duration = this.context?.currentTime || 0;\r\n this.onupdate({ vol, duration });\r\n }, 50);\r\n\r\n this.recorder = new Recorder(this.context);\r\n await this.recorder.init(this.dest.stream);\r\n await this.recorder.start();\r\n this.isRecording = true;\r\n }\r\n}\r\n","var WORKER_ENABLED = !!(global === global.window && global.URL && global.Blob && global.Worker);\n\nfunction InlineWorker(func, self) {\n var _this = this;\n var functionBody;\n\n self = self || {};\n\n if (WORKER_ENABLED) {\n functionBody = func.toString().trim().match(\n /^function\\s*\\w*\\s*\\([\\w\\s,]*\\)\\s*{([\\w\\W]*?)}$/\n )[1];\n\n return new global.Worker(global.URL.createObjectURL(\n new global.Blob([ functionBody ], { type: \"text/javascript\" })\n ));\n }\n\n function postMessage(data) {\n setTimeout(function() {\n _this.onmessage({ data: data });\n }, 0);\n }\n\n this.self = self;\n this.self.postMessage = postMessage;\n\n setTimeout(func.bind(self, self), 0);\n}\n\nInlineWorker.prototype.postMessage = function postMessage(data) {\n var _this = this;\n\n setTimeout(function() {\n _this.self.onmessage({ data: data });\n }, 0);\n};\n\nmodule.exports = InlineWorker;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* eslint-disable */\n/**\n * License (MIT)\n *\n * Copyright © 2013 Matt Diamond\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included\n * in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n */\n\n\nvar _inlineWorker = require('inline-worker');\n\nvar _inlineWorker2 = _interopRequireDefault(_inlineWorker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar defaultConfig = {\n bufferLen: 4096,\n numChannels: 2,\n mimeType: 'audio/wav'\n};\n\nvar Microphone = function () {\n function Microphone(source, config) {\n var _this = this;\n\n _classCallCheck(this, Microphone);\n\n this.config = Object.assign({}, defaultConfig, config);\n\n this.recording = false;\n\n this.callbacks = {\n getBuffer: [],\n exportWAV: []\n };\n\n this.context = source.context;\n this.node = (this.context.createScriptProcessor || this.context.createJavaScriptNode).call(this.context, this.config.bufferLen, this.config.numChannels, this.config.numChannels);\n\n this.node.onaudioprocess = function (e) {\n if (!_this.recording) return;\n\n var buffer = [];\n for (var channel = 0; channel < _this.config.numChannels; channel++) {\n buffer.push(e.inputBuffer.getChannelData(channel));\n }\n _this.worker.postMessage({\n command: 'record',\n buffer: buffer\n });\n };\n\n source.connect(this.node);\n this.node.connect(this.context.destination); //this should not be necessary\n\n var self = {};\n this.worker = new _inlineWorker2.default(function () {\n var recLength = 0,\n recBuffers = [],\n sampleRate = void 0,\n numChannels = void 0;\n\n this.onmessage = function (e) {\n switch (e.data.command) {\n case 'init':\n init(e.data.config);\n break;\n case 'record':\n record(e.data.buffer);\n break;\n case 'exportWAV':\n exportWAV(e.data.type);\n break;\n case 'getBuffer':\n getBuffer();\n break;\n case 'clear':\n clear();\n break;\n }\n };\n\n function init(config) {\n sampleRate = config.sampleRate;\n numChannels = config.numChannels;\n initBuffers();\n }\n\n function record(inputBuffer) {\n for (var channel = 0; channel < numChannels; channel++) {\n recBuffers[channel].push(inputBuffer[channel]);\n }\n recLength += inputBuffer[0].length;\n }\n\n function exportWAV(type) {\n var buffers = [];\n for (var channel = 0; channel < numChannels; channel++) {\n buffers.push(mergeBuffers(recBuffers[channel], recLength));\n }\n var interleaved = void 0;\n if (numChannels === 2) {\n interleaved = interleave(buffers[0], buffers[1]);\n } else {\n interleaved = buffers[0];\n }\n var dataview = encodeWAV(interleaved);\n var audioBlob = new Blob([dataview], { type: type });\n\n this.postMessage({ command: 'exportWAV', data: audioBlob });\n }\n\n function getBuffer() {\n var buffers = [];\n for (var channel = 0; channel < numChannels; channel++) {\n buffers.push(mergeBuffers(recBuffers[channel], recLength));\n }\n this.postMessage({ command: 'getBuffer', data: buffers });\n }\n\n function clear() {\n recLength = 0;\n recBuffers = [];\n initBuffers();\n }\n\n function initBuffers() {\n for (var channel = 0; channel < numChannels; channel++) {\n recBuffers[channel] = [];\n }\n }\n\n function mergeBuffers(recBuffers, recLength) {\n var result = new Float32Array(recLength);\n var offset = 0;\n for (var i = 0; i < recBuffers.length; i++) {\n result.set(recBuffers[i], offset);\n offset += recBuffers[i].length;\n }\n return result;\n }\n\n function interleave(inputL, inputR) {\n var length = inputL.length + inputR.length;\n var result = new Float32Array(length);\n\n var index = 0,\n inputIndex = 0;\n\n while (index < length) {\n result[index++] = inputL[inputIndex];\n result[index++] = inputR[inputIndex];\n inputIndex++;\n }\n return result;\n }\n\n function floatTo16BitPCM(output, offset, input) {\n for (var i = 0; i < input.length; i++, offset += 2) {\n var s = Math.max(-1, Math.min(1, input[i]));\n output.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7FFF, true);\n }\n }\n\n function writeString(view, offset, string) {\n for (var i = 0; i < string.length; i += 1) {\n view.setUint8(offset + i, string.charCodeAt(i));\n }\n }\n\n function encodeWAV(samples) {\n var buffer = new ArrayBuffer(44 + samples.length * 2);\n var view = new DataView(buffer);\n\n /* RIFF identifier */\n writeString(view, 0, 'RIFF');\n /* RIFF chunk length */\n view.setUint32(4, 36 + samples.length * 2, true);\n /* RIFF type */\n writeString(view, 8, 'WAVE');\n /* format chunk identifier */\n writeString(view, 12, 'fmt ');\n /* format chunk length */\n view.setUint32(16, 16, true);\n /* sample format (raw) */\n view.setUint16(20, 1, true);\n /* channel count */\n view.setUint16(22, numChannels, true);\n /* sample rate */\n view.setUint32(24, sampleRate, true);\n /* byte rate (sample rate * block align) */\n view.setUint32(28, sampleRate * 4, true);\n /* block align (channel count * bytes per sample) */\n view.setUint16(32, numChannels * 2, true);\n /* bits per sample */\n view.setUint16(34, 16, true);\n /* data chunk identifier */\n writeString(view, 36, 'data');\n /* data chunk length */\n view.setUint32(40, samples.length * 2, true);\n\n floatTo16BitPCM(view, 44, samples);\n\n return view;\n }\n }, self);\n\n this.worker.postMessage({\n command: 'init',\n config: {\n sampleRate: this.context.sampleRate,\n numChannels: this.config.numChannels\n }\n });\n\n this.worker.onmessage = function (e) {\n var cb = _this.callbacks[e.data.command].pop();\n if (typeof cb === 'function') {\n cb(e.data.data);\n }\n };\n }\n\n _createClass(Microphone, [{\n key: 'record',\n value: function record() {\n this.recording = true;\n }\n }, {\n key: 'stop',\n value: function stop() {\n this.recording = false;\n }\n }, {\n key: 'clear',\n value: function clear() {\n this.worker.postMessage({ command: 'clear' });\n }\n }, {\n key: 'getBuffer',\n value: function getBuffer(cb) {\n cb = cb || this.config.callback;\n\n if (!cb) throw new Error('Callback not set');\n\n this.callbacks.getBuffer.push(cb);\n\n this.worker.postMessage({ command: 'getBuffer' });\n }\n }, {\n key: 'exportWAV',\n value: function exportWAV(cb, mimeType) {\n mimeType = mimeType || this.config.mimeType;\n cb = cb || this.config.callback;\n\n if (!cb) throw new Error('Callback not set');\n\n this.callbacks.exportWAV.push(cb);\n\n this.worker.postMessage({\n command: 'exportWAV',\n type: mimeType\n });\n }\n }]);\n\n return Microphone;\n}();\n\nMicrophone.forceDownload = function forceDownload(blob, filename) {\n var a = document.createElement('a');\n\n a.style = 'display: none';\n document.body.appendChild(a);\n\n var url = window.URL.createObjectURL(blob);\n\n a.href = url;\n a.download = filename;\n a.click();\n\n window.URL.revokeObjectURL(url);\n\n document.body.removeChild(a);\n};\n\nexports.default = Microphone;","import LocalStorage from \"@/core/utils/LocalStorage\";\r\n\r\ntype DeviceType = \"video\" | \"audio\";\r\nexport interface Device {\r\n id: string;\r\n name: string;\r\n}\r\n\r\nexport const selectDevice = (id: string, type: DeviceType = \"audio\") => {\r\n if (type === \"audio\") LocalStorage.setInputDevice(id);\r\n else LocalStorage.setVideoInputDevice(id);\r\n};\r\n\r\nexport const getInputDevice = (type: DeviceType = \"audio\") => {\r\n return type === \"audio\"\r\n ? LocalStorage.getInputDevice()\r\n : LocalStorage.getVideoInputDevice();\r\n};\r\n\r\nexport const getDevices = async (\r\n type: DeviceType = \"audio\",\r\n): Promise => {\r\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\r\n console.log(\"enumerateDevices() not supported.\");\r\n return [];\r\n }\r\n\r\n const inputDevice = getInputDevice();\r\n const constraints: MediaStreamConstraints =\r\n type === \"audio\"\r\n ? {\r\n video: false,\r\n audio: {\r\n channelCount: 1,\r\n echoCancellation: false,\r\n deviceId: inputDevice || undefined,\r\n },\r\n }\r\n : {\r\n audio: false,\r\n video: {\r\n deviceId: inputDevice || undefined,\r\n },\r\n };\r\n\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\r\n stream.getTracks().forEach(t => t.stop());\r\n } catch (error) {\r\n console.warn(\r\n `Warning: Access to ${\r\n type === \"audio\" ? \"microphone\" : \"camera\"\r\n } denied.`,\r\n error,\r\n );\r\n }\r\n\r\n try {\r\n const devices = await navigator.mediaDevices.enumerateDevices();\r\n const deviceType: MediaDeviceKind =\r\n type === \"audio\" ? \"audioinput\" : \"videoinput\";\r\n\r\n const inputDevices = devices\r\n .filter(device => device.kind === deviceType)\r\n .map(device => ({\r\n id: device.deviceId,\r\n name: device.label || `Unknown device (${type})`,\r\n }));\r\n\r\n if (!inputDevice && inputDevices.length > 0)\r\n selectDevice(inputDevices[0].id, type);\r\n\r\n console.log(`Found devices (${type}):`, inputDevices);\r\n\r\n return inputDevices;\r\n } catch (error) {\r\n console.error(\"Error while listing devices:\", error);\r\n return [];\r\n }\r\n};\r\n","module.exports = require('./lib/index.js');\n"],"sourceRoot":""}