osuVisualizer/public/build/bundle.css.map
2020-09-18 21:50:21 +02:00

16 lines
No EOL
15 KiB
Text

{
"version": 3,
"file": "bundle.css",
"sources": [
"App.svelte",
"Menu.svelte",
"Visualizer.svelte"
],
"sourcesContent": [
"<script>\r\n import Menu from \"./Menu.svelte\";\r\n import Visualizer from \"./Visualizer.svelte\";\r\n\r\n var songData = {};\r\n\r\n var osuData = {};\r\n</script>\r\n\r\n<main>\r\n <div class=\"background\">\r\n <Visualizer bind:songData bind:osuData/>\r\n </div>\r\n <div class=\"menu\">\r\n <Menu bind:song={songData} bind:osuData/>\r\n </div>\r\n</main>\r\n\r\n<style>\r\n main {\r\n position: relative;\r\n width: 100vw;\r\n height: 100vh;\r\n }\r\n .background {\r\n position: fixed;\r\n z-index: 0;\r\n left: 0;\r\n right: 0;\r\n width: 100vw;\r\n height: 100vh;\r\n }\r\n .menu {\r\n position: absolute;\r\n z-index: 1;\r\n left: 0;\r\n right: 0;\r\n width: 100vw;\r\n height: 100vh;\r\n }\r\n</style>",
"<script>\r\n export var osuData;\r\n export var song;\r\n\r\n var last = Date.now();\r\n var lastVolumeUpdate = Date.now() - 5000;\r\n var dialogActive = false;\r\n var now = Date.now();\r\n\r\n setInterval(() => {\r\n now = Date.now();\r\n }, 500);\r\n\r\n var playing = true;\r\n\r\n function resetPool() {\r\n if(!osuData.songs) return false;\r\n osuData.songPool = osuData.songs.filter(v => true);\r\n let a = osuData.songPool;\r\n for (let i = a.length - 1; i > 0; i--) { // shuffle\r\n const j = Math.floor(Math.random() * (i + 1));\r\n [a[i], a[j]] = [a[j], a[i]];\r\n }\r\n song = osuData.songPool.shift();\r\n }\r\n\r\n function playNext() {\r\n if(song.audio) {\r\n song.audio.pause();\r\n }\r\n if(osuData.songPool.length) {\r\n song = osuData.songPool.shift();\r\n } else {\r\n resetPool();\r\n }\r\n }\r\n\r\n $: resetPool(osuData.songs);\r\n\r\n $: console.log(song);\r\n\r\n $: {\r\n if(song && song.folder && !song.audio) {\r\n song.audio = new Audio(process.env.USERPROFILE + \"/AppData/Local/osu!/Songs/\" + song.folder + \"/\" + song.audioFile);\r\n song.audio.play();\r\n\r\n song.audio.onended = () => {\r\n playNext();\r\n }\r\n song.audio.onpause = () => {\r\n playing = false;\r\n }\r\n song.audio.onplay = () => {\r\n playing = true;\r\n }\r\n if ('mediaSession' in navigator) {\r\n navigator.mediaSession.metadata = new MediaMetadata({\r\n title: song.song,\r\n artist: song.artist,\r\n album: \"Osu! visualizer\",\r\n artwork: [\r\n { src: process.env.USERPROFILE + \"/AppData/Local/osu!/Data/bt/\" + song.id + \".jpg\", type: 'image/jpeg' },\r\n ]\r\n });\r\n\r\n navigator.mediaSession.setActionHandler('play', function() { playing = true; song.audio.play(); });\r\n navigator.mediaSession.setActionHandler('pause', function() { playing = false; song.audio.pause(); });\r\n navigator.mediaSession.setActionHandler('nexttrack', function() { playNext()});\r\n }\r\n }\r\n }\r\n\r\n function togglePlay() {\r\n playing = !playing;\r\n if(playing) {\r\n song.audio.play();\r\n } else {\r\n song.audio.pause();\r\n }\r\n }\r\n\r\n function updateVolume(e) {\r\n if(!song || !song.audio || !e.altKey) return;\r\n lastVolumeUpdate = Date.now();\r\n var volume = song.audio.volume;\r\n volume += e.deltaY * -0.0005;\r\n song.audio.volume = Math.min(1, Math.max(volume, 0));\r\n }\r\n\r\n setTimeout(() => {\r\n song = song;\r\n }, 200);\r\n</script>\r\n\r\n<svelte:window on:mousemove={() => last = Date.now()} on:wheel={e => updateVolume(e)} />\r\n\r\n<div class=\"menu\">\r\n <div class=\"info\" class:hidden={now - last > 2000}>\r\n {#if song}\r\n <div class=\"song\">\r\n <h2>{song.artist} - {song.song}</h2>\r\n <div class=\"controls\">\r\n <div class=\"play\" on:click={togglePlay}>\r\n <img src=\"images/music_{playing ? \"pause\" : \"play\"}.svg\" alt=\"{playing ? \"Pause\" : \"Play\"} music\" title=\"{playing ? \"Pause\" : \"Play\"} music\">\r\n </div>\r\n <div class=\"forward\" on:click={playNext}>\r\n <img src=\"images/music_forward.svg\" alt=\"Skip the song\" title=\"Skip the song\">\r\n </div>\r\n </div>\r\n </div>\r\n {/if}\r\n </div>\r\n {#if now - lastVolumeUpdate < 4000 && song && song.audio}\r\n <div class=\"volume\" class:hidden={now - lastVolumeUpdate > 2000}>\r\n <div class=\"slider\">\r\n <div class=\"percent\">\r\n {Math.round(song.audio.volume * 100)}%\r\n </div>\r\n </div>\r\n </div>\r\n {/if}\r\n</div>\r\n\r\n<style>\r\n .info {\r\n opacity: 1;\r\n position: relative;\r\n top: 0;\r\n left: 0;\r\n width: 100vw;\r\n height: 80px;\r\n transition: opacity 0.6s;\r\n z-index: 1;\r\n }\r\n\r\n .volume {\r\n opacity: 1;\r\n position: fixed;\r\n z-index: 2;\r\n right: 0;\r\n bottom: 0;\r\n border-radius: 50%;\r\n color: black;\r\n font-size: 30px;\r\n }\r\n\r\n .hidden {\r\n opacity: 0;\r\n transition: opacity 1s;\r\n }\r\n\r\n .info .song {\r\n color: white;\r\n position: absolute;\r\n padding: 5px 5px 5px 25px;\r\n top: 0;\r\n right: 0;\r\n text-align: right;\r\n background: black;\r\n\r\n background: linear-gradient(90deg, transparent 0%, rgba(0,0,0,0.5) 15%, rgba(0,0,0,0.5) 100%);\r\n }\r\n\r\n .info .song h2 {\r\n margin: 0;\r\n }\r\n\r\n .info .controls {\r\n height: 50px;\r\n display: flex;\r\n }\r\n .info .controls div {\r\n height: 100%;\r\n }\r\n .info .controls img {\r\n height: 100%;\r\n filter: invert(100%);\r\n }\r\n</style>",
"<script>\r\n\timport { createEventDispatcher } from 'svelte';\r\n const fs = require(\"fs\");\r\n const OsuDBParser = require(\"osu-db-parser\");\r\n const osuParser = require(\"osu-parser\");\r\n export var osuData;\r\n export var songData;\r\n\r\n var wallpapers = [];\r\n try {\r\n wallpapers = fs.readdirSync(process.env.USERPROFILE + \"/AppData/Local/osu!/Data/bg\");\r\n } catch(e) {\r\n console.error(\"Osu backgrounds weren't found. You must have osu installed and started at least once.\", e);\r\n alert(\"Osu backgrounds not found!\");\r\n }\r\n\r\n try {\r\n osuData = (new OsuDBParser(Buffer.from(fs.readFileSync(process.env.USERPROFILE + \"/AppData/Local/osu!/osu!.db\")))).getOsuDBData();\r\n console.log(osuData);\r\n osuData.songs = osuData.beatmaps.map(v => ({\r\n artist: v.artist_name,\r\n artist_u: v.artist_name_unicode,\r\n audioFile: v.audio_file_name,\r\n folder: v.folder_name,\r\n song: v.song_title,\r\n song_u: v.song_title_unicode,\r\n id: v.beatmapset_id,\r\n dataFile: `${v.artist_name} - ${v.song_title} (${v.creator_name}) [${v.difficulty}].osu`\r\n })).filter((v, i, a) => a.findIndex(x => x.id === v.id) === i);\r\n } catch(e) {\r\n console.error(\"Osu DB weren't found. You must have osu installed and started at least once.\", e);\r\n alert(\"Osu DB not found!\");\r\n }\r\n\r\n var wallpaper;\r\n function shuffleWallpapers() {\r\n wallpaper = wallpapers[Math.floor(Math.random() * wallpapers.length)];\r\n }\r\n\r\n var lastSong = null;\r\n\r\n $: {\r\n if(songData !== lastSong) {\r\n lastSong = songData;\r\n shuffleWallpapers();\r\n }\r\n }\r\n function fetchBeatmap() {\r\n let file = fs.readFileSync(process.env.USERPROFILE + \"/AppData/Local/osu!/Songs/\" + songData.folder + \"/\" + songData.dataFile);\r\n songData.beatmap = osuParser.parseContent(file);\r\n }\r\n $: if(songData && songData.dataFile && !songData.beatmap) fetchBeatmap();\r\n\r\n var mouse = {\r\n x: 0.5,\r\n y: 0.5\r\n };\r\n\r\n const parallaxTreshold = 10;\r\n\r\n function updateMouse(e) {\r\n mouse = {\r\n x: -(e.clientX / window.innerWidth) * parallaxTreshold - parallaxTreshold/2,\r\n y: -(e.clientY / window.innerHeight) * parallaxTreshold - parallaxTreshold/2\r\n }\r\n }\r\n\r\n var isWidthSmaller = false;\r\n\r\n function resize() {\r\n isWidthSmaller = window.innerWidth * 9 < window.innerHeight * 16;\r\n }\r\n resize();\r\n\r\n var animDuration = 0;\r\n var kiaiTime = false;\r\n\r\n setInterval(() => {\r\n if(!songData) return;\r\n if(!songData.beatmap && songData.dataFile) fetchBeatmap();\r\n if(!songData.beatmap) return;\r\n\r\n var tp = null;\r\n for(var t of songData.beatmap.timingPoints) {\r\n if(t.offset > songData.audio.currentTime * 1000) break;\r\n tp = t;\r\n }\r\n if(!tp) {\r\n animDuration = 0;\r\n kiaiTime = false;\r\n return;\r\n }\r\n if(tp.beatLength/2 !== animDuration)\r\n animDuration = tp.beatLength/2;\r\n kiaiTime = tp.kiaiTimeActive;\r\n }, 50);\r\n</script>\r\n\r\n<svelte:window on:mousemove={updateMouse} on:resize={resize} />\r\n\r\n<div\r\n class=\"main\"\r\n style=\"\r\n background-image: url('{process.env.USERPROFILE.replace(/\\\\/g, \"/\")}/AppData/Local/osu!/Data/bg/{wallpaper}');\r\n background-size: {!isWidthSmaller ? `calc(100% + ${parallaxTreshold * 1.5}px) auto` : `auto calc(100% + ${parallaxTreshold * 1.5}px)`};\r\n background-position: {mouse.x}px {mouse.y}px;\r\n \"\r\n>\r\n <img src=\"images/logo.svg\" alt=\"logo\" class=\"logo\" style=\"animation-duration: {animDuration}ms;\">\r\n <img src=\"images/logo.svg\" alt=\"\" class=\"shadow\" style=\"animation-duration: {animDuration * 2}ms;\">\r\n</div>\r\n\r\n<style>\r\n .main {\r\n width: 100%;\r\n height: 100%;\r\n background-size: cover;\r\n background-repeat: no-repeat;\r\n }\r\n\r\n @keyframes bpm {\r\n from {\r\n width: 500px;\r\n height: 500px;\r\n top: calc(50vh - 250px);\r\n left: calc(50vw - 250px);\r\n }\r\n to {\r\n width: 525px;\r\n height: 525px;\r\n top: calc(50vh - 262.5px);\r\n left: calc(50vw - 262.5px);\r\n }\r\n }\r\n\r\n @keyframes bpmShadow {\r\n 0% {\r\n width: 500px;\r\n height: 500px;\r\n top: calc(50vh - 250px);\r\n left: calc(50vw - 250px);\r\n }\r\n 70% {\r\n width: 510px;\r\n height: 510px;\r\n top: calc(50vh - 255px);\r\n left: calc(50vw - 255px);\r\n }\r\n 100% {\r\n width: 500px;\r\n height: 500px;\r\n top: calc(50vh - 250px);\r\n left: calc(50vw - 250px);\r\n }\r\n }\r\n\r\n .main img {\r\n position: fixed;\r\n width: 500px;\r\n height: 500px;\r\n top: calc(50vh - 250px);\r\n left: calc(50vw - 250px);\r\n }\r\n\r\n .main .logo {\r\n animation-name: bpm;\r\n animation-iteration-count: infinite;\r\n animation-direction: alternate;\r\n }\r\n\r\n .main .shadow {\r\n opacity: 0.2;\r\n animation-name: bpmShadow;\r\n animation-iteration-count: infinite;\r\n animation-delay: 50ms;\r\n }\r\n</style>"
],
"names": [],
"mappings": "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"
}