{"ast":null,"code":"var _jsxFileName = \"D:\\\\Project\\\\UC_Trains_Voice\\\\react-demo\\\\src\\\\Canvas\\\\Heteronym.tsx\",\n  _s = $RefreshSig$();\nimport React, { useEffect, useState } from 'react';\nimport { map, drawBackground } from '../function/canvasDefault';\nimport { Col, Row, Slider } from 'antd';\nimport { useCanvasHooks } from '../hooks/useCanvasHooks'; // variables and functions\n\nimport useCanvasMouseText from '../hooksUseEffect/useCanvasMouseText';\nimport useCanvasRetry from '../hooksUseEffect/useCanvasRetry';\nimport useCanvasUpdatePitch from '../hooksUseEffect/useCanvasUpdatePitch';\nimport useCanvasAdjustHeight from '../hooksUseEffect/useCanvasAdjustHeight';\nimport useCanvasInitializeGetPitch from '../hooksUseEffect/useCanvasInitializeGetPitch';\nimport useCanvasChangeHzAndNotes from '../hooksUseEffect/useCanvasChangeHzAndNotes';\nimport useCanvasRedrawBackground from '../hooksUseEffect/useCanvasRedrawBackground';\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst Heteronym = ({\n  setMaxLyricCount,\n  initialRange,\n  divisor,\n  txtShow,\n  isRetry,\n  setPlayingPause,\n  playLyricCount,\n  setPlaying,\n  config,\n  COLORS,\n  size,\n  isPlaying,\n  showNotesPar,\n  heteronymFile\n}) => {\n  _s();\n  var _notesLabel$map, _freqLabel$map, _freqLabel$map2;\n  const {\n    pitch,\n    setPitch,\n    mouseHeight,\n    realVoiceColor,\n    targetVoiceColor,\n    closeVoiceColor,\n    ballYCurr,\n    canvasRef,\n    rectWidth,\n    CanvasLength,\n    canvasHeight,\n    setCanvasHeight,\n    showNotes,\n    setShowNotes,\n    offset,\n    currentX,\n    setCurrentX,\n    initialcurrentX,\n    notesLabel,\n    setNotesLabel,\n    freqLabel,\n    setFreqLabel,\n    updateBallY,\n    updateCanvasHeight,\n    handleMouseMove\n  } = useCanvasHooks(size, divisor, COLORS, initialRange);\n  const [ballY, setBallY] = useState(size[0]);\n  const desiredLength = Math.floor(size[1] / divisor);\n  const [inputValue, setInputValue] = useState([110, 200]);\n  const initialColorChangesFull = new Array(CanvasLength).fill(false);\n  const initialBallHistoryFull = new Array(CanvasLength).fill(NaN);\n  const [colorChangesFull, setColorChangesFull] = useState(initialColorChangesFull);\n  const [ballHistoryFull, setBallHistoryFull] = useState(initialBallHistoryFull);\n  const resetStatesFull = () => {\n    setColorChangesFull([...initialColorChangesFull]);\n    setBallHistoryFull([...initialBallHistoryFull]);\n    setCurrentX(initialcurrentX);\n  };\n  const initialPitchArrayCus = new Array(desiredLength).fill(NaN);\n  const [pitchArrayCus, setPitchArrayCus] = useState(initialPitchArrayCus);\n  const [shouldDisabled, setShouldDisabled] = useState(false);\n\n  // +++++++++++++++++++++++++++++++++++++++++++++++++\n  // Hooks useEffect parts \\\\ \n\n  // initialize get pitch function + pause + draw background\n  useCanvasInitializeGetPitch(config, setPitch, updateCanvasHeight, setPlayingPause, canvasRef, initialRange, showNotes);\n\n  // set canvas size for different resolutions\n  useCanvasAdjustHeight(canvasRef, setCanvasHeight);\n\n  // store current pitch\n  useCanvasUpdatePitch(isPlaying, pitch, updateBallY);\n\n  // update mouse text\n  useCanvasMouseText(canvasRef, mouseHeight, initialRange);\n\n  // change Notes and hz display\n  useCanvasChangeHzAndNotes(setShowNotes, showNotes, showNotesPar, canvasRef, initialRange, setNotesLabel, setFreqLabel, canvasHeight);\n\n  // retry\n  useCanvasRetry(isRetry, divisor, setPlayingPause, resetStatesFull);\n\n  // redraw background when hz or notes changed\n  useCanvasRedrawBackground(canvasRef, showNotesPar, initialRange);\n\n  // +++++++++++++++++++++++++++++++++++++++++++++++++\n  // Unique useEffect parts \\\\\n  const onChange = newValue => {\n    setInputValue(newValue);\n  };\n\n  // change Notes and hz display\n  useCanvasChangeHzAndNotes(setShowNotes, showNotes, showNotesPar, canvasRef, initialRange, setNotesLabel, setFreqLabel, canvasHeight);\n  const updatePitchArrayCus = () => {\n    const partLength = Math.floor(CanvasLength / 5);\n    const lastPartStart = partLength * 4;\n    const midValue = (inputValue[0] + inputValue[1]) / 2;\n    const updatedArray = new Array(CanvasLength);\n    for (let i = 0.5 * partLength; i < 1.5 * partLength; i++) {\n      updatedArray[i] = inputValue[1] + (midValue - inputValue[1]) * ((i - (1.5 * partLength + offset)) / partLength) - 50;\n    }\n    for (let i = 1.5 * partLength + offset; i < 2.5 * partLength + offset; i++) {\n      updatedArray[i] = midValue + (inputValue[1] - midValue) * ((i - 0.5 * partLength) / partLength) - 50;\n    }\n    setPitchArrayCus(updatedArray);\n  };\n  useEffect(() => {\n    updatePitchArrayCus();\n  }, [inputValue]);\n  useEffect(() => {\n    const canvas = canvasRef.current;\n    if (canvas) {\n      const ctx = canvas.getContext('2d');\n      if (ctx) {\n        const textX = canvas.width - 100;\n        const textY = 20;\n        ctx.clearRect(0, 0, textX - 5, canvas.height);\n        ctx.clearRect(0, textY + 5, canvas.width, canvas.height - (textY + 5));\n        drawBackground(canvasRef, initialRange[1], initialRange[0], showNotes);\n\n        // stair \n        for (let i = 0 + offset; i < pitchArrayCus.length; i++) {\n          const mappedJsonValue = map(pitchArrayCus[i], initialRange[0], initialRange[1], size[0], 0);\n          // Set fill color based on condition\n          if (colorChangesFull[i]) {\n            ctx.fillStyle = closeVoiceColor;\n          } else {\n            ctx.fillStyle = targetVoiceColor;\n          }\n          // Draw a rectangle\n          ctx.fillRect(i, mappedJsonValue, rectWidth, rectWidth);\n        }\n        let temTxtShow = false;\n        if (txtShow === \"false\") {\n          temTxtShow = false;\n        } else {\n          temTxtShow = true;\n        }\n        if (temTxtShow) {\n          const fraction = size[1] / 5;\n          const heights = [inputValue[0], (inputValue[0] + inputValue[1]) / 2, inputValue[1], (inputValue[0] + inputValue[1]) / 2, inputValue[0]]; // 定义高度数组\n          ctx.fillStyle = \"black\";\n          ctx.font = \"16px Arial\";\n          for (let j = 0; j <= 4; j++) {\n            let xPosition = fraction * (j + 1) - fraction / 2;\n            let yPosition = map(heights[j] + 5, initialRange[0], initialRange[1], size[0], 0);\n          }\n        }\n\n        // Draw the ball's historical positions\n        for (var i = 0; i < ballHistoryFull.length; i++) {\n          // for (var i = currentX; i > 0; i--) {\n          ctx.beginPath();\n          ctx.arc(i, ballHistoryFull[i], 5, 0, 2 * Math.PI);\n          ctx.fillStyle = realVoiceColor;\n          ctx.fill();\n          ctx.closePath();\n        }\n        // Plot current value\n        ctx.beginPath();\n        ctx.arc(currentX * divisor, ballYCurr, 10, 0, 2 * Math.PI);\n        ctx.fillStyle = \"black\";\n        ctx.fill();\n        ctx.closePath();\n      }\n    }\n  }, [txtShow, pitchArrayCus, initialRange, ballHistoryFull, playLyricCount, showNotes, showNotesPar]);\n  useEffect(() => {\n    const canvas = canvasRef.current;\n    if (canvas) {\n      const ctx = canvas.getContext('2d');\n      if (ctx) {\n        // ctx.clearRect(0, 0, canvas.width, canvas.height);\n        drawBackground(canvasRef, initialRange[1], initialRange[0], showNotes);\n        ctx.font = '16px Arial';\n        ctx.fillStyle = 'black';\n        // Calculate text position (near top right corner)\n        const textX = canvas.width - 100;\n        const textY = 20;\n        // txt\n        const mappedHeight = map(mouseHeight, 0, 100, initialRange[1], initialRange[0]);\n        const text = `pitch: ${mappedHeight.toFixed(2)}`;\n        const metrics = ctx.measureText(text);\n        const textWidth = metrics.width;\n        const textHeight = 16;\n        const clearX = textX;\n        const clearY = textY - textHeight;\n        const clearWidth = textWidth;\n        const clearHeight = textHeight + 5;\n        ctx.clearRect(clearX, clearY, clearWidth, clearHeight);\n        ctx.fillText(`pitch: ${mappedHeight.toFixed(2)}`, textX, textY);\n      }\n    }\n  }, [mouseHeight]);\n  // next\n  useEffect(() => {\n    setPlayingPause();\n    resetStatesFull();\n  }, [playLyricCount]);\n  const updateBallHistoryFull = ballY => {\n    let tempHistoryFull = [...ballHistoryFull];\n    let ctxdiv = currentX * divisor;\n    if (currentX < desiredLength - 1) {\n      setShouldDisabled(false);\n      tempHistoryFull[ctxdiv] = ballY;\n      setColorChangesFull(currentColors => {\n        const newColors = [...currentColors];\n        const mappedJsonValue = map(pitchArrayCus[ctxdiv], initialRange[0], initialRange[1], size[0], 0);\n        const difference = Math.abs(mappedJsonValue - ballY);\n        if (difference <= 50 && !isNaN(difference)) {\n          for (let j = ctxdiv - divisor; j <= ctxdiv + divisor && j < CanvasLength; j++) {\n            newColors[j] = true;\n          }\n        }\n        return newColors;\n      });\n    } else {\n      setShouldDisabled(true);\n      if (!shouldDisabled) {\n        setPlayingPause();\n      }\n    }\n    setCurrentX(currentX + 1);\n    setBallHistoryFull(tempHistoryFull);\n  };\n  useEffect(() => {\n    // Only update ballHistory at currentX position\n    if (isPlaying) {\n      updateBallHistoryFull(ballY);\n    }\n  }, [pitch, isPlaying]);\n  useEffect(() => {\n    if (shouldDisabled && isPlaying) {\n      resetStatesFull();\n      setShouldDisabled(false);\n    }\n  }, [isPlaying]);\n  return /*#__PURE__*/_jsxDEV(Row, {\n    style: {\n      maxHeight: \"27vw\",\n      marginBottom: \"5vw\",\n      maxWidth: \"100vw\"\n    },\n    children: [/*#__PURE__*/_jsxDEV(Col, {\n      span: 1\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 291,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(Col, {\n      span: 22,\n      children: [/*#__PURE__*/_jsxDEV(\"div\", {\n        className: \"yAxisArea\",\n        style: {\n          height: canvasHeight\n        },\n        children: /*#__PURE__*/_jsxDEV(Row, {\n          style: {\n            height: canvasHeight\n          },\n          children: [/*#__PURE__*/_jsxDEV(Col, {\n            span: 8,\n            children: showNotesPar ? /*#__PURE__*/_jsxDEV(\"div\", {\n              style: {\n                height: canvasHeight\n              },\n              className: \"yAxisLabel\",\n              children: \"Pitch (Notes)\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 298,\n              columnNumber: 19\n            }, this) : /*#__PURE__*/_jsxDEV(\"div\", {\n              style: {\n                height: canvasHeight\n              },\n              className: \"yAxisLabel\",\n              children: \"Pitch (Hz)\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 299,\n              columnNumber: 19\n            }, this)\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 296,\n            columnNumber: 13\n          }, this), /*#__PURE__*/_jsxDEV(Col, {\n            span: 8,\n            children: /*#__PURE__*/_jsxDEV(\"div\", {\n              className: \"yAxisNumbers\",\n              style: {\n                height: canvasHeight * 1.039\n              },\n              children: showNotesPar ? (_notesLabel$map = notesLabel === null || notesLabel === void 0 ? void 0 : notesLabel.map((note, index) => /*#__PURE__*/_jsxDEV(\"div\", {\n                children: note\n              }, index, false, {\n                fileName: _jsxFileName,\n                lineNumber: 304,\n                columnNumber: 54\n              }, this))) !== null && _notesLabel$map !== void 0 ? _notesLabel$map : [] : (_freqLabel$map = freqLabel === null || freqLabel === void 0 ? void 0 : freqLabel.map((freq, index) => /*#__PURE__*/_jsxDEV(\"div\", {\n                children: freq\n              }, index, false, {\n                fileName: _jsxFileName,\n                lineNumber: 305,\n                columnNumber: 53\n              }, this))) !== null && _freqLabel$map !== void 0 ? _freqLabel$map : []\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 302,\n              columnNumber: 15\n            }, this)\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 301,\n            columnNumber: 13\n          }, this), /*#__PURE__*/_jsxDEV(Col, {\n            span: 8,\n            children: /*#__PURE__*/_jsxDEV(\"div\", {\n              className: \"yAxisLines\",\n              style: {\n                height: canvasHeight\n              },\n              children: (_freqLabel$map2 = freqLabel === null || freqLabel === void 0 ? void 0 : freqLabel.map((_, index) => /*#__PURE__*/_jsxDEV(\"div\", {}, void 0, false, {\n                fileName: _jsxFileName,\n                lineNumber: 311,\n                columnNumber: 19\n              }, this))) !== null && _freqLabel$map2 !== void 0 ? _freqLabel$map2 : []\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 309,\n              columnNumber: 15\n            }, this)\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 308,\n            columnNumber: 13\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 295,\n          columnNumber: 11\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 294,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n        style: {\n          height: canvasHeight\n        },\n        children: [/*#__PURE__*/_jsxDEV(\"canvas\", {\n          ref: canvasRef,\n          onMouseMove: handleMouseMove,\n          id: \"pitchCanvas\",\n          width: size[1],\n          height: size[0],\n          style: {\n            border: '1px solid #000'\n          }\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 319,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n          className: \"XAxisNum\",\n          style: {\n            top: canvasHeight,\n            width: canvasHeight * 3.486\n          },\n          children: [...Array(11)].map((_, index) => /*#__PURE__*/_jsxDEV(\"div\", {\n            style: {\n              position: 'relative'\n            },\n            children: [/*#__PURE__*/_jsxDEV(\"div\", {\n              className: \"timeMarkerLine\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 337,\n              columnNumber: 17\n            }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n              className: \"timeMarkerNum\",\n              children: (15 / (divisor / 4) * (index / 10)).toFixed(1)\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 338,\n              columnNumber: 17\n            }, this)]\n          }, index, true, {\n            fileName: _jsxFileName,\n            lineNumber: 336,\n            columnNumber: 15\n          }, this))\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 327,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n          style: {\n            top: canvasHeight * 1.12,\n            width: canvasHeight * 3.486\n          },\n          className: \"XAxis\",\n          children: /*#__PURE__*/_jsxDEV(\"div\", {\n            children: \"Time (Seconds)\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 351,\n            columnNumber: 13\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 344,\n          columnNumber: 11\n        }, this)]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 318,\n        columnNumber: 9\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 293,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(Col, {\n      span: 1,\n      children: /*#__PURE__*/_jsxDEV(\"div\", {\n        children: /*#__PURE__*/_jsxDEV(Slider, {\n          vertical: true,\n          range: true,\n          min: initialRange[0],\n          max: initialRange[1],\n          style: {\n            marginTop: 0,\n            height: canvasHeight\n          },\n          onChange: onChange,\n          defaultValue: inputValue\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 360,\n          columnNumber: 11\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 359,\n        columnNumber: 9\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 358,\n      columnNumber: 7\n    }, this)]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 290,\n    columnNumber: 5\n  }, this);\n};\n_s(Heteronym, \"SFHbpKCniwlIak0yZehrrdWKhgQ=\", false, function () {\n  return [useCanvasHooks, useCanvasInitializeGetPitch, useCanvasAdjustHeight, useCanvasUpdatePitch, useCanvasMouseText, useCanvasChangeHzAndNotes, useCanvasRetry, useCanvasRedrawBackground, useCanvasChangeHzAndNotes];\n});\n_c = Heteronym;\nexport default Heteronym;\nvar _c;\n$RefreshReg$(_c, \"Heteronym\");","map":{"version":3,"names":["React","useEffect","useState","map","drawBackground","Col","Row","Slider","useCanvasHooks","useCanvasMouseText","useCanvasRetry","useCanvasUpdatePitch","useCanvasAdjustHeight","useCanvasInitializeGetPitch","useCanvasChangeHzAndNotes","useCanvasRedrawBackground","jsxDEV","_jsxDEV","Heteronym","setMaxLyricCount","initialRange","divisor","txtShow","isRetry","setPlayingPause","playLyricCount","setPlaying","config","COLORS","size","isPlaying","showNotesPar","heteronymFile","_s","_notesLabel$map","_freqLabel$map","_freqLabel$map2","pitch","setPitch","mouseHeight","realVoiceColor","targetVoiceColor","closeVoiceColor","ballYCurr","canvasRef","rectWidth","CanvasLength","canvasHeight","setCanvasHeight","showNotes","setShowNotes","offset","currentX","setCurrentX","initialcurrentX","notesLabel","setNotesLabel","freqLabel","setFreqLabel","updateBallY","updateCanvasHeight","handleMouseMove","ballY","setBallY","desiredLength","Math","floor","inputValue","setInputValue","initialColorChangesFull","Array","fill","initialBallHistoryFull","NaN","colorChangesFull","setColorChangesFull","ballHistoryFull","setBallHistoryFull","resetStatesFull","initialPitchArrayCus","pitchArrayCus","setPitchArrayCus","shouldDisabled","setShouldDisabled","onChange","newValue","updatePitchArrayCus","partLength","lastPartStart","midValue","updatedArray","i","canvas","current","ctx","getContext","textX","width","textY","clearRect","height","length","mappedJsonValue","fillStyle","fillRect","temTxtShow","fraction","heights","font","j","xPosition","yPosition","beginPath","arc","PI","closePath","mappedHeight","text","toFixed","metrics","measureText","textWidth","textHeight","clearX","clearY","clearWidth","clearHeight","fillText","updateBallHistoryFull","tempHistoryFull","ctxdiv","currentColors","newColors","difference","abs","isNaN","style","maxHeight","marginBottom","maxWidth","children","span","fileName","_jsxFileName","lineNumber","columnNumber","className","note","index","freq","_","ref","onMouseMove","id","border","top","position","vertical","range","min","max","marginTop","defaultValue","_c","$RefreshReg$"],"sources":["D:/Project/UC_Trains_Voice/react-demo/src/Canvas/Heteronym.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\r\nimport { map, drawBackground } from '../function/canvasDefault';\r\nimport { Col, Row, Slider } from 'antd';\r\nimport { CONFIG, COLORS } from '../types/configTypes';\r\n\r\nimport { useCanvasHooks } from '../hooks/useCanvasHooks'; // variables and functions\r\n\r\nimport useCanvasMouseText from '../hooksUseEffect/useCanvasMouseText';\r\nimport useCanvasRetry from '../hooksUseEffect/useCanvasRetry';\r\nimport useCanvasUpdatePitch from '../hooksUseEffect/useCanvasUpdatePitch';\r\nimport useCanvasAdjustHeight from '../hooksUseEffect/useCanvasAdjustHeight';\r\nimport useCanvasInitializeGetPitch from '../hooksUseEffect/useCanvasInitializeGetPitch';\r\nimport useCanvasChangeHzAndNotes from '../hooksUseEffect/useCanvasChangeHzAndNotes';\r\nimport useCanvasRedrawBackground from '../hooksUseEffect/useCanvasRedrawBackground';\r\n\r\n\r\ninterface HeteronymProps {\r\n  size: number[];\r\n  config: CONFIG;\r\n  COLORS: COLORS;\r\n  isPlaying: boolean;\r\n  showNotesPar: boolean;\r\n  playLyricCount: number;\r\n  setPlaying: () => void;\r\n  isRetry: boolean;\r\n  setPlayingPause: () => void;\r\n  txtShow: string;\r\n  divisor: number;\r\n  initialRange: number[];\r\n  setMaxLyricCount: (num: number) => void;\r\n  heteronymFile: string[];\r\n}\r\n\r\n\r\nconst Heteronym: React.FC<HeteronymProps> = ({ setMaxLyricCount, initialRange, divisor, txtShow, isRetry, setPlayingPause, playLyricCount, setPlaying, config, COLORS, size, isPlaying, showNotesPar, heteronymFile }) => {\r\n\r\n  const {\r\n    pitch,\r\n    setPitch,\r\n    mouseHeight,\r\n    realVoiceColor,\r\n    targetVoiceColor,\r\n    closeVoiceColor,\r\n    ballYCurr,\r\n    canvasRef,\r\n    rectWidth,\r\n    CanvasLength,\r\n    canvasHeight,\r\n    setCanvasHeight,\r\n    showNotes,\r\n    setShowNotes,\r\n    offset,\r\n    currentX,\r\n    setCurrentX,\r\n    initialcurrentX,\r\n    notesLabel,\r\n    setNotesLabel,\r\n    freqLabel,\r\n    setFreqLabel,\r\n\r\n    updateBallY,\r\n    updateCanvasHeight,\r\n    handleMouseMove,\r\n  } = useCanvasHooks(size, divisor, COLORS, initialRange);\r\n\r\n\r\n  const [ballY, setBallY] = useState<number>(size[0]);\r\n  const desiredLength = Math.floor(size[1] / divisor);\r\n  const [inputValue, setInputValue] = useState<number[]>([110, 200]);\r\n  const initialColorChangesFull = new Array(CanvasLength).fill(false);\r\n  const initialBallHistoryFull = new Array(CanvasLength).fill(NaN);\r\n  const [colorChangesFull, setColorChangesFull] = useState<boolean[]>(initialColorChangesFull);\r\n  const [ballHistoryFull, setBallHistoryFull] = useState<number[]>(initialBallHistoryFull);\r\n  const resetStatesFull = () => {\r\n    setColorChangesFull([...initialColorChangesFull]);\r\n    setBallHistoryFull([...initialBallHistoryFull]);\r\n    setCurrentX(initialcurrentX);\r\n  };\r\n\r\n  const initialPitchArrayCus = new Array(desiredLength).fill(NaN);\r\n\r\n  const [pitchArrayCus, setPitchArrayCus] = useState<number[]>(initialPitchArrayCus);\r\n  const [shouldDisabled, setShouldDisabled] = useState<boolean>(false);\r\n\r\n  // +++++++++++++++++++++++++++++++++++++++++++++++++\r\n  // Hooks useEffect parts \\\\ \r\n\r\n  // initialize get pitch function + pause + draw background\r\n  useCanvasInitializeGetPitch(config, setPitch, updateCanvasHeight, setPlayingPause, canvasRef, initialRange, showNotes);\r\n\r\n  // set canvas size for different resolutions\r\n  useCanvasAdjustHeight(canvasRef, setCanvasHeight);\r\n\r\n  // store current pitch\r\n  useCanvasUpdatePitch(isPlaying, pitch, updateBallY);\r\n\r\n  // update mouse text\r\n  useCanvasMouseText(canvasRef, mouseHeight, initialRange);\r\n\r\n  // change Notes and hz display\r\n  useCanvasChangeHzAndNotes(setShowNotes, showNotes, showNotesPar, canvasRef, initialRange, setNotesLabel, setFreqLabel, canvasHeight);\r\n\r\n  // retry\r\n  useCanvasRetry(isRetry, divisor, setPlayingPause, resetStatesFull);\r\n\r\n  // redraw background when hz or notes changed\r\n  useCanvasRedrawBackground(canvasRef, showNotesPar, initialRange);\r\n\r\n\r\n  // +++++++++++++++++++++++++++++++++++++++++++++++++\r\n  // Unique useEffect parts \\\\\r\n  const onChange = (newValue: number[]) => {\r\n    setInputValue(newValue);\r\n  };\r\n\r\n  // change Notes and hz display\r\n  useCanvasChangeHzAndNotes(setShowNotes, showNotes, showNotesPar, canvasRef, initialRange, setNotesLabel, setFreqLabel, canvasHeight);\r\n\r\n  const updatePitchArrayCus = () => {\r\n    const partLength = Math.floor(CanvasLength / 5);\r\n    const lastPartStart = partLength * 4;\r\n    const midValue = (inputValue[0] + inputValue[1]) / 2;\r\n\r\n    const updatedArray = new Array(CanvasLength);\r\n    for (let i = 0.5 * partLength; i < 1.5 * partLength; i++) {\r\n      updatedArray[i] = inputValue[1] + (midValue - inputValue[1]) * ((i - (1.5 * partLength + offset)) / partLength) - 50;\r\n    }\r\n\r\n    for (let i = 1.5 * partLength + offset; i < 2.5 * partLength + offset; i++) {\r\n\r\n      updatedArray[i] = midValue + (inputValue[1] - midValue) * ((i - 0.5 * partLength) / partLength) - 50;\r\n    }\r\n\r\n    setPitchArrayCus(updatedArray);\r\n  }\r\n\r\n  useEffect(() => {\r\n    updatePitchArrayCus();\r\n  }, [inputValue]);\r\n\r\n  useEffect(() => {\r\n\r\n    const canvas = canvasRef.current;\r\n    if (canvas) {\r\n      const ctx = canvas.getContext('2d');\r\n      if (ctx) {\r\n        const textX = canvas.width - 100;\r\n        const textY = 20;\r\n        ctx.clearRect(0, 0, textX - 5, canvas.height);\r\n        ctx.clearRect(0, textY + 5, canvas.width, canvas.height - (textY + 5));\r\n\r\n        drawBackground(canvasRef, initialRange[1], initialRange[0], showNotes);\r\n\r\n        // stair \r\n        for (let i = 0 + offset; i < pitchArrayCus.length; i++) {\r\n          const mappedJsonValue = map(pitchArrayCus[i], initialRange[0], initialRange[1], size[0], 0);\r\n          // Set fill color based on condition\r\n          if (colorChangesFull[i]) {\r\n            ctx.fillStyle = closeVoiceColor;\r\n          } else {\r\n            ctx.fillStyle = targetVoiceColor;\r\n          }\r\n          // Draw a rectangle\r\n          ctx.fillRect(i, mappedJsonValue, rectWidth, rectWidth);\r\n        }\r\n\r\n        let temTxtShow = false;\r\n        if (txtShow === \"false\") {\r\n          temTxtShow = false;\r\n        } else {\r\n          temTxtShow = true;\r\n        }\r\n\r\n        if (temTxtShow) {\r\n          const fraction = size[1] / 5;\r\n          const heights = [inputValue[0], (inputValue[0] + inputValue[1]) / 2, inputValue[1], (inputValue[0] + inputValue[1]) / 2, inputValue[0]]; // 定义高度数组\r\n          ctx.fillStyle = \"black\";\r\n          ctx.font = \"16px Arial\";\r\n          for (let j = 0; j <= 4; j++) {\r\n            let xPosition = fraction * (j + 1) - (fraction / 2);\r\n            let yPosition = map(heights[j] + 5, initialRange[0], initialRange[1], size[0], 0);\r\n          }\r\n        }\r\n\r\n        // Draw the ball's historical positions\r\n        for (var i = 0; i < ballHistoryFull.length; i++) {\r\n          // for (var i = currentX; i > 0; i--) {\r\n          ctx.beginPath();\r\n          ctx.arc(i, ballHistoryFull[i], 5, 0, 2 * Math.PI);\r\n          ctx.fillStyle = realVoiceColor;\r\n          ctx.fill();\r\n          ctx.closePath();\r\n        }\r\n        // Plot current value\r\n        ctx.beginPath();\r\n        ctx.arc(currentX * divisor, ballYCurr, 10, 0, 2 * Math.PI);\r\n        ctx.fillStyle = \"black\";\r\n        ctx.fill();\r\n        ctx.closePath();\r\n\r\n      }\r\n    }\r\n  }, [txtShow, pitchArrayCus, initialRange, ballHistoryFull, playLyricCount, showNotes, showNotesPar]);\r\n\r\n  useEffect(() => {\r\n    const canvas = canvasRef.current;\r\n    if (canvas) {\r\n      const ctx = canvas.getContext('2d');\r\n      if (ctx) {\r\n        // ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n        drawBackground(canvasRef, initialRange[1], initialRange[0], showNotes);\r\n\r\n        ctx.font = '16px Arial';\r\n\r\n        ctx.fillStyle = 'black';\r\n        // Calculate text position (near top right corner)\r\n        const textX = canvas.width - 100;\r\n        const textY = 20;\r\n        // txt\r\n        const mappedHeight = map(mouseHeight, 0, 100, initialRange[1], initialRange[0]);\r\n\r\n        const text = `pitch: ${mappedHeight.toFixed(2)}`;\r\n        const metrics = ctx.measureText(text);\r\n        const textWidth = metrics.width;\r\n        const textHeight = 16;\r\n\r\n        const clearX = textX;\r\n        const clearY = textY - textHeight;\r\n        const clearWidth = textWidth;\r\n        const clearHeight = textHeight + 5;\r\n\r\n        ctx.clearRect(clearX, clearY, clearWidth, clearHeight);\r\n\r\n        ctx.fillText(`pitch: ${mappedHeight.toFixed(2)}`, textX, textY);\r\n      }\r\n    }\r\n  }, [mouseHeight])\r\n  // next\r\n  useEffect(() => {\r\n    setPlayingPause();\r\n    resetStatesFull();\r\n  }, [playLyricCount])\r\n\r\n  const updateBallHistoryFull = (ballY: number) => {\r\n    let tempHistoryFull = [...ballHistoryFull];\r\n    let ctxdiv = currentX * divisor;\r\n\r\n\r\n    if (currentX < desiredLength - 1) {\r\n      setShouldDisabled(false);\r\n      tempHistoryFull[ctxdiv] = ballY;\r\n      setColorChangesFull(currentColors => {\r\n        const newColors = [...currentColors];\r\n        const mappedJsonValue = map(pitchArrayCus[ctxdiv], initialRange[0], initialRange[1], size[0], 0);\r\n        const difference = Math.abs(mappedJsonValue - ballY);\r\n        if (difference <= 50 && !isNaN(difference)) {\r\n          for (let j = ctxdiv - divisor; j <= ctxdiv + divisor && j < CanvasLength; j++) {\r\n            newColors[j] = true;\r\n          }\r\n        }\r\n        return newColors;\r\n      });\r\n\r\n    } else {\r\n      setShouldDisabled(true);\r\n      if (!shouldDisabled) {\r\n        setPlayingPause();\r\n      }\r\n    }\r\n    setCurrentX(currentX + 1);\r\n    setBallHistoryFull(tempHistoryFull);\r\n  };\r\n\r\n\r\n  useEffect(() => {\r\n    // Only update ballHistory at currentX position\r\n    if (isPlaying) {\r\n      updateBallHistoryFull(ballY);\r\n    }\r\n  }, [pitch, isPlaying]);\r\n\r\n  useEffect(() => {\r\n    if (shouldDisabled && isPlaying) {\r\n      resetStatesFull();\r\n      setShouldDisabled(false);\r\n    }\r\n  }, [isPlaying]);\r\n\r\n  return (\r\n    <Row style={{ maxHeight: \"27vw\", marginBottom: \"5vw\", maxWidth: \"100vw\" }}>\r\n      <Col span={1}>\r\n      </Col>\r\n      <Col span={22}>\r\n        <div className=\"yAxisArea\" style={{ height: canvasHeight }}>\r\n          <Row style={{ height: canvasHeight }}>\r\n            <Col span={8}>\r\n              {showNotesPar\r\n                ? <div style={{ height: canvasHeight }} className=\"yAxisLabel\">Pitch (Notes)</div>\r\n                : <div style={{ height: canvasHeight }} className=\"yAxisLabel\">Pitch (Hz)</div>}\r\n            </Col>\r\n            <Col span={8}>\r\n              <div className=\"yAxisNumbers\" style={{ height: canvasHeight * 1.039 }}>\r\n                {showNotesPar\r\n                  ? notesLabel?.map((note, index) => <div key={index}>{note}</div>) ?? []\r\n                  : freqLabel?.map((freq, index) => <div key={index}>{freq}</div>) ?? []}\r\n              </div>\r\n            </Col>\r\n            <Col span={8}>\r\n              <div className=\"yAxisLines\" style={{ height: canvasHeight }}>\r\n                {freqLabel?.map((_, index) => (\r\n                  <div></div>\r\n                )) ?? []}\r\n              </div>\r\n            </Col>\r\n          </Row>\r\n        </div>\r\n\r\n        <div style={{ height: canvasHeight }}>\r\n          <canvas\r\n            ref={canvasRef}\r\n            onMouseMove={handleMouseMove}\r\n            id=\"pitchCanvas\"\r\n            width={size[1]}\r\n            height={size[0]}\r\n            style={{ border: '1px solid #000' }}\r\n          ></canvas>\r\n          <div\r\n                        className='XAxisNum'\r\n                        style={{\r\n                            top: canvasHeight,\r\n                            width: canvasHeight * 3.486,\r\n\r\n                        }}\r\n          >\r\n            {[...Array(11)].map((_, index) => (\r\n              <div key={index} style={{ position: 'relative' }}>\r\n                <div className=\"timeMarkerLine\" />\r\n                <span className='timeMarkerNum'>\r\n                  {((15 / (divisor / 4)) * (index / 10)).toFixed(1)}\r\n                </span>\r\n              </div>\r\n            ))}\r\n          </div>\r\n          <div\r\n                        style={{\r\n                          top: canvasHeight * (1.12),\r\n                          width: canvasHeight * 3.486,\r\n                      }}\r\n                      className='XAxis'\r\n          >\r\n            <div>Time (Seconds)</div>\r\n\r\n          </div>\r\n\r\n        </div>\r\n\r\n      </Col>\r\n      <Col span={1}>\r\n        <div>\r\n          <Slider\r\n            vertical\r\n            range\r\n            min={initialRange[0]}\r\n            max={initialRange[1]}\r\n            style={{ marginTop: 0, height: canvasHeight }}\r\n            onChange={onChange}\r\n            defaultValue={inputValue} />\r\n        </div>\r\n      </Col>\r\n    </Row>\r\n  );\r\n}\r\n\r\nexport default Heteronym;"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}