/
component---src-pages-decal-homework-hw-2-js-35188f90bd3408d08aef.js.map
1 lines (1 loc) · 73.2 KB
/
component---src-pages-decal-homework-hw-2-js-35188f90bd3408d08aef.js.map
1
{"version":3,"file":"component---src-pages-decal-homework-hw-2-js-35188f90bd3408d08aef.js","mappings":"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","sources":["webpack://xr-b-website/./node_modules/@mui/icons-material/ContentCopy.js","webpack://xr-b-website/./node_modules/copy-to-clipboard/index.js","webpack://xr-b-website/./src/components/decalNav.js","webpack://xr-b-website/./src/components/nav.js","webpack://xr-b-website/./src/images/decal/HW2-0.png","webpack://xr-b-website/./src/images/decal/HW2-1.png","webpack://xr-b-website/./src/images/decal/HW2-2.png","webpack://xr-b-website/./src/images/decal/HW2-3.png","webpack://xr-b-website/./src/images/decal/HW2-4.png","webpack://xr-b-website/./src/images/decal/HW2-5.png","webpack://xr-b-website/./src/images/decal/HW2-6.png","webpack://xr-b-website/./src/images/decal/HW2-7.png","webpack://xr-b-website/./src/images/decal/HW2-8.png","webpack://xr-b-website/./src/pages/decal/homework/hw2.js","webpack://xr-b-website/./src/styles/decal.module.css","webpack://xr-b-website/./src/styles/nav.module.css","webpack://xr-b-website/./node_modules/react-copy-to-clipboard/lib/Component.js","webpack://xr-b-website/./node_modules/react-copy-to-clipboard/lib/index.js","webpack://xr-b-website/./node_modules/toggle-selection/index.js"],"sourcesContent":["\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\n}), 'ContentCopy');\nexports.default = _default;","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement(\"span\");\n mark.textContent = text;\n // avoid screen readers from reading out loud the text\n mark.ariaHidden = \"true\"\n // reset user styles for span element\n mark.style.all = \"unset\";\n // prevents scrolling to the end of the page\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\";\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = \"pre\";\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function(e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n if (typeof e.clipboardData === \"undefined\") { // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n window.clipboardData.setData(format, text);\n } else { // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n var successful = document.execCommand(\"copy\");\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\n","import * as React from \"react\"\r\nimport { Link } from \"gatsby\";\r\n\r\nimport logo from \"../images/logo.png\";\r\n\r\nimport * as navStyles from \"../styles/nav.module.css\"\r\nimport * as defaultStyles from \"../styles/default.module.css\"\r\n\r\nconst DecalNav = ({activePage, open}) => {\r\n\r\n return (\r\n <section className={navStyles.decal}>\r\n <div className={navStyles.navBar}>\r\n\r\n <Link to=\"/decal/\">\r\n <div className={activePage==\"home\" ? navStyles.active : navStyles.item}>Home/Announcements</div>\r\n </Link>\r\n <div className={navStyles.group}>\r\n <Link to=\"/decal/homework\" className={navStyles.title}>\r\n <div className={open==\"homework\" ? navStyles.arrowOpen : navStyles.arrow}>></div>\r\n <div className={open==\"homework\" ? navStyles.active : navStyles.item}>Homework</div>\r\n </Link>\r\n <div className={navStyles.subLinks} style={{display: open==\"homework\" ? \"flex\" : \"none\"}}>\r\n <Link to=\"/decal/homework/hw1\">\r\n <div className={activePage==\"hw1\" ? navStyles.active : navStyles.item}>Homework 1: The Rube Goldberg Ball Machine</div>\r\n </Link>\r\n <Link to=\"/decal/homework/hw2\">\r\n <div className={activePage==\"hw2\" ? navStyles.active : navStyles.item}>Homework 2: Music Visualizer</div>\r\n </Link>\r\n {/* <Link to=\"/decal/homework/hw3\">\r\n <div className={activePage==\"hw3\" ? navStyles.active : navStyles.item}>Homework 3: Fractal Generation</div>\r\n </Link>\r\n <Link to=\"/decal/homework/hw4\">\r\n <div className={activePage==\"hw4\" ? navStyles.active : navStyles.item}>Homework 4: Pong</div>\r\n </Link>\r\n <Link to=\"/decal/homework/hw5\">\r\n <div className={activePage==\"hw5\" ? navStyles.active : navStyles.item}>Homework 5: Collisions, Raycasting, and Triggers</div>\r\n </Link> */}\r\n </div> \r\n </div>\r\n <div className={navStyles.group}>\r\n <Link to=\"/decal/labs\" className={navStyles.title}>\r\n <div className={open==\"labs\" ? navStyles.arrowOpen : navStyles.arrow}>></div>\r\n <div className={open==\"labs\" ? navStyles.active : navStyles.item}>Labs</div>\r\n </Link>\r\n <div className={navStyles.subLinks} style={{display: open.includes(\"labs\") ? \"flex\" : \"none\"}}>\r\n <div className={navStyles.group}>\r\n <Link to=\"/decal/labs/oculus\" className={navStyles.title}>\r\n <div className={open==\"oculuslabs\" ? navStyles.arrowOpen : navStyles.arrow}>></div>\r\n <div className={open==\"oculuslabs\" ? navStyles.active : navStyles.item}>Oculus Labs</div>\r\n </Link>\r\n <div className={navStyles.subLinks} style={{display: open==\"oculuslabs\" ? \"flex\" : \"none\"}}>\r\n <Link to=\"/decal/labs/oculus/lab1\">\r\n <div className={activePage==\"oculuslab1\" ? navStyles.active : navStyles.item}>Oculus Lab 1</div>\r\n </Link>\r\n {/* <Link to=\"/decal/labs/oculus/lab2\">\r\n <div className={activePage==\"lab2\" ? navStyles.active : navStyles.item}>Lab 2</div>\r\n </Link>\r\n <Link to=\"/decal/labs/oculus/lab3\">\r\n <div className={activePage==\"lab3\" ? navStyles.active : navStyles.item}>Lab 3</div>\r\n </Link>\r\n <Link to=\"/decal/labs/oculus/lab4\">\r\n <div className={activePage==\"lab4\" ? navStyles.active : navStyles.item}>Lab 4</div>\r\n </Link> */}\r\n </div>\r\n </div>\r\n {/* <Link to=\"/decal/labs/lab2\">\r\n <div className={activePage==\"lab2\" ? navStyles.active : navStyles.item}>Lab 2</div>\r\n </Link> */}\r\n </div>\r\n </div> \r\n <Link to=\"/decal/lectures/\">\r\n <div className={activePage==\"lectures\" ? navStyles.active : navStyles.item}>Lectures</div>\r\n </Link>\r\n {/* <Link to=\"/decal/final/\">\r\n <div className={activePage==\"final\" ? navStyles.active : navStyles.item}>Final project</div>\r\n </Link> */}\r\n <Link to=\"/decal/resources/\">\r\n <div className={activePage==\"resources\" ? navStyles.active : navStyles.item}>Extra resources</div>\r\n </Link>\r\n\r\n </div>\r\n </section>\r\n )\r\n}\r\n\r\nexport default DecalNav\r\n\r\nexport const Head = () => <title>Extended Reality @ Berkeley</title>\r\n","import React, { useState } from \"react\"\r\nimport { Link } from \"gatsby\";\r\n\r\nimport logo from \"../images/logo.png\";\r\n\r\nimport * as navStyles from \"../styles/nav.module.css\"\r\nimport * as defaultStyles from \"../styles/default.module.css\"\r\n\r\nconst Nav = ({activePage}) => {\r\n\r\n // if (activePage == \"decal\") {\r\n // return (\r\n // <section>\r\n // <div className={navStyles.navBarDecal}>\r\n // <Link to=\"/home/\">\r\n // <img className={navStyles.logo} src={logo} alt=\"logo\" />\r\n // </Link>\r\n // <div className={navStyles.item} style={{visibility: 'hidden'}}>.</div>\r\n // </div>\r\n // </section>\r\n // )\r\n // }\r\n\r\n const [shown, setShown] = useState(false);\r\n\r\n return (\r\n <section>\r\n <div className={navStyles.navBar}>\r\n\r\n <img className={navStyles.logo} src={logo} alt=\"logo\" />\r\n\r\n <Link to=\"/home/\">\r\n <div className={activePage==\"home\" ? navStyles.active : navStyles.item}>Home</div>\r\n </Link>\r\n <Link to=\"/about/\">\r\n <div className={activePage==\"about\" ? navStyles.active : navStyles.item}>Who we are</div>\r\n </Link>\r\n <Link to=\"/projects/\">\r\n <div className={activePage==\"projects\" ? navStyles.active : navStyles.item}>Projects</div>\r\n </Link>\r\n <Link to=\"/decal/\">\r\n <div className={activePage==\"decal\" ? navStyles.active : navStyles.item}>Decal</div>\r\n </Link>\r\n <a href=\"https://discord.com/invite/GvGUUCN\" target=\"_blank\">\r\n <div className={navStyles.item}>Discord</div>\r\n </a>\r\n\r\n </div>\r\n\r\n <div className={navStyles.navBarSmallWrapper}>\r\n <div className={navStyles.navBarSmall}>\r\n\r\n <img className={navStyles.logo} src={logo} alt=\"logo\" />\r\n\r\n <div className={navStyles.smallNavButtonOutline} onClick={() => setShown(!shown)}>\r\n <div className={navStyles.smallNavButton}>\r\n <h1>...</h1>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n {shown ? \r\n <div className={navStyles.navList}>\r\n <Link to=\"/home/\">\r\n <div className={activePage==\"home\" ? navStyles.active : navStyles.item}>Home</div>\r\n </Link>\r\n <Link to=\"/about/\">\r\n <div className={activePage==\"about\" ? navStyles.active : navStyles.item}>Who we are</div>\r\n </Link>\r\n <Link to=\"/projects/\">\r\n <div className={activePage==\"projects\" ? navStyles.active : navStyles.item}>Projects</div>\r\n </Link>\r\n <Link to=\"/decal/\">\r\n <div className={activePage==\"decal\" ? navStyles.active : navStyles.item}>Decal</div>\r\n </Link>\r\n <a href=\"https://discord.com/invite/GvGUUCN\" target=\"_blank\">\r\n <div className={navStyles.item}>Discord</div>\r\n </a>\r\n </div>\r\n :\r\n \"\"\r\n }\r\n \r\n </div>\r\n\r\n </section>\r\n )\r\n}\r\n\r\nexport default Nav\r\n\r\nexport const Head = () => <title>Extended Reality @ Berkeley</title>\r\n","export default __webpack_public_path__ + \"static/HW2-0-e55399fb0b79c7eb032ce0aa55060cc1.png\";","export default __webpack_public_path__ + \"static/HW2-1-3f4e4aff97022369104108aa13ec0651.png\";","export default __webpack_public_path__ + \"static/HW2-2-329b157f0dd97136268877c80007892d.png\";","export default __webpack_public_path__ + \"static/HW2-3-c4ff6958a0df059119f167b3909e4ee3.png\";","export default __webpack_public_path__ + \"static/HW2-4-ee5c2ede35c9e7b0db436c41ca32533c.png\";","export default __webpack_public_path__ + \"static/HW2-5-4d98f75ecede28299690a4af39ac8c6c.png\";","export default __webpack_public_path__ + \"static/HW2-6-02a523103b9e84894f44c41086e0ae40.png\";","export default __webpack_public_path__ + \"static/HW2-7-98b360b5be1f9b26d04d38a19eac35f5.png\";","export default __webpack_public_path__ + \"static/HW2-8-bca556d634410c19d2e83c4f193276cf.png\";","import * as React from \"react\"\r\nimport { Link } from \"gatsby\";\r\nimport { CopyToClipboard } from \"react-copy-to-clipboard\";\r\n\r\nimport * as decalStyles from \"../../../styles/decal.module.css\"\r\nimport * as defaultStyles from \"../../../styles/default.module.css\"\r\n\r\nimport Nav from \"../../../components/nav\"\r\nimport DecalNav from \"../../../components/decalNav\"\r\nimport Button from \"../../../components/button\";\r\n\r\nimport EastIcon from '@mui/icons-material/East';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\n\r\nimport img1 from '../../../images/decal/HW2-0.png';\r\nimport img2 from '../../../images/decal/HW2-1.png';\r\nimport img3 from '../../../images/decal/HW2-2.png';\r\nimport img4 from '../../../images/decal/HW2-3.png';\r\nimport img5 from '../../../images/decal/HW2-4.png';\r\nimport img6 from '../../../images/decal/HW2-5.png';\r\nimport img7 from '../../../images/decal/HW2-6.png';\r\nimport img8 from '../../../images/decal/HW2-7.png';\r\nimport img9 from '../../../images/decal/HW2-8.png';\r\n\r\nconst hw2 = () => {\r\n\r\n return (\r\n <main>\r\n <body>\r\n <Nav activePage=\"decal\"/>\r\n\r\n <div className={decalStyles.bodyWrapper}>\r\n <DecalNav activePage=\"homework\" open=\"homework\"/>\r\n <div className={decalStyles.textWrapper}>\r\n <h1>Homework 2: Music Visualizer</h1> \r\n\r\n <div className={decalStyles.toc}>\r\n <h2>Table of Contents</h2>\r\n <p><span className={decalStyles.redLink}>\r\n <Button text=\"Introducing Spectrum Theory\"\r\n color=\"red\"\r\n icon={EastIcon} \r\n type=\"underlineOut\"\r\n link=\"#introducing-spectrum-theory\"\r\n alt=\"\"\r\n /></span></p>\r\n <p><span className={decalStyles.redLink}>\r\n <Button text=\"Extracting Spectrum Data\"\r\n color=\"red\"\r\n icon={EastIcon} \r\n type=\"underlineOut\"\r\n link=\"#extracting-spectrum-data\"\r\n alt=\"\"\r\n /></span></p>\r\n <p><span className={decalStyles.redLink}>\r\n <Button text=\"Visualizing Spectrum Data\"\r\n color=\"red\"\r\n icon={EastIcon} \r\n type=\"underlineOut\"\r\n link=\"#visualizing-spectrum-data\"\r\n alt=\"\"\r\n /></span></p>\r\n <p><span className={decalStyles.redLink}>\r\n <Button text=\"Introducing Frequency Bands\"\r\n color=\"red\"\r\n icon={EastIcon} \r\n type=\"underlineOut\"\r\n link=\"#introducing-frequency-bands\"\r\n alt=\"\"\r\n /></span></p>\r\n <p><span className={decalStyles.redLink}>\r\n <Button text=\"8 Bin Separation\"\r\n color=\"red\"\r\n icon={EastIcon} \r\n type=\"underlineOut\"\r\n link=\"#8-bin-separation\"\r\n alt=\"\"\r\n /></span></p>\r\n <p><span className={decalStyles.redLink}>\r\n <Button text=\"Visualizing 8 Bins\"\r\n color=\"red\"\r\n icon={EastIcon} \r\n type=\"underlineOut\"\r\n link=\"#visualizing-8-bins\"\r\n alt=\"\"\r\n /></span></p>\r\n <p><span className={decalStyles.redLink}>\r\n <Button text=\"Add Your Own Flair\"\r\n color=\"red\"\r\n icon={EastIcon} \r\n type=\"underlineOut\"\r\n link=\"#add-your-own-flair\"\r\n alt=\"\"\r\n /></span></p>\r\n <p><span className={decalStyles.redLink}>\r\n <Button text=\"Submission and Grading\"\r\n color=\"red\"\r\n icon={EastIcon} \r\n type=\"underlineOut\"\r\n link=\"submission-and-grading\"\r\n alt=\"\"\r\n /></span></p>\r\n </div>\r\n\r\n <p>\r\n Your second assignment is to create your very own music visualizer! It will look something like this:\r\n <br/><br/>\r\n <img src={img1}/>\r\n <br/><br/>\r\n This assignment will be a review of some of the Unity editor tools you have practiced in HW1, but more importantly, an introduction on using C# scripts to manipulate gameobjects.\r\n <br/><br/>\r\n First off, download the skeleton asset package <a href=\"https://drive.google.com/file/d/1qcFEAebMHNdoy75RfwDyPCGzI1t7l23H/view?usp=sharing\" target=\"_blank\" className={decalStyles.yellowUnderline}>here</a> and import it into a new project. Create a new scene called HW2 to work in.\r\n <br/><br/>\r\n In the meantime, take a look at these amazing music visualizer examples created with Unity by other people. This homework only goes over the basics, but you could take it to another level by adding your own flair. \r\n Links: <a href=\"https://www.youtube.com/watch?v=tMzmHWekLaY\" target=\"_blank\" className={decalStyles.yellowUnderline}>1</a>\r\n , <a href=\"https://www.youtube.com/watch?v=cBYx8Dm81tc\" target=\"_blank\" className={decalStyles.yellowUnderline}>2</a>\r\n , <a href=\"https://www.youtube.com/watch?v=80tu2ZLKD-o\" target=\"_blank\" className={decalStyles.yellowUnderline}>3</a>\r\n , <a href=\"https://www.youtube.com/watch?v=XbNhv2ylzKw\" target=\"_blank\" className={decalStyles.yellowUnderline}>4</a>\r\n , <a href=\"https://www.youtube.com/watch?v=swb-8Azjz9Q\" target=\"_blank\" className={decalStyles.yellowUnderline}>5</a>.\r\n </p>\r\n\r\n <div className={decalStyles.boxLine}>\r\n <div className={decalStyles.box}></div>\r\n </div> \r\n\r\n <h2 id=\"introducing-spectrum-theory\">Introducing Spectrum Theory</h2>\r\n <p>\r\n Every sound that enters your ear is actually a sum of different frequencies. Pure waveforms from various sources combine together into a single complex waveform. This complex waveform is then processed by your brain to create music, conversation, and everything else you hear.\r\n <br/><br/>\r\n The <a href=\"https://en.wikipedia.org/wiki/Fast_Fourier_transform\" target=\"_blank\" className={decalStyles.yellowUnderline}>Fast Fourier Transform</a> algorithm is the exact reverse - it takes a complex waveform and decomposes it into its base frequencies. Take the picture below as an example, which looks at a simple song from various perspectives.\r\n <br/><br/>\r\n <img src={img2}/>\r\n <br/><br/>\r\n What you physically hear is the result, which is the sum of the pure bass, kick, synth, and harmonics waveforms.\r\n <br/><br/>\r\n Performing FFT on the result returns an array of weights, which represent how much of each base frequency is being used in the result. You’ll notice there are 4 peaks, one for each of the pure waveforms. The leftmost peak represents the lowest frequency (the bass), and is the tallest because the bass has the greatest amplitude out of the four waveforms.\r\n <br/><br/>\r\n You might have noticed the FFT graph looks a little bit like a music visualization - and in fact it is. Music visualizations are nothing more than visual representations of the FFT for a song and how it changes over time. In our case, we will be representing the values of the FFT with the heights of various cubes.\r\n <br/><br/>\r\n <i>If you’d like to learn more, EE16A covers this subject in much more detail.</i>\r\n </p>\r\n\r\n <div className={decalStyles.boxLine}>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n </div> \r\n\r\n <h2 id=\"extracting-spectrum-data\">Extracting Spectrum Data</h2>\r\n <p>\r\n Let’s start off the homework by creating a script that allows you to extract spectrum data from any audio source.\r\n <br/><br/>\r\n We will start by creating an empty gameobject named “SpectrumAnalyzer” and a C# script named “SpectrumAnalyzer”. Add both an Audio Source and the script to the gameobject. Then open the script in the text editor of your choice, which will likely be Visual Studio or Monodevelop.\r\n <br/><br/>\r\n As a side tangent, you may change your script editor by going to <i>Edit > Preferences > External Tools</i>.\r\n <br/><br/>\r\n <img src={img3}/>\r\n <br/><br/>\r\n Start off by adding two variables to the script, above the Start() function.\r\n <br/><br/>\r\n <div className={decalStyles.code}>\r\n AudioSource audioSource;\r\n <br/>\r\n public static float[] samples = new float[512];\r\n <CopyToClipboard\r\n text=\"AudioSource audioSource;\r\n public static float[] samples = new float[512];\">\r\n <ContentCopyIcon className={decalStyles.copy}/>\r\n </CopyToClipboard>\r\n </div>\r\n <br/><br/>\r\n As you remember from roll-a-ball, the Start() function is called once, when the script is enabled. This makes it a good place to instantiate and/or initialize variables. We’ll initialize our audio source component here. Additionally, stub in a new function called GetSpectrumAudioSource().\r\n <br/><br/>\r\n <div className={decalStyles.code}>\r\n {`void Start () {`}\r\n <br/>\r\n {`audioSource = GetComponent<AudioSource>();`}\r\n <br/>\r\n {`}`}\r\n <br/><br/>\r\n {`void GetSpectrumAudioSource() {`}\r\n <br/><br/>\r\n {`}`}\r\n <CopyToClipboard\r\n text=\"void Start () {\r\n audioSource = GetComponent<AudioSource>();\r\n }\r\n \r\n void GetSpectrumAudioSource() {\r\n \r\n }\">\r\n <ContentCopyIcon className={decalStyles.copy}/>\r\n </CopyToClipboard>\r\n </div>\r\n <br/><br/>\r\n We’ll use this function to analyze the spectrum data from audioSource and save it in variable samples every frame. Fortunately, Unity has a built in function that does this for us, <a href=\"https://docs.unity3d.com/ScriptReference/AudioSource.GetSpectrumData.html\" target=\"_blank\" className={decalStyles.yellowUnderline}>GetSpectrumData</a>. We’ll use channel 0 since we’re only playing one thing at a time, and use Blackman for our spectrum analysis window due to its overall robust behaviour.\r\n <br/><br/>\r\n <div className={decalStyles.code}>\r\n {`void GetSpectrumAudioSource() {`}\r\n <br/>\r\n {`audioSource.GetSpectrumData(samples, 0, FFTWindow.Blackman);`}\r\n <br/>\r\n {`}`}\r\n <CopyToClipboard\r\n text=\"void GetSpectrumAudioSource() {\r\n audioSource.GetSpectrumData(samples, 0, FFTWindow.Blackman);\r\n }\">\r\n <ContentCopyIcon className={decalStyles.copy}/>\r\n </CopyToClipboard>\r\n </div>\r\n <br/><br/>\r\n Since we’ll want to update our spectrum samples every frame, put GetSpectrumAudioSource() in the Update function.\r\n <br/><br/>\r\n <div className={decalStyles.code}>\r\n {`void Update () {`}\r\n <br/>\r\n {`GetSpectrumAudioSource();`}\r\n <br/>\r\n {`}`}\r\n <CopyToClipboard\r\n text=\"void Update () {\r\n GetSpectrumAudioSource();\r\n }\">\r\n <ContentCopyIcon className={decalStyles.copy}/>\r\n </CopyToClipboard>\r\n </div>\r\n <br/><br/>\r\n Save your work and switch back to Unity. Select your SpectrumAnalyzer gameobject and set the AudioClip to whichever audio file you want to visualize. We have provided a sample audiofile in the Audio folder, in case you don’t have any. Here are some links to music if you’d like to download \r\n some: <a href=\"https://www.bensound.com/\" target=\"_blank\" className={decalStyles.yellowUnderline}>1</a>\r\n , <a href=\"http://www.purple-planet.com/\" target=\"_blank\" className={decalStyles.yellowUnderline}>2</a>\r\n , <a href=\"http://freemusicarchive.org/\" target=\"_blank\" className={decalStyles.yellowUnderline}>3</a>\r\n , <a href=\"https://soundcloud.com/royalty-free-audio-loops\" target=\"_blank\" className={decalStyles.yellowUnderline}>4</a>.\r\n <br/><br/>\r\n <img src={img4}/>\r\n </p>\r\n\r\n <div className={decalStyles.boxLine}>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n </div> \r\n\r\n <h2 id=\"visualizing-spectrum-data\">Visualizing Spectrum Data</h2>\r\n <p>\r\n Next, we’re going to visualize each of the 512 spectrum samples using cubes.\r\n <br/><br/>\r\n In <i>Assets > Scripts</i>, find and open the script “Instantiate512cubes”. This script starts off by spawning 512 cubes in a circle such that they all face the center. It then takes the sample data every frame and represents it using the heights of the cubes. The effect will be something like this:\r\n <br/><br/>\r\n <img src={img5}/>\r\n <br/><br/>\r\n There are two sections of this script for you to complete on your own. Read the comments for more details on what each section does and hints on how to do it.\r\n <br/><br/>\r\n When you’re done, save your work and switch back to Unity. Create a gameobject called “InstantiateCubes” and attach the script to this object. You’ll notice the Cube Prefab isn’t assigned - you can find a prefab for it in <i>Assets > Prefabs</i>.\r\n <br/><br/>\r\n Press play! You’ll notice that the camera location isn’t great. Change the position and rotation so that the camera is showing the scene correctly. Remember that while you can edit anything while the game is playing by switching back to the scene view, none of it will save once the game stops playing.\r\n <br/><br/>\r\n To work around this, move your camera to where you want it, then click the gear icon in the transform component’s top right to copy component. Then stop play mode (which will move your camera back), click the gear, and paste the component values you just copied.\r\n <br/><br/>\r\n Congrats! You now have a working music visualizer.\r\n </p>\r\n\r\n <div className={decalStyles.boxLine}>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n </div> \r\n\r\n <h2 id=\"introducing-frequency-bands\">Introducing Frequency Bands</h2>\r\n <p>\r\n After testing out your visualizer, you might have noticed that most of the movement happens in the first couple cubes (the lower frequencies) while most of the other cubes (higher frequencies) barely move.\r\n <br/><br/>\r\n The reason for this is that the lower frequency sounds are much closer together, while the higher frequencies are much more spread out. This means all the low frequencies get shoved into a couple of cubes, while the high frequencies are spread out across a whole bunch of them.\r\n <br/><br/>\r\n We’re now going to fix this issue by collating the 512 samples into just 8 bins, which will represent different frequency bands. Audio specialists have grouped the range of human detectable frequencies into 7 broad regions. They are as follows:\r\n <ul>\r\n <li>Sub Bass: 20 - 60 Hz</li>\r\n <li>Bass: 60 - 250 Hz</li>\r\n <li>Low Midrange: 250 - 500 Hz</li>\r\n <li>Midrange: 500 - 2k Hz</li>\r\n <li>Upper Midrange: 2k - 4k Hz</li>\r\n <li>Presence: 4k - 6k Hz</li>\r\n <li>Brilliance: 6k- 20k Hz</li>\r\n </ul>\r\n <img src={img6}/>\r\n <br/><br/>\r\n Notice how the regions roughly increase in size as they increase in frequency. Inspired by this, we’ll create 8 bins where higher frequency bins absorb more samples. We have a total range of 20k - 20 = 19980 Hz to cover, and with 512 samples each sample covers 19980 / 512 = 39 Hz. We’ll define the bins as follows:\r\n <br/><br/>\r\n <img src={img7}/>\r\n <br/><br/>\r\n <i>*We stick the two last samples into the final bin, hence why it’s 258 and not 256.</i>\r\n </p>\r\n\r\n <div className={decalStyles.boxLine}>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n </div> \r\n\r\n <h2 id=\"8-bin-separation\">8 Bin Separation</h2>\r\n <p>\r\n Switch to editing SpectrumAnalyzer. Add a variable for array freqBand, which will contain the collated sample data bins. Also add a function called MakeFrequencyBands(). As filling out this function is rather tedious, we’ve done it for you.\r\n <br/><br/>\r\n <div className={decalStyles.code}>\r\n {`public static float[] freqBand = new float[8];`}\r\n <br/>\r\n {`void MakeFrequencyBands() {`}\r\n {`int count = 0;`}\r\n <br/><br/>\r\n {`// Iterate through the 8 bins.`}\r\n <br/>\r\n {`float average = 0;`}\r\n <br/>\r\n {`int sampleCount = (int)Mathf.Pow (2, i + 1);`}\r\n <br/><br/>\r\n {`// Adding the remaining two samples into the last bin.`}\r\n <br/>\r\n {`if (i == 7) {`}\r\n <br/>\r\n {`sampleCount += 2;`}\r\n <br/>\r\n {`}`}\r\n <br/><br/>\r\n {`// Go through the number of samples for each bin, add the data to the average`}\r\n <br/>\r\n {`for (int j = 0; j < sampleCount; j++) {`}\r\n <br/>\r\n {`average += samples [count];`}\r\n <br/>\r\n {`count++;`}\r\n <br/>\r\n {`}`}\r\n <br/><br/>\r\n {`// Divide to create the average, and scale it appropriately.`}\r\n <br/>\r\n {`average /= count;`}\r\n <br/>\r\n {`freqBand[i] = (i+1) * 100 * average;`}\r\n <br/>\r\n {`}`}\r\n {`}`}\r\n <CopyToClipboard\r\n text=\"public static float[] freqBand = new float[8];\r\n\r\n void MakeFrequencyBands() {\r\n int count = 0;\r\n \r\n // Iterate through the 8 bins.\r\n for (int i = 0; i < 8; i++) {\r\n float average = 0;\r\n int sampleCount = (int)Mathf.Pow (2, i + 1);\r\n \r\n // Adding the remaining two samples into the last bin.\r\n if (i == 7) {\r\n sampleCount += 2;\r\n }\r\n \r\n // Go through the number of samples for each bin, add the data to the average\r\n for (int j = 0; j < sampleCount; j++) {\r\n average += samples [count];\r\n count++;\r\n }\r\n \r\n // Divide to create the average, and scale it appropriately.\r\n average /= count;\r\n freqBand[i] = (i+1) * 100 * average;\r\n }\r\n }\">\r\n <ContentCopyIcon className={decalStyles.copy}/>\r\n </CopyToClipboard>\r\n </div>\r\n <br/><br/>\r\n Add a call to MakeFrequencyBands() to Update() so it gets called every frame.\r\n <br/><br/>\r\n If you ran and debugged this updated script now, you’d find that the value range for each bin vary greatly. To make it easier to work with the values, we’ll scale each bin’s value into a number between 0 and 1.\r\n <br/><br/>\r\n Add the following variables and function to SpectrumAnalyzer:\r\n <br/><br/>\r\n <div className={decalStyles.code}>\r\n {`float[] freqBandHighest = new float[8];`}\r\n <br/>\r\n {`public static float[] audioBands = new float[8];`}\r\n <br/><br/>\r\n {`void CreateAudioBands() {`}\r\n <br/><br/>\r\n {`}`}\r\n <CopyToClipboard\r\n text=\"float[] freqBandHighest = new float[8];\r\n public static float[] audioBands = new float[8];\r\n \r\n void CreateAudioBands() {\r\n \r\n }\">\r\n <ContentCopyIcon className={decalStyles.copy}/>\r\n </CopyToClipboard>\r\n </div>\r\n <br/><br/>\r\n Fill out CreateAudioBands() on your own. This function should first update freqBandHighest, which contains the highest-yet-seen values for each bin. Then it divides each current band value by the highest-yet-seen to get us a number between 0 and 1. This result is saved to array audioBands.\r\n <br/><br/>\r\n Once you’ve completed CreateAudioBands(), add it to the end of Update() so it gets called each frame.\r\n </p>\r\n\r\n <div className={decalStyles.boxLine}>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n </div> \r\n\r\n <h2 id=\"visualizing-8-bins\">Visualizing 8 Bins</h2>\r\n <p>\r\n Finally, let’s create cubes to visualize the calculated values for each bin.\r\n <br/><br/>\r\n Let’s use the cube prefab again, and place eight of them in the middle of the scene. You can simply drag the prefab into the Hierarchy or the scene view. Scale them so they’re visible in the game view.\r\n <br/><br/>\r\n <img src={img8}/>\r\n <br/><br/>\r\n We’ll need a script to read the values from audioBands in SpectrumAnalyzer and represent them as heights for each cube. Create a C# script named “Cube”, and add the following variables to it:\r\n <br/><br/>\r\n <div className={decalStyles.code}>\r\n public int band;\r\n <br/>\r\n public float startScale;\r\n <br/>\r\n public float scaleMultiplier;\r\n <br/>\r\n <CopyToClipboard\r\n text=\"public int band;\r\n public float startScale;\r\n public float scaleMultiplier;\">\r\n <ContentCopyIcon className={decalStyles.copy}/>\r\n </CopyToClipboard>\r\n </div>\r\n <br/><br/>\r\n The variable band represents which bin this cube represents. startScale represents the height of the cube when its audioBand value is 0, and scaleMultiplier is how much to multiply the audioBand value by.\r\n <br/><br/>\r\n Fill out the needed functionality on your own. You can refer to Instantiate512cube for help, since the functionality is similar. When you’re done, attach the script to each of the cubes and set the editor values appropriately (remember, you can modify multiple objects at once via shift/ctrl select). You do not have to use the values shown below.\r\n <br/><br/>\r\n <img src={img9}/>\r\n <br/><br/>\r\n Now try out your music visualizer!\r\n </p>\r\n\r\n <div className={decalStyles.boxLine}>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n </div> \r\n\r\n <h2 id=\"add-your-own-flair\">Add Your Own Flair</h2>\r\n <p>\r\n Your final task is to add your own feature to the music visualizer. This is completely open-ended - you may go as crazy as you’d like. We only request that you do not remove the functionality you’ve implemented thus far.\r\n <br/><br/>\r\n Here are some suggestions on what you could add:\r\n <ul>\r\n <li><a href=\"https://docs.unity3d.com/ScriptReference/Light.html\" target=\"_blank\" className={decalStyles.yellowUnderline}>Lights</a></li>\r\n <li><a href=\"https://docs.unity3d.com/ScriptReference/Material.html\" target=\"_blank\" className={decalStyles.yellowUnderline}>Colors</a></li>\r\n <li>Different Kinds of Visualization (spheres, rotation, etc.)</li>\r\n <li>Band Buffering (removing the choppy movement of the bands)</li>\r\n </ul>\r\n </p>\r\n\r\n <div className={decalStyles.boxLine}>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n <div className={decalStyles.box}></div>\r\n </div> \r\n\r\n <h2 id=\"submission-and-grading\">Submission and Grading</h2>\r\n <p>\r\n Upload the project via Google Drive and submit the link to bCourses. (Instructions on Ed.) Completion of the functionality described in this homework will get you 4 points (out of 5), and adding your own improvements will get you the last point. There will be extra credit given to those whom we deemed went above and beyond with their improvements.\r\n <br/><br/><br/>\r\n <b>CREDITS</b>\r\n <br/><br/>\r\n This assignment was taken and adapted from Peter Olthof’s brilliant music visualizer tutorial on Youtube. You can find it on his channel, <a href=\"https://www.youtube.com/channel/UCBkub2TsbCFIfdhuxRr2Lrw\" target=\"_blank\" className={decalStyles.yellowUnderline}>Peer Play</a>.\r\n </p>\r\n \r\n </div>\r\n </div>\r\n\r\n </body>\r\n </main>\r\n )\r\n}\r\n\r\nexport default hw2\r\n\r\nexport const Head = () => <title>Extended Reality @ Berkeley</title>\r\n","// extracted by mini-css-extract-plugin\nexport var bodyWrapper = \"decal-module--bodyWrapper--7cbfc\";\nexport var box = \"decal-module--box--08640\";\nexport var boxLine = \"decal-module--boxLine--6ea90\";\nexport var code = \"decal-module--code--9b2c6\";\nexport var copy = \"decal-module--copy--cc970\";\nexport var redLink = \"decal-module--redLink--36893\";\nexport var resources = \"decal-module--resources--ee376\";\nexport var textWrapper = \"decal-module--textWrapper--f3b49\";\nexport var toc = \"decal-module--toc--fe879\";\nexport var yellowUnderline = \"decal-module--yellowUnderline--1be03\";","// extracted by mini-css-extract-plugin\nexport var active = \"nav-module--active--e2142\";\nexport var arrow = \"nav-module--arrow--f97c8\";\nexport var arrowOpen = \"nav-module--arrowOpen--0a74b\";\nexport var decal = \"nav-module--decal--6e3af\";\nexport var group = \"nav-module--group--9c696\";\nexport var item = \"nav-module--item--0b430\";\nexport var logo = \"nav-module--logo--d13a3\";\nexport var navBar = \"nav-module--navBar--cb2fc\";\nexport var navBarDecal = \"nav-module--navBarDecal--a9df9\";\nexport var navBarSmall = \"nav-module--navBarSmall--0bb6d\";\nexport var navBarSmallWrapper = \"nav-module--navBarSmallWrapper--b56b7\";\nexport var navList = \"nav-module--navList--7fdbd\";\nexport var smallNavButton = \"nav-module--smallNavButton--bf652\";\nexport var smallNavButtonOutline = \"nav-module--smallNavButtonOutline--db7e1\";\nexport var subLinks = \"nav-module--subLinks--34e84\";\nexport var title = \"nav-module--title--d190f\";","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CopyToClipboard = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _copyToClipboard = _interopRequireDefault(require(\"copy-to-clipboard\"));\n\nvar _excluded = [\"text\", \"onCopy\", \"options\", \"children\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar CopyToClipboard = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(CopyToClipboard, _React$PureComponent);\n\n var _super = _createSuper(CopyToClipboard);\n\n function CopyToClipboard() {\n var _this;\n\n _classCallCheck(this, CopyToClipboard);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"onClick\", function (event) {\n var _this$props = _this.props,\n text = _this$props.text,\n onCopy = _this$props.onCopy,\n children = _this$props.children,\n options = _this$props.options;\n\n var elem = _react[\"default\"].Children.only(children);\n\n var result = (0, _copyToClipboard[\"default\"])(text, options);\n\n if (onCopy) {\n onCopy(text, result);\n } // Bypass onClick if it was present\n\n\n if (elem && elem.props && typeof elem.props.onClick === 'function') {\n elem.props.onClick(event);\n }\n });\n\n return _this;\n }\n\n _createClass(CopyToClipboard, [{\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n _text = _this$props2.text,\n _onCopy = _this$props2.onCopy,\n _options = _this$props2.options,\n children = _this$props2.children,\n props = _objectWithoutProperties(_this$props2, _excluded);\n\n var elem = _react[\"default\"].Children.only(children);\n\n return /*#__PURE__*/_react[\"default\"].cloneElement(elem, _objectSpread(_objectSpread({}, props), {}, {\n onClick: this.onClick\n }));\n }\n }]);\n\n return CopyToClipboard;\n}(_react[\"default\"].PureComponent);\n\nexports.CopyToClipboard = CopyToClipboard;\n\n_defineProperty(CopyToClipboard, \"defaultProps\", {\n onCopy: undefined,\n options: undefined\n});","\"use strict\";\n\nvar _require = require('./Component'),\n CopyToClipboard = _require.CopyToClipboard;\n\nCopyToClipboard.CopyToClipboard = CopyToClipboard;\nmodule.exports = CopyToClipboard;","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n"],"names":["_interopRequireDefault","exports","_createSvgIcon","_jsxRuntime","_default","default","jsx","d","deselectCurrent","clipboardToIE11Formatting","module","text","options","debug","message","reselectPrevious","range","selection","mark","success","document","createRange","getSelection","createElement","textContent","ariaHidden","style","all","position","top","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","addEventListener","e","stopPropagation","format","preventDefault","clipboardData","console","warn","window","clearData","setData","onCopy","body","appendChild","selectNodeContents","addRange","execCommand","Error","err","error","copyKey","test","navigator","userAgent","replace","prompt","removeRange","removeAllRanges","removeChild","activePage","open","className","navStyles","Link","to","display","includes","shown","setShown","useState","src","logo","alt","href","target","onClick","decalStyles","color","icon","EastIcon","type","link","img1","id","img2","img3","CopyToClipboard","ContentCopy","img4","img5","img6","img7","img8","img9","Head","bodyWrapper","box","boxLine","code","copy","redLink","resources","textWrapper","toc","yellowUnderline","active","arrow","arrowOpen","decal","group","item","navBar","navBarSmall","navBarSmallWrapper","navList","smallNavButton","smallNavButtonOutline","subLinks","title","_typeof","obj","Symbol","iterator","constructor","prototype","Object","defineProperty","value","_react","_copyToClipboard","_excluded","__esModule","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","call","_classCallCheck","instance","Constructor","TypeError","_defineProperties","props","descriptor","configurable","writable","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","_isNativeReflectConstruct","result","Super","_getPrototypeOf","NewTarget","this","_possibleConstructorReturn","self","_assertThisInitialized","ReferenceError","getPrototypeOf","_React$PureComponent","subClass","superClass","create","_inherits","protoProps","staticProps","_super","_this","_len","args","Array","_key","concat","event","_this$props","children","elem","Children","only","_this$props2","cloneElement","PureComponent","undefined","rangeCount","activeElement","ranges","getRangeAt","tagName","toUpperCase","blur","focus"],"sourceRoot":""}