{"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\nimport { useRef, useState, useEffect } from 'react';\nimport useUserMedia from './useUserMedia';\nimport { getSnapData, updateCoeffsWithVonage, initAudio, updateCoeffsOffline, updateData, FRAME_SIZE } from './waveAudio';\nimport { Button } from 'antd';\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\n  let lastReceivedCoeffs = []; // 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();\n  let snapshotCoeffs = useRef(null);\n  const snapshotData = useRef({\n    magnitudes: [],\n    peaks: []\n  });\n  let getMediaInitiated = useRef(false);\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, 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, isPaused, isTracking);\n  };\n  const displaySnapshot = () => {\n    let snapData = getSnapData(snapshotCoeffs.current, sensitivity);\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 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      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 && !getMediaInitiated.current) {\n      getMediaInitiated.current = true;\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      if (!refAudioCtx.current) {\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\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        var filterOrder = DEFAULT_FILTER_ORDER;\n        // if (profile?.filterOrder) {\n        //   filterOrder = profile.filterOrder;\n        // }\n\n        // call to audio script\n        // if (user?.isOnline) {\n        //   startReceiveIfNecessary(vonageSession);\n        //   // isHotMic? TODO Add real condition.\n        //   if (amIHotMic()) {\n        //     updateCoeffsWithVonage(audioData, vonageSession, filterOrder);\n        //   }\n        // } else {\n        //   //console.log(\"OFFLINE COEFFS\");\n        //   //setLastReceivedCoeffs(updateCoeffsOffline(audioData));\n        //   lastReceivedCoeffs.current = updateCoeffsOffline(audioData, filterOrder);\n        // }\n        lastReceivedCoeffs.current = updateCoeffsOffline(audioData, filterOrder);\n      }, 1000 / BROADCASTS_PER_SECOND);\n\n      // console.log('audioReady. Starting render')\n      renderer();\n    }\n    const snapData = {\n      magnitudes: [],\n      peaks: []\n    };\n    if (snapData.magnitudes.length > 0 || snapData.peaks.length > 0) {\n      displaySnapshot(snapData);\n    } else {\n      clearSnapshot();\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, snapshotData]);\n  const onClickClearSnapshot = () => {\n    clearSnapshot();\n  };\n  const onClickTakeSnapshot = () => {\n    takeSnapshot();\n  };\n  const takeSnapshot = () => {\n    const snapData = getSnapData(lastReceivedCoeffs.current, sensitivity);\n    const snapUpdate = {\n      'snapMags': Array.isArray(snapData.magnitudes) ? snapData.magnitudes : [],\n      'snapPeaks': Array.isArray(snapData.peaks) ? snapData.peaks : []\n    };\n    snapshotData.current = {\n      magnitudes: snapData.magnitudes || [],\n      peaks: snapData.peaks || []\n    };\n    console.log('Snapshot taken:', snapshotData.current);\n  };\n  const clearSnapshot = () => {\n    let canvas = refSnapCanvas.current;\n    const context = refSnapCanvas.current.getContext('2d');\n    context.clearRect(0, 0, canvas.width, canvas.height);\n    snapshotData.current = {\n      magnitudes: [],\n      peaks: []\n    };\n  };\n\n  // _________________________________________\n  return /*#__PURE__*/_jsxDEV(\"div\", {\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: 210,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"canvas\", {\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: 213,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n      style: {\n        position: \"fixed\",\n        left: \"60%\",\n        top: \"50%\",\n        zIndex: 999\n      },\n      children: /*#__PURE__*/_jsxDEV(\"div\", {\n        style: {\n          marginBottom: \"10px\"\n          // border: \"1px solid pink\"\n        },\n        children: [/*#__PURE__*/_jsxDEV(Button, {\n          color: \"primary\",\n          onClick: onClickTakeSnapshot\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 222,\n          columnNumber: 17\n        }, this), /*#__PURE__*/_jsxDEV(Button, {\n          color: \"primary\",\n          onClick: onClickClearSnapshot\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 224,\n          columnNumber: 17\n        }, this)]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 217,\n        columnNumber: 15\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 216,\n      columnNumber: 7\n    }, this)]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 209,\n    columnNumber: 5\n  }, this);\n};\n_s(WaveCanvas, \"6jsaYi75mDixvtiHzbIwo4XRrvY=\", 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","updateCoeffsWithVonage","initAudio","updateCoeffsOffline","updateData","FRAME_SIZE","Button","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","snapshotData","getMediaInitiated","stream","error","getMedia","renderer","ctx","current","displaySnapshot","window","requestAnimationFrame","snapData","unpackArrayFromSignal","signalString","coeffsStrings","split","newArray","element","push","parseFloat","startReceiveIfNecessary","session","console","log","on","event","data","getContext","interval","AudioContext","sampleRate","createAnalyser","createMediaStreamSource","setInterval","Float32Array","fftSize","getFloatTimeDomainData","filterOrder","length","clearSnapshot","clearInterval","cancelAnimationFrame","onClickClearSnapshot","onClickTakeSnapshot","takeSnapshot","snapUpdate","Array","isArray","canvas","context","clearRect","width","height","children","className","ref","fileName","_jsxFileName","lineNumber","columnNumber","style","opacity","position","left","top","zIndex","marginBottom","color","onClick","_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\nimport { useRef, useState, useEffect } from 'react'\nimport useUserMedia from './useUserMedia'\n\nimport { getSnapData, updateCoeffsWithVonage, initAudio, updateCoeffsOffline, updateData, FRAME_SIZE } from './waveAudio'\n\nimport { Button } from 'antd'\nimport './Wave.css'\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\n  let lastReceivedCoeffs = [];   // 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();\n  let snapshotCoeffs = useRef(null);\n  const snapshotData = useRef({\n    magnitudes: [],\n    peaks: []\n  });\n\n  let getMediaInitiated = useRef(false);\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, 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 { return }\n    if (snapshotCoeffs.current !== null) {\n      displaySnapshot();\n    }\n    refAniId.current = window.requestAnimationFrame(renderer, isPaused, isTracking)\n  }\n\n  const displaySnapshot = () => {\n    let snapData = getSnapData(snapshotCoeffs.current, sensitivity);\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 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      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 && !getMediaInitiated.current) {\n      getMediaInitiated.current = true;\n      getMedia();\n    }\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      if (!refAudioCtx.current) {\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\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        var filterOrder = DEFAULT_FILTER_ORDER;\n        // if (profile?.filterOrder) {\n        //   filterOrder = profile.filterOrder;\n        // }\n\n        // call to audio script\n        // if (user?.isOnline) {\n        //   startReceiveIfNecessary(vonageSession);\n        //   // isHotMic? TODO Add real condition.\n        //   if (amIHotMic()) {\n        //     updateCoeffsWithVonage(audioData, vonageSession, filterOrder);\n        //   }\n        // } else {\n        //   //console.log(\"OFFLINE COEFFS\");\n        //   //setLastReceivedCoeffs(updateCoeffsOffline(audioData));\n        //   lastReceivedCoeffs.current = updateCoeffsOffline(audioData, filterOrder);\n        // }\n        lastReceivedCoeffs.current = updateCoeffsOffline(audioData, filterOrder);\n      }, 1000 / BROADCASTS_PER_SECOND);\n\n      // console.log('audioReady. Starting render')\n      renderer()\n    }\n\n    const snapData = { \n      magnitudes: [],\n      peaks: [],\n    };\n\n    if (snapData.magnitudes.length > 0 || snapData.peaks.length > 0) {\n      displaySnapshot(snapData);\n    } else {\n      clearSnapshot();\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, snapshotData])\n\n  const onClickClearSnapshot = () => {\n    clearSnapshot();\n  }\n\n  const onClickTakeSnapshot = () => {\n    takeSnapshot();\n  };\n\n  const takeSnapshot = () => {\n    const snapData = getSnapData(lastReceivedCoeffs.current, sensitivity);\n\n    const snapUpdate = {\n      'snapMags': Array.isArray(snapData.magnitudes) ? snapData.magnitudes : [],\n      'snapPeaks': Array.isArray(snapData.peaks) ? snapData.peaks : [],\n    }\n\n    snapshotData.current = {\n      magnitudes: snapData.magnitudes || [],\n      peaks: snapData.peaks || []\n    };\n    console.log('Snapshot taken:', snapshotData.current);\n  }\n\n  const clearSnapshot = () => {\n    let canvas = refSnapCanvas.current\n    const context = refSnapCanvas.current.getContext('2d');\n    context.clearRect(0, 0, canvas.width, canvas.height);\n\n    snapshotData.current = { magnitudes: [], peaks: [] };\n  }\n\n\n  // _________________________________________\n  return (\n    <div>\n      <canvas className=\"fullWidth\" ref={refCanvas} {...rest}>\n          Please use an HTML5 browser.\n      </canvas>\n      <canvas style={{opacity: .4}} ref={refSnapCanvas} {...rest} >\n        Please use an HTML5 browser.\n      </canvas>\n      <div style={{position: \"fixed\", left: \"60%\", top: \"50%\", zIndex: 999,}}>\n              <div \n                style={{\n                  marginBottom: \"10px\", \n                  // border: \"1px solid pink\"\n                }}>\n                <Button color=\"primary\" onClick={onClickTakeSnapshot}>\n                </Button>\n                <Button color=\"primary\" onClick={onClickClearSnapshot}>\n                </Button>\n              </div>\n      </div>\n    </div>\n  )\n}\n\nexport default WaveCanvas\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}