{"ast":null,"code":"var _jsxFileName = \"/Users/shanyi/Desktop/Projects/UC_Trains_Voice/react-demo/src/gavt/Wave/WaveCanvas.jsx\",\n  _s = $RefreshSig$();\n// Manually created for GAVT project on 2024-06-03, based on commit 10df1d9 of the original project\n// Update according to \nimport { useRef, useState, useEffect } from 'react';\nimport useUserMedia from './useUserMedia';\nimport { getSnapData, initAudio, updateCoeffsOffline, updateData, FRAME_SIZE } from './waveAudio';\nimport { Button } from 'antd';\nimport { CameraOutlined, ClearOutlined } from '@ant-design/icons';\nimport './Wave.css';\n\n// =====================================================\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst WaveCanvas = props => {\n  _s();\n  const DEFAULT_FILTER_ORDER = 40;\n  const {\n    draw,\n    // this is the drawLoop sketch\n    isPaused,\n    // req'd for renderer\n    isTracking,\n    strokeStyle = \"#50D3D6\",\n    ...rest\n  } = props;\n\n  // Audio Vars ------\n  const SAMPLE_RATE = 44100;\n  const refAudioCtx = useRef(null);\n  const analyser = useRef();\n  let microphone = useRef(null);\n  let audioData = []; // Holds the time domain data.\n  let lastReceivedCoeffs = useRef([1, 2, 3]); // self-explanatory\n  const BROADCASTS_PER_SECOND = 6; // used in audioData Interval, affects drawing smoothness, and will eventually be used with Vonage\n\n  // Canvas Vars -------\n  const refCanvas = useRef(); // html holds canvasEle\n  const refCtx = useRef(); // holds canvas drawing ctx\n  const refAniId = useRef(); // holds window.requestAnimationFrame\n  let count = 0; // just a var to count the draw loops\n  let drawData = {\n    magnitudes: [],\n    peaks: []\n  }; // set each audio interval\n  let receiveEnabled = useRef(false);\n  let [sensitivity, setSensitivity] = useState(50);\n\n  // Snapshot Feature --------------\n  const snapCtx = useRef();\n  const refSnapCanvas = useRef(); // ------------------ #snap\n  let snapshotCoeffs = useRef(null); // ------------------ #snap\n  let snapData = {\n    magnitudes: [],\n    peaks: []\n  }; // ------------------ #snap\n\n  let getMediaInitiated = useRef(false);\n\n  // Services ---------\n  const {\n    stream,\n    error,\n    getMedia\n  } = useUserMedia();\n\n  // ------------------------------------------------\n  const renderer = () => {\n    let ctx = refCtx.current;\n    count++;\n    drawData = updateData(drawData, lastReceivedCoeffs.current, isTracking);\n    if (!isPaused) {\n      // drawLoop. Drawing is passed in thru props.\n      draw(ctx, count, drawData.magnitudes, drawData.peaks, strokeStyle); // FOR WAVE CUSTOMIZATION!\n    } else {\n      return;\n    }\n    if (snapshotCoeffs.current !== null) {\n      displaySnapshot();\n    }\n    refAniId.current = window.requestAnimationFrame(renderer);\n  };\n  const displaySnapshot = () => {\n    let snapData = getSnapData(snapshotCoeffs.current, sensitivity);\n    // console.log(snapData)\n    draw(snapCtx.current, 0, snapData.magnitudes, snapData.peaks, 'blue');\n  };\n  const unpackArrayFromSignal = signalString => {\n    if (signalString === '') {\n      return [];\n    }\n    const coeffsStrings = signalString.split(' ');\n    const newArray = [];\n    for (const element of coeffsStrings) {\n      newArray.push(parseFloat(element));\n    }\n    return newArray;\n  };\n  const onClickClearSnapshot = () => {\n    clearSnapshot();\n  };\n  const onClickTakeSnapshot = () => {\n    takeSnapshot();\n    displaySnapshot();\n  };\n  const copyArray = arr => {\n    const newArr = [];\n    for (let i = 0; i < arr.length; i++) {\n      newArr[i] = arr[i];\n    }\n    return newArr;\n  };\n  const takeSnapshot = () => {\n    snapshotCoeffs.current = copyArray(lastReceivedCoeffs.current);\n    console.log(\"snapshot\", snapshotCoeffs.current);\n  };\n  const clearSnapshot = () => {\n    snapshotCoeffs.current = null;\n    let canvas = refSnapCanvas.current;\n    const context = refSnapCanvas.current.getContext('2d');\n    context.clearRect(0, 0, canvas.width, canvas.height);\n  };\n  const startReceiveIfNecessary = session => {\n    if (!receiveEnabled.current && session) {\n      console.log('starting receive');\n      session.on(\"signal:lpc\", function (event) {\n        //console.log(event.data);\n        //setLastReceivedCoeffs(unpackArrayFromSignal(event.data)); // global\n        lastReceivedCoeffs.current = unpackArrayFromSignal(event.data); // global\n      });\n      session.on('signal:snapshot', function (event) {\n        snapshotCoeffs.current = unpackArrayFromSignal(event.data); // global\n        displaySnapshot();\n      });\n      session.on('signal:clearSnapshot', function (event) {\n        clearSnapshot();\n      });\n      session.on('signal:sensitivity', function (event) {\n        setSensitivity(Number(event.data));\n      });\n      receiveEnabled.current = true; // global\n    }\n  };\n\n  // onMount & onWillUnmount ------------------------------------------------\n  useEffect(() => {\n    refCtx.current = refCanvas.current.getContext('2d');\n    snapCtx.current = refSnapCanvas.current.getContext('2d');\n    let interval;\n    if (!stream) {\n      getMedia();\n    }\n    if (stream) {\n      console.log('canvas has stream');\n      console.log('stream.active = ' + stream.active);\n\n      // Anything that attaches to a DOM ele should be CREATED here with a ref.\n      // Once the refs are init'd/created, they can be passed to external scripts for maipulation.\n      refAudioCtx.current = new AudioContext({\n        sampleRate: SAMPLE_RATE\n      });\n      analyser.current = refAudioCtx.current.createAnalyser();\n\n      // I assume this will be needed later...but I don't really know\n      microphone.current = refAudioCtx.current.createMediaStreamSource(stream);\n\n      // configs the analyser to our mic input\n      analyser.current = initAudio(microphone.current, refAudioCtx.current, analyser.current);\n\n      // ready to send to audioData to LPC script, which we will do at an interval\n      interval = setInterval(() => {\n        // console.log('audioData interval');\n        // creates a 1D array\n        audioData = new Float32Array(analyser.current.fftSize);\n        // updates that array with analyser data\n        analyser.current.getFloatTimeDomainData(audioData);\n\n        // call to audio script\n        lastReceivedCoeffs.current = updateCoeffsOffline(audioData, DEFAULT_FILTER_ORDER);\n      }, Math.round(1000 * (FRAME_SIZE / SAMPLE_RATE)));\n      console.log(Math.round(1000 * (FRAME_SIZE / SAMPLE_RATE)));\n      console.log('audioReady. Starting render');\n      renderer();\n    }\n\n    // onUnmount -----------------\n    return () => {\n      clearInterval(interval);\n      console.log('cancel render / cancelAnimationFrame');\n      window.cancelAnimationFrame(refAniId.current);\n    };\n  }, [stream, isPaused, isTracking, snapshotCoeffs]);\n\n  // _________________________________________\n  return /*#__PURE__*/_jsxDEV(\"div\", {\n    className: \"canvas-container\",\n    children: [/*#__PURE__*/_jsxDEV(\"canvas\", {\n      className: \"fullWidth\",\n      ref: refCanvas,\n      ...rest,\n      children: \"Please use an HTML5 browser.\"\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 192,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"canvas\", {\n      className: \"snapCanvas\",\n      style: {\n        opacity: .4\n      },\n      ref: refSnapCanvas,\n      ...rest,\n      children: \"Please use an HTML5 browser.\"\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 195,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n      style: {\n        position: \"fixed\",\n        left: \"64%\",\n        top: \"50%\",\n        zIndex: 999\n      },\n      children: /*#__PURE__*/_jsxDEV(\"div\", {\n        style: {\n          marginBottom: \"10px\"\n        },\n        children: [/*#__PURE__*/_jsxDEV(Button, {\n          color: \"primary\",\n          onClick: onClickTakeSnapshot,\n          icon: /*#__PURE__*/_jsxDEV(CameraOutlined, {}, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 200,\n            columnNumber: 77\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 200,\n          columnNumber: 17\n        }, this), /*#__PURE__*/_jsxDEV(Button, {\n          color: \"primary\",\n          onClick: onClickClearSnapshot,\n          icon: /*#__PURE__*/_jsxDEV(ClearOutlined, {}, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 201,\n            columnNumber: 78\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 201,\n          columnNumber: 17\n        }, this)]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 199,\n        columnNumber: 15\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 198,\n      columnNumber: 7\n    }, this)]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 191,\n    columnNumber: 5\n  }, this);\n};\n_s(WaveCanvas, \"qXTmW7gyGJrSqK6lIVPEPGtJ9uo=\", false, function () {\n  return [useUserMedia];\n});\n_c = WaveCanvas;\nexport default WaveCanvas;\nvar _c;\n$RefreshReg$(_c, \"WaveCanvas\");","map":{"version":3,"names":["useRef","useState","useEffect","useUserMedia","getSnapData","initAudio","updateCoeffsOffline","updateData","FRAME_SIZE","Button","CameraOutlined","ClearOutlined","jsxDEV","_jsxDEV","WaveCanvas","props","_s","DEFAULT_FILTER_ORDER","draw","isPaused","isTracking","strokeStyle","rest","SAMPLE_RATE","refAudioCtx","analyser","microphone","audioData","lastReceivedCoeffs","BROADCASTS_PER_SECOND","refCanvas","refCtx","refAniId","count","drawData","magnitudes","peaks","receiveEnabled","sensitivity","setSensitivity","snapCtx","refSnapCanvas","snapshotCoeffs","snapData","getMediaInitiated","stream","error","getMedia","renderer","ctx","current","displaySnapshot","window","requestAnimationFrame","unpackArrayFromSignal","signalString","coeffsStrings","split","newArray","element","push","parseFloat","onClickClearSnapshot","clearSnapshot","onClickTakeSnapshot","takeSnapshot","copyArray","arr","newArr","i","length","console","log","canvas","context","getContext","clearRect","width","height","startReceiveIfNecessary","session","on","event","data","Number","interval","active","AudioContext","sampleRate","createAnalyser","createMediaStreamSource","setInterval","Float32Array","fftSize","getFloatTimeDomainData","Math","round","clearInterval","cancelAnimationFrame","className","children","ref","fileName","_jsxFileName","lineNumber","columnNumber","style","opacity","position","left","top","zIndex","marginBottom","color","onClick","icon","_c","$RefreshReg$"],"sources":["/Users/shanyi/Desktop/Projects/UC_Trains_Voice/react-demo/src/gavt/Wave/WaveCanvas.jsx"],"sourcesContent":["// Manually created for GAVT project on 2024-06-03, based on commit 10df1d9 of the original project\n// Update according to \nimport { useRef, useState, useEffect } from 'react'\nimport useUserMedia from './useUserMedia'\n\nimport { getSnapData, initAudio, updateCoeffsOffline, updateData, FRAME_SIZE } from './waveAudio'\nimport { Button } from 'antd'\nimport { CameraOutlined, ClearOutlined } from '@ant-design/icons'\n\nimport './Wave.css'\n\n\n// =====================================================\nconst WaveCanvas = props => {  \n\n  const DEFAULT_FILTER_ORDER = 40;\n\n  const {draw, // this is the drawLoop sketch\n    isPaused, // req'd for renderer\n    isTracking,\n    strokeStyle = \"#50D3D6\",\n    ...rest} = props;\n\n  // Audio Vars ------\n  const SAMPLE_RATE = 44100;\n  const refAudioCtx = useRef(null);       \n  const analyser = useRef();\n  let microphone = useRef(null);\n  let audioData = [];                   // Holds the time domain data.\n  let lastReceivedCoeffs = useRef([1, 2, 3]);  // self-explanatory\n  const BROADCASTS_PER_SECOND = 6; // used in audioData Interval, affects drawing smoothness, and will eventually be used with Vonage\n\n  // Canvas Vars -------\n  const refCanvas = useRef();   // html holds canvasEle\n  const refCtx = useRef();      // holds canvas drawing ctx\n  const refAniId = useRef();    // holds window.requestAnimationFrame\n  let count = 0                 // just a var to count the draw loops\n  let drawData = { magnitudes: [], peaks: [], } // set each audio interval\n  let receiveEnabled = useRef(false);\n  let [sensitivity, setSensitivity] = useState(50);\n\n  // Snapshot Feature --------------\n  const snapCtx = useRef();\n  const refSnapCanvas = useRef();             // ------------------ #snap\n  let snapshotCoeffs = useRef(null);          // ------------------ #snap\n  let snapData = {magnitudes: [], peaks: []}  // ------------------ #snap\n\n  let getMediaInitiated = useRef(false);\n\n  // Services ---------\n  const { stream, error, getMedia } = useUserMedia();\n\n  // ------------------------------------------------\n  const renderer = () => {\n    let ctx = refCtx.current;\n    count++\n    drawData = updateData(drawData, lastReceivedCoeffs.current, isTracking)\n\n    if(!isPaused) { // drawLoop. Drawing is passed in thru props.\n      draw(ctx, count, drawData.magnitudes, drawData.peaks, strokeStyle) // FOR WAVE CUSTOMIZATION!\n    } else {\n      return;\n    }\n    if (snapshotCoeffs.current !== null) {\n      displaySnapshot();\n    }\n    refAniId.current = window.requestAnimationFrame(renderer)\n  }\n\n  const displaySnapshot = () => {\n    let snapData = getSnapData(snapshotCoeffs.current, sensitivity);\n    // console.log(snapData)\n    draw(snapCtx.current, 0, snapData.magnitudes, snapData.peaks, 'blue');\n  }\n\n  const unpackArrayFromSignal = (signalString) => {\n    if (signalString === '') {\n      return [];\n    }\n    const coeffsStrings = signalString.split(' ');\n    const newArray = [];\n    for (const element of coeffsStrings) {\n      newArray.push(parseFloat(element));\n    }\n    return newArray;\n  };\n\n  const onClickClearSnapshot = () => {\n    clearSnapshot();\n  }\n\n  const onClickTakeSnapshot = () => {\n      takeSnapshot();\n      displaySnapshot();\n  };\n\n  const copyArray = (arr) => {\n    const newArr = [];\n    for (let i = 0; i < arr.length; i++) {\n      newArr[i] = arr[i];\n    }\n    return newArr;\n  }\n\n  const takeSnapshot = () => {\n    snapshotCoeffs.current = copyArray(lastReceivedCoeffs.current);\n    console.log(\"snapshot\", snapshotCoeffs.current);\n  }\n\n  const clearSnapshot = () => {\n    snapshotCoeffs.current = null;\n    let canvas = refSnapCanvas.current\n    const context = refSnapCanvas.current.getContext('2d');\n    context.clearRect(0, 0, canvas.width, canvas.height);\n  }\n\n  const startReceiveIfNecessary = (session) => {\n    if (!receiveEnabled.current && session) {\n      console.log('starting receive');\n      session.on(\"signal:lpc\", function (event) {\n        //console.log(event.data);\n        //setLastReceivedCoeffs(unpackArrayFromSignal(event.data)); // global\n        lastReceivedCoeffs.current = unpackArrayFromSignal(event.data); // global\n      });\n      session.on('signal:snapshot', function (event) {\n        snapshotCoeffs.current = unpackArrayFromSignal(event.data);     // global\n        displaySnapshot();\n      });\n      session.on('signal:clearSnapshot', function (event) {\n        clearSnapshot();\n      });\n      session.on('signal:sensitivity', function (event) {\n        setSensitivity(Number(event.data));\n      });\n      receiveEnabled.current = true;                                     // global\n    }\n  };\n\n  // onMount & onWillUnmount ------------------------------------------------\n  useEffect(() => { \n    refCtx.current = refCanvas.current.getContext('2d');\n    snapCtx.current = refSnapCanvas.current.getContext('2d');\n    let interval;\n\n    if(!stream) { getMedia(); }\n\n    if(stream) {\n      console.log('canvas has stream')\n      console.log('stream.active = ' + stream.active)\n\n      // Anything that attaches to a DOM ele should be CREATED here with a ref.\n      // Once the refs are init'd/created, they can be passed to external scripts for maipulation.\n      refAudioCtx.current = new AudioContext({sampleRate: SAMPLE_RATE,});\n      analyser.current = refAudioCtx.current.createAnalyser();\n\n      // I assume this will be needed later...but I don't really know\n      microphone.current = refAudioCtx.current.createMediaStreamSource(stream);\n\n      // configs the analyser to our mic input\n      analyser.current = initAudio(microphone.current, refAudioCtx.current, analyser.current)\n\n      // ready to send to audioData to LPC script, which we will do at an interval\n      interval = setInterval(() => {\n        // console.log('audioData interval');\n        // creates a 1D array\n        audioData = new Float32Array(analyser.current.fftSize);\n        // updates that array with analyser data\n        analyser.current.getFloatTimeDomainData(audioData);\n\n        // call to audio script\n        lastReceivedCoeffs.current = updateCoeffsOffline(audioData, DEFAULT_FILTER_ORDER);\n      }, Math.round(1000 * (FRAME_SIZE / SAMPLE_RATE)));\n      console.log(Math.round(1000 * (FRAME_SIZE/SAMPLE_RATE)));\n\n\n      console.log('audioReady. Starting render')\n      renderer()\n    }\n\n    // onUnmount -----------------\n    return () => {\n      clearInterval(interval);\n      console.log('cancel render / cancelAnimationFrame')\n      window.cancelAnimationFrame(refAniId.current)\n    } \n  }, [stream, isPaused, isTracking, snapshotCoeffs])\n\n\n  // _________________________________________\n  return (\n    <div className=\"canvas-container\">\n      <canvas className=\"fullWidth\" ref={refCanvas} {...rest}>\n        Please use an HTML5 browser.\n      </canvas>\n      <canvas className=\"snapCanvas\" style={{opacity: .4}} ref={refSnapCanvas} {...rest} >\n        Please use an HTML5 browser.\n      </canvas>\n      <div style={{position: \"fixed\", left: \"64%\", top: \"50%\", zIndex: 999,}}>\n              <div style={{ marginBottom: \"10px\" }}>\n                <Button color=\"primary\" onClick={onClickTakeSnapshot} icon={<CameraOutlined />}></Button>\n                <Button color=\"primary\" onClick={onClickClearSnapshot} icon={<ClearOutlined />}></Button>\n              </div>\n      </div>\n    </div>\n  )\n}\n\nexport default WaveCanvas"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}