{"version":3,"sources":["webpack:///./src/views/recorder/components/volume-tester/VolumeCircle.vue?84c8","webpack:///./src/views/recorder/components/volume-tester/VolumeCircle.vue","webpack:///./src/views/recorder/components/volume-tester/VolumeCircle.vue?49a3","webpack:///./src/views/recorder/components/volume-tester/VolumeCircle.vue?e908","webpack:///./src/views/recorder/components/volume-tester/VolumeCircle.vue?17a2","webpack:///./node_modules/recorder-js/lib/index.js","webpack:///./src/views/recorder/lib/recorder.ts","webpack:///./src/views/recorder/components/volume-tester/Gauge.vue?a3b6","webpack:///./src/views/recorder/components/volume-tester/Gauge.vue","webpack:///./src/views/recorder/components/volume-tester/Gauge.vue?04f3","webpack:///./src/views/recorder/components/volume-tester/Gauge.vue?26eb","webpack:///./node_modules/inline-worker/index.js","webpack:///./node_modules/recorder-js/lib/microphone.js","webpack:///./src/views/recorder/components/volume-tester/Gauge.vue?23e0","webpack:///./src/views/recorder/components/volume-tester/VolumeTester.vue?af61","webpack:///./src/views/recorder/components/volume-tester/VolumeTester.vue","webpack:///./src/views/recorder/components/volume-tester/VolumeTester.vue?afa5","webpack:///./src/views/recorder/components/volume-tester/VolumeTester.vue?e81d","webpack:///./node_modules/recorder-js/index.js"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticClass","style","VBtn","attrs","canToggle","on","$event","$emit","VIcon","_v","_s","isTesting","staticRenderFns","VolumeCircle","scale","volume","str","Vue","__decorate","Prop","default","Component","component","Object","defineProperty","exports","value","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","key","Constructor","protoProps","staticProps","prototype","_microphone","_microphone2","_interopRequireDefault","obj","__esModule","_classCallCheck","instance","TypeError","defaultConfig","nFrequencyBars","onAnalysed","Recorder","audioContext","config","arguments","undefined","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","_e","staticStyle","_l","class","active","Gauge","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","body","appendChild","url","href","click","revokeObjectURL","removeChild","toggleTest","VolumeTester","tester","cancel","components"],"mappings":"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","file":"assets/js/chunk-409b70b9.d7326e7d.js","sourcesContent":["import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"d-flex justify-center py-6\"},[_c('div',{staticClass:\"circle\"},[_c('div',{staticClass:\"volume-circle\",style:(_vm.style)}),_c(VBtn,{attrs:{\"icon\":\"\",\"width\":\"50px\",\"height\":\"50px\",\"disabled\":!_vm.canToggle},on:{\"click\":function($event){return _vm.$emit('toggle')}}},[_c(VIcon,{attrs:{\"size\":\"50\"}},[_vm._v(_vm._s(_vm.isTesting ? \"mdi-stop\" : \"mdi-volume-high\"))])],1)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport Vue from \"vue\";\r\nimport { Component, Prop } from \"vue-property-decorator\";\r\n\r\n@Component\r\nexport default class VolumeCircle extends Vue {\r\n @Prop({ default: () => 0 }) volume!: number;\r\n @Prop({ default: () => false }) isTesting!: boolean;\r\n @Prop({ default: () => true }) canToggle!: boolean;\r\n\r\n get style() {\r\n let scale = this.volume / 100 + 1;\r\n if (scale > 1.5) scale = 1.5;\r\n const str = `transform: scale(${scale})`;\r\n return str;\r\n }\r\n}\r\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeCircle.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeCircle.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VolumeCircle.vue?vue&type=template&id=4d364a0e&\"\nimport script from \"./VolumeCircle.vue?vue&type=script&lang=ts&\"\nexport * from \"./VolumeCircle.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./VolumeCircle.vue?vue&type=style&index=0&id=4d364a0e&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeCircle.vue?vue&type=style&index=0&id=4d364a0e&prod&lang=css&\"","'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","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"d-flex align-center\",attrs:{\"id\":\"volume-tester\"}},[(_vm.canToggle)?_c(VBtn,{attrs:{\"icon\":\"\",\"large\":\"\"},on:{\"click\":function($event){return _vm.$emit('toggle')}}},[_c(VIcon,[_vm._v(_vm._s(_vm.isTesting ? \"mdi-stop\" : \"mdi-volume-high\"))])],1):_vm._e(),_c('div',{staticClass:\"d-flex ml-4\",staticStyle:{\"align-items\":\"center\",\"flex-direction\":\"column\",\"justify-content\":\"center\"}},[_c('div',{staticClass:\"volume-container\"},_vm._l((10),function(idx){return _c('div',{key:idx,staticClass:\"volume-node\",class:{ active: _vm.volume >= idx * 10 }})}),0)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport Vue from \"vue\";\r\nimport { Component, Prop } from \"vue-property-decorator\";\r\n\r\n@Component\r\nexport default class Gauge extends Vue {\r\n @Prop({ default: () => 0 }) volume!: number;\r\n @Prop({ default: () => true }) canToggle!: boolean;\r\n @Prop({ default: () => false }) isTesting!: boolean;\r\n\r\n // get showText() {\r\n // return this.isTesting || (!this.canToggle && this.volume > 0);\r\n // }\r\n}\r\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Gauge.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Gauge.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Gauge.vue?vue&type=template&id=87b5963a&\"\nimport script from \"./Gauge.vue?vue&type=script&lang=ts&\"\nexport * from \"./Gauge.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Gauge.vue?vue&type=style&index=0&id=87b5963a&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","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;","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Gauge.vue?vue&type=style&index=0&id=87b5963a&prod&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.type === 'gauge')?_c('Gauge',{attrs:{\"volume\":_vm.volume,\"is-testing\":_vm.isTesting},on:{\"toggle\":_vm.toggleTest}}):(_vm.type === 'circle')?_c('VolumeCircle',{attrs:{\"volume\":_vm.volume,\"is-testing\":_vm.isTesting},on:{\"toggle\":_vm.toggleTest}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport Vue from \"vue\";\r\nimport { Component, Prop } from \"vue-property-decorator\";\r\n\r\nimport Gauge from \"./Gauge.vue\";\r\nimport Recorder from \"../../lib/recorder\";\r\nimport VolumeCircle from \"./VolumeCircle.vue\";\r\n\r\n@Component({ components: { Gauge, VolumeCircle } })\r\nexport default class VolumeTester extends Vue {\r\n @Prop({ default: () => \"gauge\" }) type!: \"gauge\" | \"circle\";\r\n\r\n volume = 0;\r\n isTesting = false;\r\n tester: Recorder | null = null;\r\n async toggleTest() {\r\n if (!this.tester) return;\r\n if (this.isTesting) {\r\n await this.tester.stop();\r\n this.volume = 0;\r\n } else await this.tester.start();\r\n this.isTesting = !this.isTesting;\r\n }\r\n mounted() {\r\n this.tester = new Recorder(({ vol }) => (this.volume = vol));\r\n }\r\n beforeDestroy() {\r\n this.stop();\r\n this.tester = null;\r\n }\r\n\r\n async stop() {\r\n if (!this.tester) return;\r\n await this.tester.cancel();\r\n this.isTesting = false;\r\n this.volume = 0;\r\n }\r\n\r\n async start() {\r\n if (!this.tester) return;\r\n await this.tester.start();\r\n this.isTesting = true;\r\n this.volume = 0;\r\n }\r\n}\r\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeTester.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeTester.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VolumeTester.vue?vue&type=template&id=541a399e&\"\nimport script from \"./VolumeTester.vue?vue&type=script&lang=ts&\"\nexport * from \"./VolumeTester.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","module.exports = require('./lib/index.js');\n"],"sourceRoot":""}