{"version":3,"sources":["webpack:///./src/views/recorder/lib/tester.ts"],"names":["onupdate","this","isTesting","constraints","video","audio","channelCount","echoCancellation","navigator","mediaDevices","getUserMedia","stream","_micCaptured","_micError","clearInterval","interval","getTracks","forEach","track","stop","input","disconnect","analyzer","processor","context","close","console","log","window","AudioContext","webkitAudioContext","createAnalyser","createMediaStreamSource","connect","setInterval","buffer","Uint8Array","frequencyBinCount","getByteFrequencyData","sum","reduce","cum","curr","vol","length","error"],"mappings":"mgBAWE,WAAYA,GAA+B,uBACzCC,KAAKC,WAAY,EACjBD,KAAKD,SAAWA,EA4DjB,OA3DA,4FAED,oGAOG,OANKG,EAAc,CAClBC,OAAO,EACPC,MAAO,CACLC,aAAc,EACdC,kBAAkB,IAErB,kBAGsBC,UAAUC,aAAaC,aAAaP,GAAY,OAA/DQ,EAAS,EAAH,KACZV,KAAKW,aAAaD,GAAQ,mDAE1BV,KAAKY,UAAU,EAAD,IAAQ,yDAEzB,qDAjBA,IAiBA,yEAED,0GAMiC,OANjC,SAEIC,cAAcb,KAAKc,UACR,QAAX,EAAAd,KAAKU,cAAM,OAAX,EAAaK,YAAYC,SAAQ,SAACC,GAAU,OAAKA,EAAMC,UAC7C,QAAV,EAAAlB,KAAKmB,aAAK,OAAV,EAAYC,aACC,QAAb,EAAApB,KAAKqB,gBAAQ,OAAb,EAAeD,aACD,QAAd,EAAApB,KAAKsB,iBAAS,OAAd,EAAgBF,aAAa,SACX,QADW,EACvBpB,KAAKuB,eAAO,aAAZ,EAAcC,QAAO,4DAE3BC,QAAQC,IAAI,mBAAmB,QAEjC1B,KAAKC,WAAY,EAAM,0DACxB,qDAdA,IAcA,0EAED,sGAE2B,OADd,QAAX,EAAAD,KAAKU,cAAM,OAAX,EAAaK,YAAYC,SAAQ,SAACC,GAAuB,OAAKA,EAAMC,UAC1D,QAAV,EAAAlB,KAAKmB,aAAK,OAAV,EAAYC,aAAa,SACP,QADO,EACnBpB,KAAKuB,eAAO,aAAZ,EAAcC,QAAO,gDAC5B,qDANA,IAMA,0BACD,SAAad,GAAmB,WAE9BV,KAAKuB,QAAU,IAAKI,OAAOC,cAAgBD,OAAOE,oBAClD7B,KAAKqB,SAAWrB,KAAKuB,QAAQO,iBAC7B9B,KAAKmB,MAAQnB,KAAKuB,QAAQQ,wBAAwBrB,GAElDV,KAAKmB,MAAMa,QAAQhC,KAAKqB,UACxBrB,KAAKc,SAAWmB,aAAY,WAC1B,GAAK,EAAKZ,SAAV,CACA,IAAMa,EAAS,IAAIC,WAAW,EAAKd,SAASe,mBAC5C,EAAKf,SAASgB,qBAAqBH,GACnC,IAAMI,EAAMJ,EAAOK,QAAO,SAACC,EAAKC,GAAI,OAAKD,EAAMC,IAAM,GAC/CC,EAAMJ,EAAMJ,EAAOS,OACzB,EAAK5C,SAAS2C,MACb,IAEH1C,KAAKU,OAASA,IACf,uBAED,SAAUkC,GACRnB,QAAQC,IAAI,YAAakB,OAC1B,E","file":"assets/js/chunk-2d0ba8dd.76376b36.js","sourcesContent":["export default class {\r\n isTesting: boolean;\r\n stream?: MediaStream;\r\n context?: AudioContext;\r\n analyzer?: AnalyserNode;\r\n processor?: ScriptProcessorNode;\r\n input?: MediaStreamAudioSourceNode;\r\n onupdate: (vol: number) => void;\r\n\r\n interval: any;\r\n\r\n constructor(onupdate: (vol: number) => void) {\r\n this.isTesting = false;\r\n this.onupdate = onupdate;\r\n }\r\n\r\n async start() {\r\n const constraints = {\r\n video: false,\r\n audio: {\r\n channelCount: 1,\r\n echoCancellation: false,\r\n },\r\n };\r\n\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\r\n this._micCaptured(stream);\r\n } catch (error) {\r\n this._micError(error);\r\n }\r\n }\r\n\r\n async stop() {\r\n try {\r\n clearInterval(this.interval);\r\n this.stream?.getTracks().forEach((track: any) => track.stop());\r\n this.input?.disconnect();\r\n this.analyzer?.disconnect();\r\n this.processor?.disconnect();\r\n await this.context?.close();\r\n } catch (error) {\r\n console.log(\"could not close\");\r\n }\r\n this.isTesting = false;\r\n }\r\n\r\n async pause() {\r\n this.stream?.getTracks().forEach((track: MediaStreamTrack) => track.stop());\r\n this.input?.disconnect();\r\n await this.context?.close();\r\n }\r\n _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.input = this.context.createMediaStreamSource(stream);\r\n\r\n this.input.connect(this.analyzer);\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 this.onupdate(vol);\r\n }, 50);\r\n\r\n this.stream = stream;\r\n }\r\n\r\n _micError(error: any) {\r\n console.log(\"Mic error\", error);\r\n }\r\n}\r\n"],"sourceRoot":""}