From 1c9645e72df4e1ee7950f3453bf9639e1b378a11 Mon Sep 17 00:00:00 2001 From: ivan tkachenko Date: Thu, 27 Nov 2025 16:57:28 +0200 Subject: [PATCH] WIP: Add frontend web app player & editor in Vue 3 + Vite TODO: - implement viewing & editing. - Add links to deployment, and CHANGELOG. style.css package.json vite config .vscode eslint use --cache .vscode add vite-css-modules editorconfig tsconfig and updated vue-tsc (fixes most of the type checking bugs) fix last type errors audiowaveform gitignore ESLint ESLint: ignore autogenerated JSON lint:fix tsconfig and vite config migrate icon generating script to TS eslint src/lib/ eslint stores eslint src/*.ts eslint audio pnpm update update icon eslint ahh import new tracks json instructions on jq codenames codenames.json fix styles broken by import order eslint audio app error screen footer copyright year global header loading screen transition search field preview track info inspector control controls controls range controls impl controls index eslint no-console off AudioTrack view inspector cards and sliders more controls master volume slider playhead library page player page timeline markers timeline markers header tick timestamp timeline clip index clip empty clip lyrics clip palette clip fadeout clip default import order timeline timeline panel timeline track header timeline trackview clip view clip audio audio waveform scrollsync easy lints eslint store eslint no mutating props off pnpm catalog off add unhead dep use head eslint inspector eslint easy minor stuff eslint audiowaveform easy fix eslint use :key with v-for fix audio waveforms inspector makes more sense season remove debug inspector Merge codenames into main json bump pnpm pnpm in particular enabled monospace Game Over Move JSON to assets to avoid caching issues --- .vscode/extensions.json | 9 + .vscode/settings.json | 103 + .vscode/tailwind.json | 95 + AGENTS.md | 69 + Frontend/.editorconfig | 8 + Frontend/.gitignore | 55 + Frontend/README.md | 39 + Frontend/env.d.ts | 2 + Frontend/eslint.config.ts | 19 + Frontend/index.html | 15 + Frontend/package.json | 62 + Frontend/pnpm-lock.yaml | 7203 +++++++++++++++++ Frontend/pnpm-workspace.yaml | 12 + Frontend/public/MuzikaGromcheAudio/.gitkeep | 1 + Frontend/public/apple-touch-icon.png | Bin 0 -> 87013 bytes Frontend/public/favicon.ico | Bin 0 -> 17542 bytes Frontend/public/icon-192.png | Bin 0 -> 98483 bytes Frontend/public/icon-256.png | Bin 0 -> 168892 bytes Frontend/public/icon-32.png | Bin 0 -> 3190 bytes Frontend/scripts/generate-icons.ts | 51 + Frontend/src/App.vue | 20 + Frontend/src/assets/MuzikaGromcheTracks.json | 3342 ++++++++ Frontend/src/assets/fonts/3270-Regular.woff | Bin 0 -> 108660 bytes Frontend/src/assets/playhead-main.png | Bin 0 -> 124 bytes Frontend/src/assets/playhead-top.png | Bin 0 -> 426 bytes Frontend/src/audio/AudioEngine.ts | 554 ++ Frontend/src/audio/AudioWaveform.ts | 190 + Frontend/src/components/ErrorScreen.vue | 24 + Frontend/src/components/Footer.vue | 51 + Frontend/src/components/LoadingScreen.vue | 93 + Frontend/src/components/ScreenTransition.vue | 41 + Frontend/src/components/SearchField.vue | 46 + .../src/components/editor/PreviewScnene.vue | 50 + Frontend/src/components/editor/TrackInfo.vue | 87 + .../components/inspector/InspectorPanel.vue | 46 + .../components/inspector/controls/Control.vue | 19 + .../inspector/controls/ControlsView.vue | 21 + .../controls/impl/BaseNamedControlView.vue | 36 + .../controls/impl/ButtonControlView.vue | 32 + .../controls/impl/CheckboxControlView.vue | 35 + .../controls/impl/DropDownControlView.vue | 32 + .../inspector/controls/impl/HrControlView.vue | 15 + .../impl/NotImplementedControlView.vue | 15 + .../controls/impl/NumberControlView.vue | 33 + .../controls/impl/RangeControlView.vue | 42 + .../controls/impl/TextAreaControlView.vue | 28 + .../controls/impl/TextControlView.vue | 27 + .../inspector/controls/impl/index.ts | 34 + .../components/inspector/controls/index.ts | 99 + .../components/inspector/views/AudioTrack.vue | 202 + Frontend/src/components/library/Card.vue | 195 + .../src/components/library/CardSeparator.vue | 16 + .../src/components/library/ColorSwatch.vue | 16 + .../src/components/library/LibraryContent.vue | 112 + .../src/components/library/SectionHeader.vue | 23 + Frontend/src/components/library/Slider.d.ts | 2 + Frontend/src/components/library/Slider.vue | 160 + .../src/components/library/ToolBar.module.css | 83 + .../src/components/library/ToolButton.vue | 16 + .../components/library/ToolButtonSmall.vue | 18 + .../src/components/library/ToolToggle.vue | 25 + Frontend/src/components/library/TrackCard.vue | 145 + .../src/components/library/TrackCardBadge.vue | 17 + .../src/components/library/VolumeSlider.vue | 93 + .../src/components/library/ZoomSlider.vue | 40 + .../src/components/library/panel/Panel.vue | 17 + .../library/panel/ScrollablePanel.vue | 17 + .../library/panel/ShadowedScrollView.vue | 75 + .../src/components/library/panel/ToolBar.vue | 10 + .../src/components/scrollsync/ScrollSync.vue | 151 + .../timeline/MasterVolumeSlider.vue | 32 + Frontend/src/components/timeline/Playhead.vue | 60 + Frontend/src/components/timeline/Timeline.vue | 233 + .../src/components/timeline/TimelinePanel.vue | 89 + .../timeline/TimelineTrackHeader.vue | 60 + .../components/timeline/TimelineTrackView.vue | 39 + .../src/components/timeline/Timestamp.vue | 29 + .../timeline/clip/TimelineClipView.vue | 111 + .../components/timeline/clip/impl/Audio.vue | 77 + .../timeline/clip/impl/AudioWaveform.vue | 130 + .../timeline/clip/impl/BottomLine.vue | 4 + .../components/timeline/clip/impl/Default.vue | 54 + .../components/timeline/clip/impl/Empty.vue | 26 + .../components/timeline/clip/impl/FadeOut.vue | 38 + .../components/timeline/clip/impl/Lyrics.vue | 47 + .../components/timeline/clip/impl/Palette.vue | 83 + .../components/timeline/clip/impl/README.md | 1 + .../components/timeline/clip/impl/index.ts | 11 + .../src/components/timeline/clip/index.ts | 30 + .../timeline/header/TickInterval.vue | 103 + .../timeline/header/TimelineHeader.vue | 49 + .../components/timeline/markers/MarkerBox.vue | 75 + .../timeline/markers/MarkerLine.vue | 31 + .../components/timeline/markers/TickLine.vue | 20 + .../timeline/markers/TimelineMarkers.vue | 31 + .../src/components/timeline/markers/index.ts | 11 + .../timeline/markers/marker-box.svg | 4 + Frontend/src/easing.ts | 3 + Frontend/src/events.ts | 21 + Frontend/src/global-header/GlobalHeader.vue | 52 + .../src/global-header/GlobalHeaderStore.ts | 21 + Frontend/src/global-header/useGlobalHeader.ts | 29 + Frontend/src/lib/AudioTrack/index.test.ts | 65 + Frontend/src/lib/AudioTrack/index.ts | 214 + Frontend/src/lib/Timeline.ts | 370 + Frontend/src/lib/TinelineTicks.ts | 152 + Frontend/src/lib/colors/clips.ts | 75 + Frontend/src/lib/colors/markers.ts | 75 + Frontend/src/lib/easing/index.test.ts | 72 + Frontend/src/lib/easing/index.ts | 71 + Frontend/src/lib/iter.ts | 54 + Frontend/src/lib/math.test.ts | 20 + Frontend/src/lib/math.ts | 16 + .../onInputKeyStroke/index.browser.test.ts | 69 + Frontend/src/lib/onInputKeyStroke/index.ts | 107 + Frontend/src/lib/sleep.ts | 4 + Frontend/src/lib/units.ts | 15 + Frontend/src/lib/useOptionalWidgetState.ts | 49 + Frontend/src/lib/usePx/index.test.ts | 81 + Frontend/src/lib/usePx/index.ts | 46 + .../src/lib/useTimelineScrubbing/index.ts | 129 + Frontend/src/lib/useTimelineTicks.ts | 105 + Frontend/src/lib/useVeiwportWheel/index.ts | 51 + Frontend/src/lib/useWeakCache/index.ts | 20 + Frontend/src/lib/useZoomAxis/index.test.ts | 307 + Frontend/src/lib/useZoomAxis/index.ts | 320 + Frontend/src/lib/vue.ts | 90 + Frontend/src/main.ts | 18 + Frontend/src/reset.css | 48 + Frontend/src/router.ts | 24 + Frontend/src/routes/LibraryPage.vue | 43 + Frontend/src/routes/PlayerPage.vue | 159 + Frontend/src/store/ScrollStore.ts | 33 + Frontend/src/store/TimelineStore.ts | 493 ++ Frontend/src/store/TrackStore.ts | 192 + Frontend/src/style.css | 363 + Frontend/tests/components/SearchField.spec.ts | 69 + Frontend/tsconfig.app.json | 12 + Frontend/tsconfig.json | 14 + Frontend/tsconfig.node.json | 20 + Frontend/tsconfig.vitest.json | 11 + Frontend/vite.config.ts | 50 + Frontend/vitest.config.ts | 27 + 143 files changed, 19945 insertions(+) create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 .vscode/tailwind.json create mode 100644 AGENTS.md create mode 100644 Frontend/.editorconfig create mode 100644 Frontend/.gitignore create mode 100644 Frontend/README.md create mode 100644 Frontend/env.d.ts create mode 100644 Frontend/eslint.config.ts create mode 100644 Frontend/index.html create mode 100644 Frontend/package.json create mode 100644 Frontend/pnpm-lock.yaml create mode 100644 Frontend/pnpm-workspace.yaml create mode 100644 Frontend/public/MuzikaGromcheAudio/.gitkeep create mode 100644 Frontend/public/apple-touch-icon.png create mode 100644 Frontend/public/favicon.ico create mode 100644 Frontend/public/icon-192.png create mode 100644 Frontend/public/icon-256.png create mode 100644 Frontend/public/icon-32.png create mode 100644 Frontend/scripts/generate-icons.ts create mode 100644 Frontend/src/App.vue create mode 100644 Frontend/src/assets/MuzikaGromcheTracks.json create mode 100644 Frontend/src/assets/fonts/3270-Regular.woff create mode 100644 Frontend/src/assets/playhead-main.png create mode 100644 Frontend/src/assets/playhead-top.png create mode 100644 Frontend/src/audio/AudioEngine.ts create mode 100644 Frontend/src/audio/AudioWaveform.ts create mode 100644 Frontend/src/components/ErrorScreen.vue create mode 100644 Frontend/src/components/Footer.vue create mode 100644 Frontend/src/components/LoadingScreen.vue create mode 100644 Frontend/src/components/ScreenTransition.vue create mode 100644 Frontend/src/components/SearchField.vue create mode 100644 Frontend/src/components/editor/PreviewScnene.vue create mode 100644 Frontend/src/components/editor/TrackInfo.vue create mode 100644 Frontend/src/components/inspector/InspectorPanel.vue create mode 100644 Frontend/src/components/inspector/controls/Control.vue create mode 100644 Frontend/src/components/inspector/controls/ControlsView.vue create mode 100644 Frontend/src/components/inspector/controls/impl/BaseNamedControlView.vue create mode 100644 Frontend/src/components/inspector/controls/impl/ButtonControlView.vue create mode 100644 Frontend/src/components/inspector/controls/impl/CheckboxControlView.vue create mode 100644 Frontend/src/components/inspector/controls/impl/DropDownControlView.vue create mode 100644 Frontend/src/components/inspector/controls/impl/HrControlView.vue create mode 100644 Frontend/src/components/inspector/controls/impl/NotImplementedControlView.vue create mode 100644 Frontend/src/components/inspector/controls/impl/NumberControlView.vue create mode 100644 Frontend/src/components/inspector/controls/impl/RangeControlView.vue create mode 100644 Frontend/src/components/inspector/controls/impl/TextAreaControlView.vue create mode 100644 Frontend/src/components/inspector/controls/impl/TextControlView.vue create mode 100644 Frontend/src/components/inspector/controls/impl/index.ts create mode 100644 Frontend/src/components/inspector/controls/index.ts create mode 100644 Frontend/src/components/inspector/views/AudioTrack.vue create mode 100644 Frontend/src/components/library/Card.vue create mode 100644 Frontend/src/components/library/CardSeparator.vue create mode 100644 Frontend/src/components/library/ColorSwatch.vue create mode 100644 Frontend/src/components/library/LibraryContent.vue create mode 100644 Frontend/src/components/library/SectionHeader.vue create mode 100644 Frontend/src/components/library/Slider.d.ts create mode 100644 Frontend/src/components/library/Slider.vue create mode 100644 Frontend/src/components/library/ToolBar.module.css create mode 100644 Frontend/src/components/library/ToolButton.vue create mode 100644 Frontend/src/components/library/ToolButtonSmall.vue create mode 100644 Frontend/src/components/library/ToolToggle.vue create mode 100644 Frontend/src/components/library/TrackCard.vue create mode 100644 Frontend/src/components/library/TrackCardBadge.vue create mode 100644 Frontend/src/components/library/VolumeSlider.vue create mode 100644 Frontend/src/components/library/ZoomSlider.vue create mode 100644 Frontend/src/components/library/panel/Panel.vue create mode 100644 Frontend/src/components/library/panel/ScrollablePanel.vue create mode 100644 Frontend/src/components/library/panel/ShadowedScrollView.vue create mode 100644 Frontend/src/components/library/panel/ToolBar.vue create mode 100644 Frontend/src/components/scrollsync/ScrollSync.vue create mode 100644 Frontend/src/components/timeline/MasterVolumeSlider.vue create mode 100644 Frontend/src/components/timeline/Playhead.vue create mode 100644 Frontend/src/components/timeline/Timeline.vue create mode 100644 Frontend/src/components/timeline/TimelinePanel.vue create mode 100644 Frontend/src/components/timeline/TimelineTrackHeader.vue create mode 100644 Frontend/src/components/timeline/TimelineTrackView.vue create mode 100644 Frontend/src/components/timeline/Timestamp.vue create mode 100644 Frontend/src/components/timeline/clip/TimelineClipView.vue create mode 100644 Frontend/src/components/timeline/clip/impl/Audio.vue create mode 100644 Frontend/src/components/timeline/clip/impl/AudioWaveform.vue create mode 100644 Frontend/src/components/timeline/clip/impl/BottomLine.vue create mode 100644 Frontend/src/components/timeline/clip/impl/Default.vue create mode 100644 Frontend/src/components/timeline/clip/impl/Empty.vue create mode 100644 Frontend/src/components/timeline/clip/impl/FadeOut.vue create mode 100644 Frontend/src/components/timeline/clip/impl/Lyrics.vue create mode 100644 Frontend/src/components/timeline/clip/impl/Palette.vue create mode 100644 Frontend/src/components/timeline/clip/impl/README.md create mode 100644 Frontend/src/components/timeline/clip/impl/index.ts create mode 100644 Frontend/src/components/timeline/clip/index.ts create mode 100644 Frontend/src/components/timeline/header/TickInterval.vue create mode 100644 Frontend/src/components/timeline/header/TimelineHeader.vue create mode 100644 Frontend/src/components/timeline/markers/MarkerBox.vue create mode 100644 Frontend/src/components/timeline/markers/MarkerLine.vue create mode 100644 Frontend/src/components/timeline/markers/TickLine.vue create mode 100644 Frontend/src/components/timeline/markers/TimelineMarkers.vue create mode 100644 Frontend/src/components/timeline/markers/index.ts create mode 100644 Frontend/src/components/timeline/markers/marker-box.svg create mode 100644 Frontend/src/easing.ts create mode 100644 Frontend/src/events.ts create mode 100644 Frontend/src/global-header/GlobalHeader.vue create mode 100644 Frontend/src/global-header/GlobalHeaderStore.ts create mode 100644 Frontend/src/global-header/useGlobalHeader.ts create mode 100644 Frontend/src/lib/AudioTrack/index.test.ts create mode 100644 Frontend/src/lib/AudioTrack/index.ts create mode 100644 Frontend/src/lib/Timeline.ts create mode 100644 Frontend/src/lib/TinelineTicks.ts create mode 100644 Frontend/src/lib/colors/clips.ts create mode 100644 Frontend/src/lib/colors/markers.ts create mode 100644 Frontend/src/lib/easing/index.test.ts create mode 100644 Frontend/src/lib/easing/index.ts create mode 100644 Frontend/src/lib/iter.ts create mode 100644 Frontend/src/lib/math.test.ts create mode 100644 Frontend/src/lib/math.ts create mode 100644 Frontend/src/lib/onInputKeyStroke/index.browser.test.ts create mode 100644 Frontend/src/lib/onInputKeyStroke/index.ts create mode 100644 Frontend/src/lib/sleep.ts create mode 100644 Frontend/src/lib/units.ts create mode 100644 Frontend/src/lib/useOptionalWidgetState.ts create mode 100644 Frontend/src/lib/usePx/index.test.ts create mode 100644 Frontend/src/lib/usePx/index.ts create mode 100644 Frontend/src/lib/useTimelineScrubbing/index.ts create mode 100644 Frontend/src/lib/useTimelineTicks.ts create mode 100644 Frontend/src/lib/useVeiwportWheel/index.ts create mode 100644 Frontend/src/lib/useWeakCache/index.ts create mode 100644 Frontend/src/lib/useZoomAxis/index.test.ts create mode 100644 Frontend/src/lib/useZoomAxis/index.ts create mode 100644 Frontend/src/lib/vue.ts create mode 100644 Frontend/src/main.ts create mode 100644 Frontend/src/reset.css create mode 100644 Frontend/src/router.ts create mode 100644 Frontend/src/routes/LibraryPage.vue create mode 100644 Frontend/src/routes/PlayerPage.vue create mode 100644 Frontend/src/store/ScrollStore.ts create mode 100644 Frontend/src/store/TimelineStore.ts create mode 100644 Frontend/src/store/TrackStore.ts create mode 100644 Frontend/src/style.css create mode 100644 Frontend/tests/components/SearchField.spec.ts create mode 100644 Frontend/tsconfig.app.json create mode 100644 Frontend/tsconfig.json create mode 100644 Frontend/tsconfig.node.json create mode 100644 Frontend/tsconfig.vitest.json create mode 100644 Frontend/vite.config.ts create mode 100644 Frontend/vitest.config.ts diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..a06a8c6 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,9 @@ +{ + "recommendations": [ + "Vue.volar", + "vitest.explorer", + "dbaeumer.vscode-eslint", + "EditorConfig.EditorConfig", + "esbenp.prettier-vscode" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..df9b23b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,103 @@ +{ + // https://github.com/tailwindlabs/tailwindcss/discussions/5258#discussioncomment-1979394 + "css.customData": [ + ".vscode/tailwind.json" + ], + // Disable the default formatter, use eslint instead + "prettier.enable": false, + "editor.formatOnSave": false, + // Auto fix + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit", + "source.organizeImports": "never" + }, + // Silent the stylistic rules in your IDE, but still auto fix them + "eslint.rules.customizations": [ + { + "rule": "style/*", + "severity": "off", + "fixable": true + }, + { + "rule": "format/*", + "severity": "off", + "fixable": true + }, + { + "rule": "*-indent", + "severity": "off", + "fixable": true + }, + { + "rule": "*-spacing", + "severity": "off", + "fixable": true + }, + { + "rule": "*-spaces", + "severity": "off", + "fixable": true + }, + { + "rule": "*-order", + "severity": "off", + "fixable": true + }, + { + "rule": "*-dangle", + "severity": "off", + "fixable": true + }, + { + "rule": "*-newline", + "severity": "off", + "fixable": true + }, + { + "rule": "*quotes", + "severity": "off", + "fixable": true + }, + { + "rule": "*semi", + "severity": "off", + "fixable": true + } + ], + // Enable eslint for all supported languages + "eslint.validate": [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "vue", + "html", + "markdown", + "json", + "jsonc", + "yaml", + "toml", + "xml", + "gql", + "graphql", + "astro", + "svelte", + "css", + "less", + "scss", + "pcss", + "postcss" + ], + "workspaceKeybindings.manimPreviewTask.enabled": true, + "typescript.format.enable": false, + "typescript.tsdk": "./Frontend/node_modules/typescript/lib", + "[vue]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, + "[typescript]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, + "[javascript]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + } +} \ No newline at end of file diff --git a/.vscode/tailwind.json b/.vscode/tailwind.json new file mode 100644 index 0000000..53078b1 --- /dev/null +++ b/.vscode/tailwind.json @@ -0,0 +1,95 @@ +{ + "version": 4.0, + "atDirectives": [ + { + "name": "@theme", + "description": "Use the `@theme` directive to define your project's custom design tokens, like fonts, colors, and breakpoints.", + "references": [ + { + "name": "Tailwind Documentation", + "url": "https://tailwindcss.com/docs/functions-and-directives#theme-directive" + } + ] + }, + { + "name": "@source", + "description": "Use the `@source` directive to explicitly specify source files that aren't picked up by Tailwind's automatic content detection.", + "references": [ + { + "name": "Tailwind Documentation", + "url": "https://tailwindcss.com/docs/functions-and-directives#source-directive" + } + ] + }, + { + "name": "@utility", + "description": "Use the `@utility` directive to add custom utilities to your project that work with variants like `hover`, `focus` and `lg`.", + "references": [ + { + "name": "Tailwind Documentation", + "url": "https://tailwindcss.com/docs/functions-and-directives#utility-directive" + } + ] + }, + { + "name": "@variant", + "description": "Use the `@variant` directive to apply a Tailwind variant to styles in your CSS.", + "references": [ + { + "name": "Tailwind Documentation", + "url": "https://tailwindcss.com/docs/functions-and-directives#variant-directive" + } + ] + }, + { + "name": "@custom-variant", + "description": "Use the `@custom-variant` directive to add a custom variant in your project.", + "references": [ + { + "name": "Tailwind Documentation", + "url": "https://tailwindcss.com/docs/functions-and-directives#custom-variant-directive" + } + ] + }, + { + "name": "@apply", + "description": "Use the `@apply` directive to inline any existing utility classes into your own custom CSS.", + "references": [ + { + "name": "Tailwind Documentation", + "url": "https://tailwindcss.com/docs/functions-and-directives#apply-directive" + } + ] + }, + { + "name": "@reference", + "description": "If you want to use `@apply` or `@variant` in the ` diff --git a/Frontend/src/assets/MuzikaGromcheTracks.json b/Frontend/src/assets/MuzikaGromcheTracks.json new file mode 100644 index 0000000..7a24031 --- /dev/null +++ b/Frontend/src/assets/MuzikaGromcheTracks.json @@ -0,0 +1,3342 @@ +{ + "version": "1337.9001.68", + "tracks": [ + { + "Enabled": true, + "Name": "Arcane", + "Artist": "Imagine Dragons & J.I.D", + "Song": "Enemy", + "IsExplicit": false, + "Season": null, + "Language": "English", + "WindUpTimer": 38.28, + "Bpm": 77.0002, + "Beats": 32, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 41.366, + "FileDurationLoop": 24.935, + "FileNameIntro": "ArcaneIntro.ogg", + "FileNameLoop": "ArcaneLoop.ogg", + "BeatsOffset": 0.0, + "FadeOutBeat": -1.5, + "FadeOutDuration": 1.5, + "ColorTransitionIn": 0.2, + "ColorTransitionOut": 0.3, + "ColorTransitionEasing": "InOutExpo", + "FlickerLightsTimeSeries": [ + -48.1, + -44.1, + -16.0, + 15.9, + 31.9 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [ + [ + -48.0, + 0.0 + ], + [ + -47.75, + 0.5 + ], + [ + -44.0, + 0.2 + ], + [ + -43.75, + 0.5 + ], + [ + -36.0, + 0.0 + ], + [ + 0.0, + 0.0 + ], + [ + 0.25, + 0.4 + ], + [ + 6.0, + 0.0 + ], + [ + 8.0, + 0.0 + ], + [ + 8.25, + 0.4 + ], + [ + 14.0, + 0.0 + ], + [ + 16.0, + 0.0 + ], + [ + 16.25, + 0.4 + ], + [ + 22.0, + 0.0 + ], + [ + 24.0, + 0.0 + ], + [ + 24.25, + 0.4 + ], + [ + 30.0, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [ + [ + 24.0, + 0.0 + ], + [ + 24.25, + 0.5 + ], + [ + 30.0, + 0.0 + ] + ], + "Palette": [ + "#F0FBFF", + "#0B95FF", + "#A8F5E2", + "#B79BF2", + "#FED2E1" + ], + "GameOverText": "[LIFE SUPPORT: HEXTECH]" + }, + { + "Enabled": true, + "Name": "AttentionPls1", + "Artist": "Отпетые Мошенники", + "Song": "Обратите внимание", + "IsExplicit": true, + "Season": null, + "Language": "Russian", + "WindUpTimer": 39.19, + "Bpm": 97.8244247, + "Beats": 32, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 49.061, + "FileDurationLoop": 19.627, + "FileNameIntro": "AttentionPls1Intro.ogg", + "FileNameLoop": "AttentionPlsLoop.ogg", + "BeatsOffset": 0.3, + "FadeOutBeat": -6.0, + "FadeOutDuration": 5.0, + "ColorTransitionIn": 0.4, + "ColorTransitionOut": 0.4, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -8.0, + 31.0 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [ + [ + 7.0, + 0.0 + ], + [ + 12.0, + 0.9 + ], + [ + 15.0, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [ + [ + 23.0, + 0.0 + ], + [ + 28.0, + 0.4 + ], + [ + 31.0, + 0.0 + ] + ], + "Palette": [ + "#FCEB3C", + "#FC3C9D", + "#65C7FA", + "#89FC8F", + "#FEE9E9", + "#FCEB3C", + "#89FC8F", + "#FC3C9D" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "AttentionPls2", + "Artist": "Отпетые Мошенники", + "Song": "Обратите внимание", + "IsExplicit": true, + "Season": null, + "Language": "Russian", + "WindUpTimer": 39.19, + "Bpm": 97.8244247, + "Beats": 32, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 49.061, + "FileDurationLoop": 19.627, + "FileNameIntro": "AttentionPls2Intro.ogg", + "FileNameLoop": "AttentionPlsLoop.ogg", + "BeatsOffset": 0.3, + "FadeOutBeat": -6.0, + "FadeOutDuration": 5.0, + "ColorTransitionIn": 0.4, + "ColorTransitionOut": 0.4, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -8.0, + 31.0 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [ + [ + 7.0, + 0.0 + ], + [ + 12.0, + 0.9 + ], + [ + 15.0, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [ + [ + 23.0, + 0.0 + ], + [ + 28.0, + 0.4 + ], + [ + 31.0, + 0.0 + ] + ], + "Palette": [ + "#FCEB3C", + "#FC3C9D", + "#65C7FA", + "#89FC8F", + "#FEE9E9", + "#FCEB3C", + "#89FC8F", + "#FC3C9D" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "BbIXODaHET", + "Artist": "Сплин", + "Song": "Выхода нет", + "IsExplicit": false, + "Season": null, + "Language": "Russian", + "WindUpTimer": 40.85, + "Bpm": 84.82064, + "Beats": 32, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 53.368, + "FileDurationLoop": 22.636, + "FileNameIntro": "BbIXODaHETIntro.ogg", + "FileNameLoop": "BbIXODaHETLoop.ogg", + "BeatsOffset": 0.3, + "FadeOutBeat": -6.0, + "FadeOutDuration": 6.0, + "ColorTransitionIn": 0.7, + "ColorTransitionOut": 0.3, + "ColorTransitionEasing": "InOutCubic", + "FlickerLightsTimeSeries": [ + -32.5, + -16.5, + 30.5 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [ + [ + -1.0, + 0.0 + ], + [ + 2.0, + 0.4 + ], + [ + 7.0, + 0.0 + ], + [ + 31.0, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#E6D58F", + "#612F7E", + "#D9783F", + "#C3411C", + "#D3B742", + "#549BDE" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "BeefLiver1", + "Artist": "Imagine Dragons", + "Song": "Believer", + "IsExplicit": false, + "Season": null, + "Language": "English", + "WindUpTimer": 39.35, + "Bpm": 124.999992, + "Beats": 48, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 43.166, + "FileDurationLoop": 23.04, + "FileNameIntro": "BeefLiver1Intro.ogg", + "FileNameLoop": "BeefLiverLoop.ogg", + "BeatsOffset": 0.2, + "FadeOutBeat": -3.0, + "FadeOutDuration": 3.0, + "ColorTransitionIn": 0.4, + "ColorTransitionOut": 0.4, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -48.0, + -40.0, + -4.5, + 44.0 + ], + "Lyrics": [ + [ + -66.0, + "First things first" + ], + [ + -62.0, + "First things first,\nI'ma say all the words\ninside my head" + ], + [ + -57.0, + "I'm fired up and tired of" + ], + [ + -52.0, + "the way that things have been,\noh-ooh" + ], + [ + -44.0, + "(x2)\nThe way that things have been,\noh-ooooh" + ], + [ + -34.0, + "I was broken from a young age, taking my sulkin' to the masses" + ], + [ + -27.0, + "Writing my poems for the few" + ], + [ + -23.0, + "that look at me, took to me,\nshook at me, feelin' me" + ], + [ + -19.0, + "Singing from heartache from the pain" + ], + [ + -15.0, + "Singing from heartache from the pain,\ntaking my message from the veins" + ], + [ + -11.0, + "Speaking my lesson from the brain" + ], + [ + -8.0, + "Speaking my lesson from the brain,\nseeing the beauty through the" + ], + [ + -0.1, + "PAIN!" + ] + ], + "DrunknessLoopOffsetTimeSeries": [ + [ + -0.5, + 0.0 + ], + [ + 0.5, + 0.6 + ], + [ + 8.0, + 0.0 + ], + [ + 15.0, + 0.0 + ], + [ + 16.0, + 0.4 + ], + [ + 24.0, + 0.0 + ], + [ + 29.0, + 0.0 + ], + [ + 30.0, + 0.3 + ], + [ + 36.0, + 0.0 + ], + [ + 37.0, + 0.0 + ], + [ + 38.0, + 0.3 + ], + [ + 44.0, + 0.0 + ], + [ + 47.5, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#FFEBEB", + "#FFEBEB", + "#445782", + "#EBA602", + "#5EEBB9", + "#8EE3DC", + "#A23045", + "#262222" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "BeefLiver3", + "Artist": "Imagine Dragons", + "Song": "Believer", + "IsExplicit": false, + "Season": null, + "Language": "English", + "WindUpTimer": 39.35, + "Bpm": 124.999992, + "Beats": 48, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 43.166, + "FileDurationLoop": 23.04, + "FileNameIntro": "BeefLiver3Intro.ogg", + "FileNameLoop": "BeefLiverLoop.ogg", + "BeatsOffset": 0.2, + "FadeOutBeat": -3.0, + "FadeOutDuration": 3.0, + "ColorTransitionIn": 0.4, + "ColorTransitionOut": 0.4, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -48.0, + -40.0, + -4.5, + 44.0 + ], + "Lyrics": [ + [ + -66.0, + "Third things third" + ], + [ + -62.0, + "Third things third,\nsend a prayer to the ones up above" + ], + [ + -57.0, + "All the hate that you've heard has turned" + ], + [ + -52.0, + "your spirit to a dove,\noh-ooh" + ], + [ + -44.0, + "(x2)\nYour spirit up above,\noh-ooooh" + ], + [ + -34.0, + "I was chokin' in the crowd, building my rain up in the cloud" + ], + [ + -27.0, + "Falling like ashes to the ground" + ], + [ + -23.0, + "hoping my feelings, they would drown" + ], + [ + -19.0, + "But they never did, ever lived, ebbin' and flowin'" + ], + [ + -15.0, + "Inhibited, limited 'til it broke open" + ], + [ + -11.0, + "Inhibited, limited 'til it broke open and rained down" + ], + [ + -8.0, + "It rained down like" + ], + [ + -0.1, + "PAIN!" + ] + ], + "DrunknessLoopOffsetTimeSeries": [ + [ + -0.5, + 0.0 + ], + [ + 0.5, + 0.6 + ], + [ + 8.0, + 0.0 + ], + [ + 15.0, + 0.0 + ], + [ + 16.0, + 0.4 + ], + [ + 24.0, + 0.0 + ], + [ + 29.0, + 0.0 + ], + [ + 30.0, + 0.3 + ], + [ + 36.0, + 0.0 + ], + [ + 37.0, + 0.0 + ], + [ + 38.0, + 0.3 + ], + [ + 44.0, + 0.0 + ], + [ + 47.5, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#FFEBEB", + "#FFEBEB", + "#445782", + "#EBA602", + "#5EEBB9", + "#8EE3DC", + "#A23045", + "#262222" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "BeefLiver4", + "Artist": "Imagine Dragons", + "Song": "Believer", + "IsExplicit": false, + "Season": null, + "Language": "English", + "WindUpTimer": 31.68, + "Bpm": 124.999992, + "Beats": 48, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 35.487, + "FileDurationLoop": 23.04, + "FileNameIntro": "BeefLiver4Intro.ogg", + "FileNameLoop": "BeefLiver4Loop.ogg", + "BeatsOffset": 0.2, + "FadeOutBeat": -3.0, + "FadeOutDuration": 3.0, + "ColorTransitionIn": 0.4, + "ColorTransitionOut": 0.4, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -32.0, + -24.0, + -4.5, + 44.0 + ], + "Lyrics": [ + [ + -50.0, + "Last things last" + ], + [ + -46.0, + "Last things last,\nby the grace\nof the fire and the flames" + ], + [ + -41.0, + "You're the face of the future" + ], + [ + -36.0, + "the blood in my veins, oh-ooh" + ], + [ + -28.0, + "(x2)\nThe blood in my veins, oh-ooooh" + ], + [ + -19.0, + "But they never did, ever lived, ebbin' and flowin'" + ], + [ + -15.0, + "Inhibited, limited 'til it broke open" + ], + [ + -11.0, + "Inhibited, limited 'til it broke open and rained down" + ], + [ + -8.0, + "It rained down like" + ], + [ + -0.1, + "PAIN!" + ] + ], + "DrunknessLoopOffsetTimeSeries": [ + [ + -0.5, + 0.0 + ], + [ + 0.5, + 0.6 + ], + [ + 8.0, + 0.0 + ], + [ + 15.0, + 0.0 + ], + [ + 16.0, + 0.4 + ], + [ + 24.0, + 0.0 + ], + [ + 29.0, + 0.0 + ], + [ + 30.0, + 0.3 + ], + [ + 36.0, + 0.0 + ], + [ + 37.0, + 0.0 + ], + [ + 38.0, + 0.3 + ], + [ + 44.0, + 0.0 + ], + [ + 47.5, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#FFEBEB", + "#FFEBEB", + "#445782", + "#EBA602", + "#5EEBB9", + "#8EE3DC", + "#A23045", + "#262222" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "Beha1", + "Artist": "Ленинград ft. Глюк'oZа ft. ST", + "Song": "Жу-Жу", + "IsExplicit": true, + "Season": null, + "Language": "Russian", + "WindUpTimer": 35.23, + "Bpm": 81.99027, + "Beats": 34, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 47.15, + "FileDurationLoop": 24.881, + "FileNameIntro": "Beha1Intro.ogg", + "FileNameLoop": "BehaLoop.ogg", + "BeatsOffset": 0.0, + "FadeOutBeat": -4.0, + "FadeOutDuration": 3.9, + "ColorTransitionIn": 0.1, + "ColorTransitionOut": 0.6, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -6.0, + 16.5 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#9554F9", + "#3769FD", + "#E43B65", + "#59CFEA", + "#7F3FEE", + "#C831FE" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "Beha2", + "Artist": "Ленинград ft. Глюк'oZа ft. ST", + "Song": "Жу-Жу", + "IsExplicit": true, + "Season": null, + "Language": "Russian", + "WindUpTimer": 38.16, + "Bpm": 81.99027, + "Beats": 34, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 50.064, + "FileDurationLoop": 24.881, + "FileNameIntro": "Beha2Intro.ogg", + "FileNameLoop": "BehaLoop.ogg", + "BeatsOffset": 0.0, + "FadeOutBeat": -4.0, + "FadeOutDuration": 3.9, + "ColorTransitionIn": 0.1, + "ColorTransitionOut": 0.6, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -6.0, + 16.5 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#9554F9", + "#3769FD", + "#E43B65", + "#59CFEA", + "#7F3FEE", + "#C831FE" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "Beha3", + "Artist": "Ленинград ft. Глюк'oZа ft. ST", + "Song": "Жу-Жу", + "IsExplicit": true, + "Season": null, + "Language": "Russian", + "WindUpTimer": 35.21, + "Bpm": 81.99027, + "Beats": 34, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 47.111, + "FileDurationLoop": 24.881, + "FileNameIntro": "Beha3Intro.ogg", + "FileNameLoop": "BehaLoop.ogg", + "BeatsOffset": 0.0, + "FadeOutBeat": -4.0, + "FadeOutDuration": 3.9, + "ColorTransitionIn": 0.1, + "ColorTransitionOut": 0.6, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -6.0, + 16.5 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#9554F9", + "#3769FD", + "#E43B65", + "#59CFEA", + "#7F3FEE", + "#C831FE" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "Chereshnya", + "Artist": "Дискотека Авария", + "Song": "Малинки", + "IsExplicit": false, + "Season": null, + "Language": "Russian", + "WindUpTimer": 45.48, + "Bpm": 131.958755, + "Beats": 64, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 46.15, + "FileDurationLoop": 29.1, + "FileNameIntro": "ChereshnyaIntro.ogg", + "FileNameLoop": "ChereshnyaLoop.ogg", + "BeatsOffset": 0.0, + "FadeOutBeat": -4.0, + "FadeOutDuration": 4.0, + "ColorTransitionIn": 0.3, + "ColorTransitionOut": 0.35, + "ColorTransitionEasing": "InOutCubic", + "FlickerLightsTimeSeries": [ + -5.0, + 27.0, + 29.0, + 59.0, + 61.0 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#A01471", + "#CB2243", + "#4CAF50", + "#F01D7A", + "#AF005A", + "#EF355F", + "#FFD85D", + "#FF66B2", + "#A01471", + "#4CAF50", + "#CB2243", + "#F01D7A", + "#AF005A", + "#FFD85D", + "#EF355F", + "#FF66B2" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "DeployDestroy", + "Artist": "Noize MC", + "Song": "Устрой дестрой", + "IsExplicit": false, + "Season": null, + "Language": "Russian", + "WindUpTimer": 40.68, + "Bpm": 129.878922, + "Beats": 32, + "LoopOffset": 32, + "Ext": "ogg", + "FileDurationIntro": 57.283, + "FileDurationLoop": 14.783, + "FileNameIntro": "DeployDestroyIntro.ogg", + "FileNameLoop": "DeployDestroyLoop.ogg", + "BeatsOffset": 0.2, + "FadeOutBeat": -38.0, + "FadeOutDuration": 4.0, + "ColorTransitionIn": 0.25, + "ColorTransitionOut": 0.25, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -101.0, + -93.0, + -77.0, + -61.0, + -37.0, + -5.0, + 27.0 + ], + "Lyrics": [ + [ + -111.0, + "Deploy Destroy, porjadok eto otstoj" + ], + [ + -103.0, + "Krushi, lomaj, trjasi bashkoju pustoj" + ], + [ + -95.0, + "Dopej, razbej i novuju otkryvaj" + ], + [ + -87.0, + "Davaj-davaj!" + ], + [ + -79.0, + "Chestnoe slovo ja nevinoven" + ], + [ + -75.0, + "Ja ne pomnju, otkuda stol'ko krovi" + ], + [ + -71.0, + "Na moih ladonjah\nyi moej odezhde" + ], + [ + -67.0, + "Ja nikogda nikogo\nne bil prezhde" + ], + [ + -63.0, + "Ja nikogda nichego\nne pil prezhde" + ], + [ + -59.0, + "Byl tih, spokoen,\nso vsemi vezhliv" + ], + [ + -55.0, + "Vsegda tol'ko v urnu\nbrosal musor" + ], + [ + -51.0, + "Obhodil storonoj shumnye tusy" + ], + [ + -47.0, + "Zapreshhjonnyh veshhestv nikakih ne juzal" + ], + [ + -43.0, + "Byl polozhitel'nej samogo pljusa" + ], + [ + -39.0, + "A potom kak-to raz\njetu pesnju uslyshal" + ], + [ + -35.0, + "I vsjo proshhaj, moja krysha" + ], + [ + -31.0, + "Deploy Destroy, porjadok eto otstoj" + ], + [ + -23.0, + "Krushi, lomaj, trjasi bashkoju pustoj" + ], + [ + -15.0, + "Dopej, razbej i novuju otkryvaj" + ], + [ + -7.0, + "Davaj-davaj!" + ], + [ + 1.0, + "Deploy Destroy, porjadok eto otstoj" + ], + [ + 9.0, + "Krushi, lomaj, trjasi bashkoju pustoj" + ], + [ + 17.0, + "Dopej, razbej i novuju otkryvaj" + ], + [ + 25.0, + "Davaj-davaj!" + ] + ], + "DrunknessLoopOffsetTimeSeries": [ + [ + -48.0, + 0.0 + ], + [ + -46.0, + 0.7 + ], + [ + -42.0, + 0.0 + ], + [ + 16.0, + 0.0 + ], + [ + 19.0, + 0.3 + ], + [ + 23.0, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#217F87", + "#BAFF00", + "#73BE25", + "#78AB4E", + "#FFFF00" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "DiscoKapot", + "Artist": "Дискотека Авария", + "Song": "Новогодняя", + "IsExplicit": false, + "Season": "New Year", + "Language": "Russian", + "WindUpTimer": 30.3, + "Bpm": 67.01337, + "Beats": 32, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 33.933, + "FileDurationLoop": 28.651, + "FileNameIntro": "DiscoKapotIntro.ogg", + "FileNameLoop": "DiscoKapotLoop.ogg", + "BeatsOffset": 0.0, + "FadeOutBeat": -4.0, + "FadeOutDuration": 4.0, + "ColorTransitionIn": 0.25, + "ColorTransitionOut": 0.6, + "ColorTransitionEasing": "InOutExpo", + "FlickerLightsTimeSeries": [ + -32.0, + -24.0, + -16.0, + 16.0, + 32.0 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [ + [ + 0.0, + 0.0 + ], + [ + 0.25, + 0.5 + ], + [ + 6.0, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#0B6623", + "#FF2D2D", + "#FFD700", + "#00BFFF", + "#9400D3", + "#00FF7F" + ], + "GameOverText": "[NEXT YEAR -- DEFINITELY]" + }, + { + "Enabled": true, + "Name": "Durochka", + "Artist": "Би-2", + "Song": "Дурочка", + "IsExplicit": false, + "Season": null, + "Language": "Russian", + "WindUpTimer": 37.0, + "Bpm": 129.9686, + "Beats": 40, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 38.833, + "FileDurationLoop": 18.466, + "FileNameIntro": "DurochkaIntro.ogg", + "FileNameLoop": "DurochkaLoop.ogg", + "BeatsOffset": 0.0, + "FadeOutBeat": -7.0, + "FadeOutDuration": 7.0, + "ColorTransitionIn": 0.25, + "ColorTransitionOut": 0.3, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -9.0 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#5986FE", + "#FEFEDC", + "#FF4FDF", + "#FEFEDC", + "#FFAA23", + "#FEFEDC", + "#F95A5A", + "#FEFEDC" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "GodMode", + "Artist": "Fall Out Boy", + "Song": "Immortals", + "IsExplicit": false, + "Season": null, + "Language": "English", + "WindUpTimer": 40.38, + "Bpm": 108.016876, + "Beats": 64, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 42.6, + "FileDurationLoop": 35.55, + "FileNameIntro": "GodModeIntro.ogg", + "FileNameLoop": "GodModeLoop.ogg", + "BeatsOffset": 0.1, + "FadeOutBeat": -4.0, + "FadeOutDuration": 4.0, + "ColorTransitionIn": 0.5, + "ColorTransitionOut": 0.5, + "ColorTransitionEasing": "OutCubic", + "FlickerLightsTimeSeries": [ + -5.0 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [ + [ + -0.5, + 0.0 + ], + [ + 0.0, + 0.7 + ], + [ + 8.0, + 0.0 + ], + [ + 63.5, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#FBDBDB", + "#4B81FF", + "#564242", + "#C90AE2", + "#FBDBDB", + "#61CBE3", + "#564242", + "#ED3131" + ], + "GameOverText": "[COULD'VE BEEN: IMMORTAL]" + }, + { + "Enabled": true, + "Name": "Gorgorod", + "Artist": "Oxxxymiron", + "Song": "Город под подошвой", + "IsExplicit": false, + "Season": null, + "Language": "Russian", + "WindUpTimer": 43.2, + "Bpm": 90.0, + "Beats": 24, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 47.866, + "FileDurationLoop": 16.0, + "FileNameIntro": "GorgorodIntro.ogg", + "FileNameLoop": "GorgorodLoop.ogg", + "BeatsOffset": 0.0, + "FadeOutBeat": -2.0, + "FadeOutDuration": 2.0, + "ColorTransitionIn": 0.25, + "ColorTransitionOut": 0.25, + "ColorTransitionEasing": "InExpo", + "FlickerLightsTimeSeries": [ + 20.0 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#42367E", + "#FF9400", + "#932A04", + "#FF9400", + "#932A04", + "#42367E", + "#FF9400", + "#932A04" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "HighLow", + "Artist": "Nirvana", + "Song": "Smells Like Teen Spirit", + "IsExplicit": false, + "Season": null, + "Language": "English", + "WindUpTimer": 37.12, + "Bpm": 117.873367, + "Beats": 48, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 40.3, + "FileDurationLoop": 24.433, + "FileNameIntro": "HighLowIntro.ogg", + "FileNameLoop": "HighLowLoop.ogg", + "BeatsOffset": 0.0, + "FadeOutBeat": -1.5, + "FadeOutDuration": 1.5, + "ColorTransitionIn": 0.75, + "ColorTransitionOut": 0.25, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -33.0, + 39.0 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [ + [ + -2.0, + 0.0 + ], + [ + -1.0, + 0.5 + ], + [ + 6.0, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [ + [ + -2.0, + 0.0 + ], + [ + -1.0, + 0.5 + ], + [ + 6.0, + 0.0 + ] + ], + "Palette": [ + "#2E2E28", + "#DFA24D", + "#2E2E28", + "#DFA24D", + "#2E2E28", + "#DFA24D", + "#2E2E28", + "#DFA24D" + ], + "GameOverText": "[LIFE SUPORT: NIRVANA]" + }, + { + "Enabled": true, + "Name": "IkWilJe", + "Artist": "My Chemical Romance", + "Song": "All I Want for Christmas Is You", + "IsExplicit": false, + "Season": "New Year", + "Language": "English", + "WindUpTimer": 43.03, + "Bpm": 82.11054, + "Beats": 54, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 63.815, + "FileDurationLoop": 39.459, + "FileNameIntro": "IkWilJeIntro.ogg", + "FileNameLoop": "IkWilJeLoop.ogg", + "BeatsOffset": 0.0, + "FadeOutBeat": -14.0, + "FadeOutDuration": 12.0, + "ColorTransitionIn": 0.01, + "ColorTransitionOut": 0.99, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + 31.45 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [ + [ + 0.0, + 0.0 + ], + [ + 0.25, + 0.5 + ], + [ + 6.0, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#0B6623", + "#FF2D2D", + "#FFD700", + "#00BFFF", + "#9400D3", + "#00FF7F" + ], + "GameOverText": "[NEXT YEAR -- DEFINITELY]" + }, + { + "Enabled": true, + "Name": "Kach", + "Artist": "Black Eyed Peas", + "Song": "Pump It", + "IsExplicit": false, + "Season": null, + "Language": "English", + "WindUpTimer": 47.3, + "Bpm": 153.6, + "Beats": 48, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 48.866, + "FileDurationLoop": 18.75, + "FileNameIntro": "KachIntro.ogg", + "FileNameLoop": "KachLoop.ogg", + "BeatsOffset": 0.4, + "FadeOutBeat": -6.0, + "FadeOutDuration": 6.0, + "ColorTransitionIn": 0.8, + "ColorTransitionOut": 0.4, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -120.5, + -105.0, + -89.0, + -8.0, + 44.0, + 45.0 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#7774DE", + "#1EA59A", + "#3BC457", + "#3BC457", + "#CA6935", + "#A82615", + "#A7AA43", + "#A7AA43", + "#4C2B81", + "#2E802B", + "#C952E7", + "#C952E7" + ], + "GameOverText": "[DIDN'T PUMP IT: LOUDER]" + }, + { + "Enabled": true, + "Name": "MoyaZhittya", + "Artist": "Bon Jovi", + "Song": "It's My Life", + "IsExplicit": false, + "Season": null, + "Language": "English", + "WindUpTimer": 34.53, + "Bpm": 120.0, + "Beats": 32, + "LoopOffset": 32, + "Ext": "ogg", + "FileDurationIntro": 43.533, + "FileDurationLoop": 16.0, + "FileNameIntro": "MoyaZhittyaIntro.ogg", + "FileNameLoop": "MoyaZhittyaLoop.ogg", + "BeatsOffset": 0.0, + "FadeOutBeat": -35.0, + "FadeOutDuration": 3.3, + "ColorTransitionIn": 0.25, + "ColorTransitionOut": 0.5, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -100.5, + -99.5, + -92.5, + -91.5, + -76.5, + -75.5, + -60.5, + -59.5, + -37.0, + -36.0, + -4.5, + -3.5, + 27.5, + 28.5 + ], + "Lyrics": [ + [ + -84.0, + "This ain't a song for the broken-hearted" + ], + [ + -68.0, + "No silent prayer for the faith-departed" + ], + [ + -52.0, + "I ain't gonna be" + ], + [ + -48.0, + "I ain't gonna be\njust a face in the crowd" + ], + [ + -45.0, + "YOU'RE" + ], + [ + -44.0, + "you're GONNA" + ], + [ + -43.5, + "you're gonna HEAR" + ], + [ + -43.0, + "you're gonna hear\nMY" + ], + [ + -42.0, + "you're gonna hear\nmy VOICE" + ], + [ + -41.0, + "WHEN I" + ], + [ + -40.0, + "When I SHOUT IT" + ], + [ + -39.0, + "When I shout it\nOUT LOUD" + ], + [ + -34.0, + "IT'S MY" + ], + [ + -32.0, + "IT'S MY\nLIIIIIFE" + ], + [ + -28.0, + "And it's now or never" + ], + [ + -22.0, + "I ain't gonna" + ], + [ + -20.0, + "I ain't gonna\nlive forever" + ], + [ + -14.0, + "I just want to live" + ], + [ + -10.0, + "I just want to live\nwhile I'm alive" + ], + [ + -2.0, + "IT'S MY" + ], + [ + 0.0, + "IT'S MY\nLIIIIIFE" + ], + [ + 2.0, + "My heart is like" + ], + [ + 4.0, + "My heart is like\nan open highway" + ], + [ + 10.0, + "Like Frankie said," + ], + [ + 12.0, + "Like Frankie said,\n\"I did it my way\"" + ], + [ + 18.0, + "I just want to live" + ], + [ + 22.0, + "I just want to live\nwhile I'm alive" + ], + [ + 30.0, + "IT'S MY" + ] + ], + "DrunknessLoopOffsetTimeSeries": [ + [ + -33.0, + 0.0 + ], + [ + -31.0, + 0.7 + ], + [ + -1.0, + 0.0 + ], + [ + 1.0, + 0.7 + ], + [ + 8.0, + 0.0 + ], + [ + 24.0, + 0.0 + ], + [ + 31.0, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#A8C480", + "#3ABBBE", + "#6E9855", + "#4C6846", + "#748084", + "#058099" + ], + "GameOverText": "[LIFE IS: NOW OR NEVER]" + }, + { + "Enabled": true, + "Name": "MuzikaGromche", + "Artist": "Пошлая Молли", + "Song": "Нон стоп", + "IsExplicit": false, + "Season": null, + "Language": "Russian", + "WindUpTimer": 46.3, + "Bpm": 129.729721, + "Beats": 64, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 50.283, + "FileDurationLoop": 29.6, + "FileNameIntro": "MuzikaGromcheIntro.ogg", + "FileNameLoop": "MuzikaGromcheLoop.ogg", + "BeatsOffset": 0.0, + "FadeOutBeat": -3.0, + "FadeOutDuration": 3.0, + "ColorTransitionIn": 0.25, + "ColorTransitionOut": 0.25, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -5.0, + 29.0, + 61.0 + ], + "Lyrics": [ + [ + -68.0, + "Devchata pljashut pod spidami" + ], + [ + -60.0, + "A ty stoish', kak vkopannyj" + ], + [ + -52.0, + "Krossovkami lomajut pol" + ], + [ + -44.0, + "A ty stoish', kak vkopannyj" + ], + [ + -36.0, + "Ja-ja-ja znaju, chto ty hochesh'," + ], + [ + -32.0, + "Ja-ja-ja znaju, chto ty hochesh',\nTy hochesh' tancevat'" + ], + [ + -28.0, + "Nu-nu zhe, nu davaj zhe," + ], + [ + -24.0, + "Nu-nu zhe, nu davaj zhe,\nNu-nu zhe, nu davaj zhe" + ], + [ + -20.0, + "Ja znaju, chto ty znaesh'\nJetot trek, gotov'sja podpevat'" + ], + [ + -12.0, + "1) RAZ" + ], + [ + -10.0, + "raz, DVA" + ], + [ + -8.0, + "raz, 2wo,\nTRI" + ], + [ + -6.0, + "ras, dva,\n7ri, 4ETYRE" + ], + [ + -1.0, + "Muzyka Gromche\nGlaza zakryty >_<" + ], + [ + 6.0, + "This is NON-STOP,\nNoch'ju otkrytij" + ], + [ + 12.0, + "Delaj chto hochesh', ja zabyvajus'" + ], + [ + 22.0, + "This is NON-STOP,\nne prekrashhajas'" + ], + [ + 31.0, + "Muzyka Gromche\nGlaza zakryty -.-" + ], + [ + 38.0, + "This is NON-STOP,\nNoch'ju otkrytij" + ], + [ + 46.0, + "Budu s toboju,\nsamoj primernoju" + ], + [ + 54.0, + "Utro v okne\nyi my budem pervye" + ], + [ + 63.0, + "Muzyka Gromche\nGlaza zakryty >_<" + ] + ], + "DrunknessLoopOffsetTimeSeries": [ + [ + -2.0, + 0.0 + ], + [ + 0.0, + 0.4 + ], + [ + 1.0, + 0.6 + ], + [ + 3.0, + 0.0 + ], + [ + 30.0, + 0.0 + ], + [ + 32.0, + 0.5 + ], + [ + 33.0, + 0.7 + ], + [ + 35.0, + 0.0 + ], + [ + 62.0, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#B300FF", + "#FFF100", + "#00FF51", + "#474747", + "#FF00B3", + "#0070FF" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "OnePartiyaUdar", + "Artist": "One-Punch Man", + "Song": "Opening", + "IsExplicit": false, + "Season": null, + "Language": "Japanese", + "WindUpTimer": 41.27, + "Bpm": 130.06955, + "Beats": 48, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 44.983, + "FileDurationLoop": 22.142, + "FileNameIntro": "OnePartiyaUdarIntro.ogg", + "FileNameLoop": "OnePartiyaUdarLoop.ogg", + "BeatsOffset": 0.3, + "FadeOutBeat": -8.0, + "FadeOutDuration": 6.0, + "ColorTransitionIn": 0.6, + "ColorTransitionOut": 0.15, + "ColorTransitionEasing": "InOutExpo", + "FlickerLightsTimeSeries": [ + -68.5, + -16.5, + 30.5 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#9C3C37", + "#E9BF5C", + "#B5E3EA", + "#662422", + "#EBC3A8", + "#AA8238" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "Paarden", + "Artist": "Элизиум", + "Song": "Три белых коня", + "IsExplicit": false, + "Season": "New Year", + "Language": "Russian", + "WindUpTimer": 36.12, + "Bpm": 93.05482, + "Beats": 32, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 41.45, + "FileDurationLoop": 20.633, + "FileNameIntro": "PaardenIntro.ogg", + "FileNameLoop": "PaardenLoop.ogg", + "BeatsOffset": 0.0, + "FadeOutBeat": -4.0, + "FadeOutDuration": 4.0, + "ColorTransitionIn": 0.25, + "ColorTransitionOut": 0.4, + "ColorTransitionEasing": "OutCubic", + "FlickerLightsTimeSeries": [ + 31.5 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [ + [ + 0.0, + 0.0 + ], + [ + 0.25, + 0.5 + ], + [ + 6.0, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#F0FBFF", + "#9ED9FF", + "#0B95FF", + "#66C7FF", + "#CAE8FF", + "#3BB6FF" + ], + "GameOverText": "[NEXT YEAR -- DEFINITELY]" + }, + { + "Enabled": true, + "Name": "Peretasovka", + "Artist": "LMFAO", + "Song": "Party Rock Anthem", + "IsExplicit": false, + "Season": null, + "Language": "English", + "WindUpTimer": 39.68, + "Bpm": 130.612244, + "Beats": 32, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 40.6, + "FileDurationLoop": 14.7, + "FileNameIntro": "PeretasovkaIntro.ogg", + "FileNameLoop": "PeretasovkaLoop.ogg", + "BeatsOffset": 0.3, + "FadeOutBeat": -6.0, + "FadeOutDuration": 4.0, + "ColorTransitionIn": 0.4, + "ColorTransitionOut": 0.4, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -8.0, + 31.0 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#65C7FA", + "#FCEB3C", + "#89FC8F", + "#FEE9E9", + "#FC3C9D", + "#FCEB3C", + "#89FC8F", + "#FC3C9D" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "PickUpSticks1", + "Artist": "t.A.T.u.", + "Song": "Show Me Love", + "IsExplicit": false, + "Season": null, + "Language": "English", + "WindUpTimer": 38.5, + "Bpm": 99.89074, + "Beats": 64, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 43.413, + "FileDurationLoop": 38.442, + "FileNameIntro": "PickUpSticks1Intro.ogg", + "FileNameLoop": "PickUpSticksLoop.ogg", + "BeatsOffset": 0.2, + "FadeOutBeat": -2.0, + "FadeOutDuration": 2.0, + "ColorTransitionIn": 0.6, + "ColorTransitionOut": 0.3, + "ColorTransitionEasing": "InOutCubic", + "FlickerLightsTimeSeries": [ + -36.0, + -4.0, + 32.0 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [ + [ + 0.0, + 0.0 + ], + [ + 0.5, + 0.5 + ], + [ + 3.0, + 0.0 + ], + [ + 32.0, + 0.0 + ], + [ + 34.0, + 0.3 + ], + [ + 40.0, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [ + [ + 23.0, + 0.0 + ], + [ + 28.0, + 0.6 + ], + [ + 31.0, + 0.0 + ], + [ + 34.0, + 0.0 + ], + [ + 38.0, + 0.7 + ], + [ + 52.0, + 0.0 + ] + ], + "Palette": [ + "#FC933C", + "#FC3C9D", + "#EEA0A5", + "#CA71FC", + "#D01760", + "#FC933C", + "#FC3C9D", + "#EEA0A5", + "#CA71FC", + "#D01760", + "#FC933C", + "#FC3C9D", + "#EEA0A5", + "#CA71FC", + "#D01760", + "#FC933C", + "#FC3C9D", + "#EEA0A5", + "#CA71FC", + "#D01760", + "#FC933C", + "#FC3C9D", + "#EEA0A5", + "#CA71FC", + "#D01760", + "#FC933C", + "#FC3C9D", + "#EEA0A5", + "#CA71FC", + "#D01760", + "#FC933C", + "#FC3C9D", + "#FC933C", + "#FC933C", + "#FC3C9D", + "#FC3C9D", + "#EEA0A5", + "#EEA0A5", + "#CA71FC", + "#CA71FC", + "#D01760", + "#D01760", + "#FC933C", + "#FC933C", + "#FC3C9D", + "#FC3C9D", + "#EEA0A5", + "#EEA0A5", + "#CA71FC", + "#CA71FC", + "#D01760", + "#D01760", + "#FC933C", + "#FC933C", + "#FC3C9D", + "#FC3C9D", + "#EEA0A5", + "#EEA0A5", + "#CA71FC", + "#CA71FC", + "#D01760", + "#D01760", + "#EEA0A5", + "#EEA0A5" + ], + "GameOverText": "[LOVE SUPPORT: OFFLINE]" + }, + { + "Enabled": true, + "Name": "PickUpSticks2", + "Artist": "t.A.T.u.", + "Song": "Show Me Love", + "IsExplicit": false, + "Season": null, + "Language": "English", + "WindUpTimer": 38.47, + "Bpm": 99.89074, + "Beats": 64, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 43.404, + "FileDurationLoop": 38.442, + "FileNameIntro": "PickUpSticks2Intro.ogg", + "FileNameLoop": "PickUpSticksLoop.ogg", + "BeatsOffset": 0.2, + "FadeOutBeat": -2.0, + "FadeOutDuration": 2.0, + "ColorTransitionIn": 0.6, + "ColorTransitionOut": 0.3, + "ColorTransitionEasing": "InOutCubic", + "FlickerLightsTimeSeries": [ + -36.0, + -4.0, + 32.0 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [ + [ + 0.0, + 0.0 + ], + [ + 0.5, + 0.5 + ], + [ + 3.0, + 0.0 + ], + [ + 32.0, + 0.0 + ], + [ + 34.0, + 0.3 + ], + [ + 40.0, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [ + [ + 23.0, + 0.0 + ], + [ + 28.0, + 0.5 + ], + [ + 31.0, + 0.0 + ], + [ + 34.0, + 0.0 + ], + [ + 38.0, + 0.5 + ], + [ + 52.0, + 0.0 + ] + ], + "Palette": [ + "#FC933C", + "#FC3C9D", + "#EEA0A5", + "#CA71FC", + "#D01760", + "#FC933C", + "#FC3C9D", + "#EEA0A5", + "#CA71FC", + "#D01760", + "#FC933C", + "#FC3C9D", + "#EEA0A5", + "#CA71FC", + "#D01760", + "#FC933C", + "#FC3C9D", + "#EEA0A5", + "#CA71FC", + "#D01760", + "#FC933C", + "#FC3C9D", + "#EEA0A5", + "#CA71FC", + "#D01760", + "#FC933C", + "#FC3C9D", + "#EEA0A5", + "#CA71FC", + "#D01760", + "#FC933C", + "#FC3C9D", + "#FC933C", + "#FC933C", + "#FC3C9D", + "#FC3C9D", + "#EEA0A5", + "#EEA0A5", + "#CA71FC", + "#CA71FC", + "#D01760", + "#D01760", + "#FC933C", + "#FC933C", + "#FC3C9D", + "#FC3C9D", + "#EEA0A5", + "#EEA0A5", + "#CA71FC", + "#CA71FC", + "#D01760", + "#D01760", + "#FC933C", + "#FC933C", + "#FC3C9D", + "#FC3C9D", + "#EEA0A5", + "#EEA0A5", + "#CA71FC", + "#CA71FC", + "#D01760", + "#D01760", + "#EEA0A5", + "#EEA0A5" + ], + "GameOverText": "[LOVE SUPPORT: OFFLINE]" + }, + { + "Enabled": true, + "Name": "PWNED", + "Artist": "CYBEЯIA", + "Song": "Russian Hackers", + "IsExplicit": true, + "Season": null, + "Language": "English", + "WindUpTimer": 39.73, + "Bpm": 289.8113, + "Beats": 128, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 59.633, + "FileDurationLoop": 26.5, + "FileNameIntro": "PWNEDIntro.ogg", + "FileNameLoop": "PWNEDLoop.ogg", + "BeatsOffset": -0.2, + "FadeOutBeat": -8.0, + "FadeOutDuration": 6.0, + "ColorTransitionIn": 0.5, + "ColorTransitionOut": 0.3, + "ColorTransitionEasing": "InExpo", + "FlickerLightsTimeSeries": [ + -136.0, + -72.0, + -12.0, + 88.0 + ], + "Lyrics": [ + [ + -190.0, + "These Russian hackers have been" + ], + [ + -184.0, + "in these US governments\nsince March" + ], + [ + -172.0, + "and it is an extraordinary invasion of our cyberspace" + ], + [ + -152.0, + "Russian hackers got access to sensitive" + ], + [ + -142.0, + "parts of the White House email system..." + ], + [ + -134.0, + "[They began to recognize...]" + ], + [ + -126.0, + "" + ], + [ + -118.0, + "\n X__X" + ], + [ + -110.0, + "Gonna crack your" + ], + [ + -102.0, + "Gonna crack your\nStrongest pa$$words%123" + ], + [ + -94.0, + "You popped online" + ], + [ + -86.0, + "You popped online\nTo look for sneakers" + ], + [ + -78.0, + "My hand just popped" + ], + [ + -70.0, + "My hand just popped\nRight in your knickers >_< " + ], + [ + -62.0, + "Keystrokes like Uzi" + ], + [ + -54.0, + "Keystrokes like Uzi\nWill make you go all goosey" + ], + [ + -46.0, + "Kicking down your backdoor" + ], + [ + -38.0, + "Kicking down your backdoor\nCount down before you lose it" + ], + [ + -30.0, + "Keystrokes like Uzi" + ], + [ + -22.0, + "Keystrokes like Uzi\nWill make you go all goosey" + ], + [ + -14.0, + "Kicking down your backdoor" + ], + [ + -6.0, + "Kicking down your backdoor\nCount down before you lose it" + ], + [ + 0.0, + "C:\\> $Ru55ian hack3rs" + ], + [ + 4.0, + "C:\\> $Ru55ian hack3rs\n O__o" + ], + [ + 8.0, + "Infamous White House attackers" + ], + [ + 16.0, + "Stealing your cookies\nto this beat" + ], + [ + 24.0, + "Counting crypto to\nembarrass Wall Street" + ], + [ + 32.0, + "Russi?n ^hackers\tЯushan h@ckers###" + ], + [ + 34.0, + "\tЯushan h@ckers###\n X_X" + ], + [ + 36.0, + "Russi?n ^hackers\n--.--\tЯushan h@ckers###\n X___X" + ], + [ + 38.0, + "\tЯushan h@ckers###\n X_____X" + ], + [ + 40.0, + "Infamous White House attackers" + ], + [ + 48.0, + "Stealing your cookies\nto this beat" + ], + [ + 56.0, + "Counting crypto to\nembarrass Wall Street" + ], + [ + 80.0, + "Instling min3r.exe\t\t\tresolving ur private IP\n/" + ], + [ + 82.0, + "Instling min3r.exe\n00% [8=D ]\tHenllo ${username = \"user\"}\t\tresolving ur private IP\n-" + ], + [ + 84.0, + "Instling min3r.exe\n34% [8====D ]\t\t\tresolving ur private IP\n\\" + ], + [ + 86.0, + "Instling min3r.exe\n69% [8=========D ]\t\t\tresolving ur private IP\n| Trying... 127.0.0.1" + ], + [ + 88.0, + "Instling min3r.exe\n95% [8============D ]\t\tWhere did you download\nthis < mod / dll > from?\tresolving ur private IP\n Trying... 127.0.0.1/" + ], + [ + 90.0, + "Instling min3r.exe\n99% [8=============D]\t\t\tresolving ur private IP\n- Trying... 127.0.0.1" + ], + [ + 92.0, + "Encrpt1ng f!les.. \n99% [8=============D]\t\t\tresolving ur private IP\n\\ Trying... 127.0.0.1" + ], + [ + 94.0, + "Encrpt1ng f!les...\n100% enj0y \\o/\t\t\tresolving ur private IP\n| Trying... 127.0.0.1" + ], + [ + 96.0, + "\t\t\tresolving ur private IP\n/ Trying... 127.0.0.1" + ], + [ + 98.0, + "\t\t\tresolving ur private IP\nP_WNED" + ] + ], + "DrunknessLoopOffsetTimeSeries": [ + [ + -128.0, + 0.0 + ], + [ + -127.0, + 0.7 + ], + [ + -116.0, + 0.0 + ], + [ + 68.0, + 0.0 + ], + [ + 72.0, + 0.3 + ], + [ + 88.0, + 0.5 + ], + [ + 98.0, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#FFFFFF", + "#0032A0", + "#DA291C", + "#000000", + "#9E9E9E", + "#9E9E9E", + "#383838", + "#383838", + "#5E5E5E", + "#5E5E5E", + "#2E2E2E", + "#2E2E2E", + "#666666", + "#666666", + "#4B4B4B", + "#4B4B4B", + "#8E8E8E", + "#8E8E8E", + "#1D1D1D", + "#1D1D1D", + "#9E9E9E", + "#9E9E9E", + "#383838", + "#383838", + "#5E5E5E", + "#5E5E5E", + "#2E2E2E", + "#2E2E2E", + "#666666", + "#666666", + "#4B4B4B", + "#4B4B4B", + "#FFFFFF", + "#0032A0", + "#DA291C", + "#000000", + "#9E9E9E", + "#9E9E9E", + "#383838", + "#383838", + "#5E5E5E", + "#5E5E5E", + "#2E2E2E", + "#2E2E2E", + "#666666", + "#666666", + "#4B4B4B", + "#4B4B4B", + "#8E8E8E", + "#8E8E8E", + "#1D1D1D", + "#1D1D1D", + "#9E9E9E", + "#9E9E9E", + "#383838", + "#383838", + "#5E5E5E", + "#5E5E5E", + "#2E2E2E", + "#2E2E2E", + "#666666", + "#666666", + "#4B4B4B", + "#4B4B4B", + "#9E9E9E", + "#9E9E9E", + "#9E9E9E", + "#9E9E9E", + "#383838", + "#383838", + "#383838", + "#383838", + "#5E5E5E", + "#5E5E5E", + "#5E5E5E", + "#5E5E5E", + "#2E2E2E", + "#2E2E2E", + "#2E2E2E", + "#2E2E2E", + "#666666", + "#666666", + "#666666", + "#666666", + "#4B4B4B", + "#4B4B4B", + "#4B4B4B", + "#4B4B4B", + "#8E8E8E", + "#8E8E8E", + "#8E8E8E", + "#8E8E8E", + "#1D1D1D", + "#1D1D1D", + "#1D1D1D", + "#1D1D1D", + "#9E9E9E", + "#9E9E9E", + "#9E9E9E", + "#9E9E9E", + "#383838", + "#383838", + "#383838", + "#383838", + "#5E5E5E", + "#5E5E5E", + "#5E5E5E", + "#5E5E5E", + "#2E2E2E", + "#2E2E2E", + "#2E2E2E", + "#2E2E2E", + "#666666", + "#666666", + "#666666", + "#666666", + "#4B4B4B", + "#4B4B4B", + "#4B4B4B", + "#4B4B4B", + "#8E8E8E", + "#8E8E8E", + "#8E8E8E", + "#8E8E8E", + "#1D1D1D", + "#1D1D1D", + "#1D1D1D", + "#1D1D1D" + ], + "GameOverText": "[HACK3D BY: RUSSI4NS]" + }, + { + "Enabled": true, + "Name": "ReelGoon", + "Artist": "John Shanks and Sheryl Crow", + "Song": "Real Gone", + "IsExplicit": false, + "Season": null, + "Language": "English", + "WindUpTimer": 45.15, + "Bpm": 117.997726, + "Beats": 64, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 47.45, + "FileDurationLoop": 32.543, + "FileNameIntro": "ReelGoonIntro.ogg", + "FileNameLoop": "ReelGoonLoop.ogg", + "BeatsOffset": -0.35, + "FadeOutBeat": -2.0, + "FadeOutDuration": 2.0, + "ColorTransitionIn": 0.1, + "ColorTransitionOut": 0.35, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -41.0, + 61.0 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [ + [ + -0.5, + 0.0 + ], + [ + -0.05, + 0.5 + ], + [ + 6.0, + 0.0 + ], + [ + 60.0, + 0.0 + ], + [ + 61.0, + 0.5 + ] + ], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#DE1C31", + "#F7E26B", + "#3D3D3D", + "#FBB040", + "#ED4E4A", + "#F0BD37", + "#E41E2E", + "#2E2D2B" + ], + "GameOverText": "[LIFE SUPPORT: REAL GONE]" + }, + { + "Enabled": true, + "Name": "RiseAndShine", + "Artist": "Fall Out Boy", + "Song": "The Phoenix", + "IsExplicit": false, + "Season": null, + "Language": "English", + "WindUpTimer": 59.87, + "Bpm": 137.8815, + "Beats": 64, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 61.616, + "FileDurationLoop": 27.85, + "FileNameIntro": "RiseAndShineIntro.ogg", + "FileNameLoop": "RiseAndShineLoop.ogg", + "BeatsOffset": 0.1, + "FadeOutBeat": -4.5, + "FadeOutDuration": 4.0, + "ColorTransitionIn": 0.5, + "ColorTransitionOut": 0.5, + "ColorTransitionEasing": "OutCubic", + "FlickerLightsTimeSeries": [ + -5.5, + 31.0, + 63.9 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [ + [ + -0.5, + 0.0 + ], + [ + 0.0, + 0.7 + ], + [ + 8.0, + 0.0 + ], + [ + 63.5, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#FC6F3C", + "#3CB0FC", + "#FCD489", + "#564242", + "#FC6F3C", + "#3CB0FC", + "#63E98C", + "#866868" + ], + "GameOverText": "[ HEY, YOUNG BLOOD ]" + }, + { + "Enabled": true, + "Name": "Song2", + "Artist": "Витас", + "Song": "Опера #2", + "IsExplicit": false, + "Season": null, + "Language": "Russian", + "WindUpTimer": 38.63, + "Bpm": 50.0, + "Beats": 34, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 43.433, + "FileDurationLoop": 40.8, + "FileNameIntro": "Song2Intro.ogg", + "FileNameLoop": "Song2Loop.ogg", + "BeatsOffset": 0.1, + "FadeOutBeat": -2.0, + "FadeOutDuration": 2.0, + "ColorTransitionIn": 0.3, + "ColorTransitionOut": 0.3, + "ColorTransitionEasing": "InCubic", + "FlickerLightsTimeSeries": [ + 2.5 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#FFD3E3", + "#78A0FF", + "#FFD3E3", + "#74A392", + "#FFD3E3", + "#E4B082", + "#FFD3E3", + "#E277AA" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "TwoFastTuFurious", + "Artist": "t.A.T.u.", + "Song": "Not Gonna Get Us / Нас не догонят", + "IsExplicit": false, + "Season": null, + "Language": "English", + "WindUpTimer": 36.08, + "Bpm": 130.034317, + "Beats": 96, + "LoopOffset": 48, + "Ext": "ogg", + "FileDurationIntro": 39.308, + "FileDurationLoop": 44.296, + "FileNameIntro": "TwoFastTuFuriousIntro.ogg", + "FileNameLoop": "TwoFastTuFuriousLoop.ogg", + "BeatsOffset": 0.0, + "FadeOutBeat": -54.0, + "FadeOutDuration": 6.0, + "ColorTransitionIn": 0.4, + "ColorTransitionOut": 0.6, + "ColorTransitionEasing": "InOutCubic", + "FlickerLightsTimeSeries": [ + -80.0, + -14.0, + 34.0, + 82.0 + ], + "Lyrics": [ + [ + -126.0, + "Starting from here,\nlet's make a promise" + ], + [ + -110.0, + "You and me, let's just be honest" + ], + [ + -100.0, + "We're gonna run,\nnothing can stop us" + ], + [ + -89.0, + "Even the night,\nthat falls all around us" + ], + [ + -80.0, + "Soon there will be\nlaughter and voices" + ], + [ + -70.0, + "Beyond the clouds,\nover the mountains" + ], + [ + -62.0, + "We'll run away,\non roads that are empty" + ], + [ + -55.0, + "Lights from the airfield,\nshining upon you" + ], + [ + -48.0, + "Nothing can stop this" + ], + [ + -44.0, + "Nothing can stop this,\nnot now, I love you" + ], + [ + -40.0, + "They're not gonna get us" + ], + [ + -36.0, + "They're not gonna get us\nTHEY'RE NOT GONNA GET US" + ] + ], + "DrunknessLoopOffsetTimeSeries": [ + [ + -48.0, + 0.0 + ], + [ + -47.75, + 0.5 + ], + [ + -42.0, + 0.0 + ], + [ + 0.0, + 0.0 + ], + [ + 0.25, + 0.5 + ], + [ + 6.0, + 0.0 + ], + [ + 48.0, + 0.0 + ], + [ + 48.25, + 0.5 + ], + [ + 54.0, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [ + [ + -24.0, + 0.0 + ], + [ + -23.75, + 0.5 + ], + [ + -18.0, + 0.0 + ], + [ + 24.0, + 0.0 + ], + [ + 24.25, + 0.5 + ], + [ + 30.0, + 0.0 + ], + [ + 72.0, + 0.0 + ], + [ + 72.25, + 0.5 + ], + [ + 78.0, + 0.0 + ] + ], + "Palette": [ + "#F0FBFF", + "#9ED9FF", + "#0B95FF", + "#66C7FF", + "#CAE8FF", + "#3BB6FF" + ], + "GameOverText": "[ O NOES, THEY GOT US ]" + }, + { + "Enabled": true, + "Name": "VseVZale", + "Artist": "Дискотека Авария", + "Song": " Х.Х.Х.И.Р.Н.Р.", + "IsExplicit": false, + "Season": null, + "Language": "Russian", + "WindUpTimer": 38.28, + "Bpm": 137.965729, + "Beats": 64, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 40.016, + "FileDurationLoop": 27.833, + "FileNameIntro": "VseVZaleIntro.ogg", + "FileNameLoop": "VseVZaleLoop.ogg", + "BeatsOffset": 0.25, + "FadeOutBeat": -3.0, + "FadeOutDuration": 2.5, + "ColorTransitionIn": 0.25, + "ColorTransitionOut": 0.25, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -5.0, + 29.0, + 59.0 + ], + "Lyrics": [ + [ + -30.0, + "VSE V ZALE\nDvigajtes' s nami" + ], + [ + -24.0, + "Chtob sotrjasalis'\nSami my, steny i pol!" + ], + [ + -14.0, + "Vse znaem - jeto examen na dom nam zadan" + ], + [ + -4.0, + "HIP-HOP, HOUSE & ROCK-N-ROLL" + ], + [ + 2.0, + "VSE V ZALE\nDvigajtes' s nami" + ], + [ + 8.0, + "Chtob sotrjasalis'\nSami my, steny i pol!" + ], + [ + 18.0, + "Vse znaem - jeto examen na dom nam zadan" + ], + [ + 28.0, + "HIP-HOP, HOUSE & ROCK-N-ROLL" + ], + [ + 32.0, + "O-o-o-o! Zdes' startuet hip-hop party" + ], + [ + 44.0, + "Tolstyj paren', nam igraj!" + ], + [ + 48.0, + "O-o-o-o! Pesen i devchonok hvatit!" + ], + [ + 60.0, + "Everybody shake your body" + ] + ], + "DrunknessLoopOffsetTimeSeries": [], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#FF7F00", + "#FFB600", + "#FFED00", + "#00D1FF", + "#6696FB", + "#704DF8", + "#FF7F00", + "#FFB600", + "#FFED00", + "#00D1FF", + "#6696FB", + "#704DF8", + "#FF7F00", + "#FFB600", + "#FFED00", + "#00D1FF", + "#6696FB", + "#704DF8", + "#FF7F00", + "#FFB600", + "#FFED00", + "#00D1FF", + "#6696FB", + "#704DF8", + "#FF7F00", + "#FFB600", + "#FFED00", + "#00D1FF", + "#6696FB", + "#704DF8", + "#FF7F00", + "#FFB600", + "#FFED00", + "#FFED00", + "#00D1FF", + "#00D1FF", + "#6696FB", + "#6696FB", + "#704DF8", + "#704DF8", + "#FF7F00", + "#FF7F00", + "#FFB600", + "#FFB600", + "#FFED00", + "#FFED00", + "#00D1FF", + "#00D1FF", + "#6696FB", + "#6696FB", + "#704DF8", + "#704DF8", + "#FF7F00", + "#FF7F00", + "#FFB600", + "#FFB600", + "#FFED00", + "#FFED00", + "#00D1FF", + "#00D1FF", + "#6696FB", + "#6696FB", + "#704DF8", + "#704DF8" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "Whistle", + "Artist": "Flo Rida", + "Song": "Whistle", + "IsExplicit": false, + "Season": null, + "Language": "English", + "WindUpTimer": 41.27, + "Bpm": 104.016182, + "Beats": 48, + "LoopOffset": 16, + "Ext": "ogg", + "FileDurationIntro": 52.433, + "FileDurationLoop": 27.688, + "FileNameIntro": "WhistleIntro.ogg", + "FileNameLoop": "WhistleLoop.ogg", + "BeatsOffset": 0.0, + "FadeOutBeat": -22.0, + "FadeOutDuration": 6.0, + "ColorTransitionIn": 0.5, + "ColorTransitionOut": 0.2, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -20.0, + 12.0 + ], + "Lyrics": [ + [ + -40.0, + "Can you blow my whistle, baby, whistle, baby?" + ], + [ + -36.0, + "Can you blow my whistle, baby, whistle, baby? Let me know" + ], + [ + -33.5, + "Girl, I'm gonna show you how to\ndo it" + ], + [ + -30.5, + "Girl, I'm gonna show you how to\ndo it and we start real slow" + ], + [ + -27.0, + "You just put your lips together" + ], + [ + -24.0, + "You just put your lips together and you come real close" + ], + [ + -21.0, + "Can you blow my whistle, baby, whistle, baby?" + ], + [ + -17.0, + "HERE WE GO" + ], + [ + 10.0, + "Yeah, baby, make that whistle" + ], + [ + 12.0, + "Yeah, baby, make that whistle\nblow oh oh oh" + ], + [ + 15.0, + "Can you blow my whistle, baby, whistle, baby?" + ], + [ + 20.0, + "Can you blow my whistle, baby, whistle, baby? Let me know" + ], + [ + 23.0, + "Girl, I'm gonna show you how to\ndo it" + ], + [ + 28.0, + "Girl, I'm gonna show you how to\ndo it and we start real slow" + ], + [ + 32.0, + "You just put your lips together" + ], + [ + 36.0, + "You just put your lips together and you come real close" + ], + [ + 39.0, + "Can you blow my whistle, baby, whistle, baby?" + ], + [ + 46.0, + "HERE" + ], + [ + 47.0, + "Here WE" + ], + [ + 48.0, + "Here we GO" + ] + ], + "DrunknessLoopOffsetTimeSeries": [ + [ + -16.0, + 0.0 + ], + [ + -15.25, + 0.7 + ], + [ + -12.0, + 0.0 + ], + [ + 9.0, + 0.0 + ], + [ + 15.0, + 0.4 + ], + [ + 16.0, + 0.7 + ], + [ + 18.0, + 0.4 + ], + [ + 21.0, + 0.0 + ] + ], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#8DDEDD", + "#98DE28", + "#E8DB4B", + "#F060A8", + "#EEC263", + "#725DEB" + ], + "GameOverText": null + }, + { + "Enabled": false, + "Name": "Yalgaar", + "Artist": "Ajey Nagar and Wily Frenzy", + "Song": "Yalgaar", + "IsExplicit": false, + "Season": null, + "Language": "Hindi", + "WindUpTimer": 52.17, + "Bpm": 92.0157242, + "Beats": 32, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 53.466, + "FileDurationLoop": 20.866, + "FileNameIntro": "YalgaarIntro.ogg", + "FileNameLoop": "YalgaarLoop.ogg", + "BeatsOffset": 0.0, + "FadeOutBeat": -4.0, + "FadeOutDuration": 4.0, + "ColorTransitionIn": 0.1, + "ColorTransitionOut": 0.35, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -5.0 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#C0402D", + "#906F0B", + "#DC8044", + "#70190A", + "#929FAF", + "#4248A2", + "#AE2727", + "#2D2D42" + ], + "GameOverText": null + }, + { + "Enabled": true, + "Name": "ZmeiGorynich", + "Artist": "aespa", + "Song": "Black Mamba", + "IsExplicit": false, + "Season": null, + "Language": "Korean", + "WindUpTimer": 46.13, + "Bpm": 90.0014, + "Beats": 32, + "LoopOffset": 0, + "Ext": "ogg", + "FileDurationIntro": 48.8, + "FileDurationLoop": 21.333, + "FileNameIntro": "ZmeiGorynichIntro.ogg", + "FileNameLoop": "ZmeiGorynichLoop.ogg", + "BeatsOffset": 0.1, + "FadeOutBeat": -4.0, + "FadeOutDuration": 4.0, + "ColorTransitionIn": 0.4, + "ColorTransitionOut": 0.4, + "ColorTransitionEasing": "OutExpo", + "FlickerLightsTimeSeries": [ + -5.0, + 31.0 + ], + "Lyrics": [], + "DrunknessLoopOffsetTimeSeries": [], + "CondensationLoopOffsetTimeSeries": [], + "Palette": [ + "#4C8AC5", + "#AF326A", + "#0B1666", + "#AFD2FC", + "#C55297", + "#540070" + ], + "GameOverText": "[MUZIKA: K-POP GROMCHE]" + } + ] +} \ No newline at end of file diff --git a/Frontend/src/assets/fonts/3270-Regular.woff b/Frontend/src/assets/fonts/3270-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..d74887d60b2657ecdf130230fcb29e3c8c3db950 GIT binary patch literal 108660 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%0Dfshq1uFc0EoGmz`fgGHnTDK(9f@QQHRz=x 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 FkN_@kHKqUn literal 0 HcmV?d00001 diff --git a/Frontend/src/assets/playhead-main.png b/Frontend/src/assets/playhead-main.png new file mode 100644 index 0000000000000000000000000000000000000000..1e43c43bb53f5680c8f61ada4192d212f5534b08 GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^f~PT`|9?3wbYo3*Eeq-j<3&u_ECA|9aF;zB(Em!%O U9-QZW1=Pvl>FVdQ&MBb@0O~j>r~m)} literal 0 HcmV?d00001 diff --git a/Frontend/src/assets/playhead-top.png b/Frontend/src/assets/playhead-top.png new file mode 100644 index 0000000000000000000000000000000000000000..15c38dde1569c9db69ffecc708380f5a1519f648 GIT binary patch literal 426 zcmV;b0agBqP)pGTuDShR5(v#@b@)bxQNIw%hI|svzXYbCE zW6G2#Z_k4CGfPRy9X#>ug(NV&@EUTnOA%|>%%|_p&UyHJ^Sk$N8=1w#q!`#aI1e6t z{z~#610$~)9~VJ`CIekC<^J={!lDw5@87>+U=|S(XJBS#X5i-KKe+et6UpC8upr&+QG0Ib!3 UC@gjIHvj+t07*qoM6N<$f@_(%a{vGU literal 0 HcmV?d00001 diff --git a/Frontend/src/audio/AudioEngine.ts b/Frontend/src/audio/AudioEngine.ts new file mode 100644 index 0000000..0d274c6 --- /dev/null +++ b/Frontend/src/audio/AudioEngine.ts @@ -0,0 +1,554 @@ +/* + AudioEngine.ts + A small singleton wrapper around the WebAudio AudioContext that: + - lazily creates the AudioContext + - provides fetch/decode + simple caching + - schedules intro and loop buffers to play seamlessly + - exposes play/pause/stop and a volume control via a master GainNode + - provides a short fade-in/out GainNode to avoid clicks (few ms) + - exposes getPosition() to read current playback time relative to intro start +*/ + +import type { ConfigurableWindow } from '@vueuse/core' +import type { MaybeRefOrGetter, Ref } from 'vue' +import type { AudioTrack } from '@/lib/AudioTrack' +import type { Seconds } from '@/lib/units' +import { + + tryOnScopeDispose, + useRafFn, + useThrottleFn, + watchImmediate, +} from '@vueuse/core' +import { + + shallowRef, + toValue, + watch, +} from 'vue' +import { useWrapTime, wrapTimeFn } from '@/lib/AudioTrack' + +export const VOLUME_MAX: number = 1.5 + +interface PlayerHandle { + /** + * The `stop()` method schedules a sound to cease playback at the specified time. + */ + stop: (when?: Seconds) => void +} + +interface AudioTrackBuffersHandle extends PlayerHandle { + /** + * Time in AudioContext coordinate system of a moment which lines up with the start of the intro audio buffer. + * If the startPosition was greater than zero, this time is already in the past when the function returns. + */ + readonly introStartTime: Seconds +} + +/** + * Start playing intro + loop buffers at given position. + * + * @returns Handle with introStartTime and stop() method. + */ +function playAudioTrackBuffers( + audioCtx: AudioContext, + destinationNode: AudioNode, + audioTrack: AudioTrack, + /** + * Position in seconds from the start of the intro + */ + startPosition: Seconds = 0, +): AudioTrackBuffersHandle { + const now = audioCtx.currentTime + + const introBuffer = audioTrack.loadedIntro! + const loopBuffer = audioTrack.loadedLoop! + + const introDuration = introBuffer.duration + const loopDuration = loopBuffer.duration + + const wrapper = wrapTimeFn(audioTrack) + startPosition = wrapper(startPosition) + + let currentIntro: AudioBufferSourceNode | null + let currentLoop: AudioBufferSourceNode | null + let introStartTime: Seconds + + // figure out where to start + if (startPosition < introDuration) { + // start intro with offset, schedule loop after remaining intro time + const introOffset = startPosition + const timeUntilLoop = introDuration - introOffset + + const introNode = audioCtx.createBufferSource() + introNode.buffer = introBuffer + introNode.connect(destinationNode) + introNode.start(now, introOffset) + + const loopNode = audioCtx.createBufferSource() + loopNode.buffer = loopBuffer + loopNode.loop = true + loopNode.connect(destinationNode) + loopNode.start(now + timeUntilLoop, 0) + + currentIntro = introNode + currentLoop = loopNode + introStartTime = now - startPosition + } + else { + // start directly in loop with proper offset into loop + const loopOffset = (startPosition - introDuration) % loopDuration + const loopNode = audioCtx.createBufferSource() + loopNode.buffer = loopBuffer + loopNode.loop = true + loopNode.connect(destinationNode) + loopNode.start(now, loopOffset) + + currentIntro = null + currentLoop = loopNode + // Note: using wrapping loop breaks logical position when starting playback from the second loop repetition onward. + // introStartTime = now - introDuration - loopOffset; + introStartTime = now - startPosition + } + + function stop(when?: Seconds) { + try { + currentIntro?.stop(when) + } + catch { + /* ignore */ + } + try { + currentLoop?.stop(when) + } + catch { + /* ignore */ + } + currentIntro = null + currentLoop = null + } + + return { introStartTime, stop } +} + +interface PlayWithFadeInOut extends PlayerHandle { + playerResult: Omit +} + +/** + * 25 ms for fade-in/fade-out + */ +const DEFAULT_FADE_DURATION = 0.025 + +/** + * Wrap the given player function with a Gain node. Applies fade in effect on start and fade out on stop. + * + * @returns Handle with introStartTime and stop() method. + */ +function playWithFadeInOut( + audioCtx: AudioContext, + destinationNode: AudioNode, + player: (destinationNode: AudioNode) => T, + /** + * Duration of fade in/out in seconds. Fade out extends past the stop() call. + */ + fadeDuration: Seconds = DEFAULT_FADE_DURATION, +): PlayWithFadeInOut { + const GAIN_MIN = 0.0001 + const GAIN_MAX = 1.0 + + const fadeGain = audioCtx.createGain() + fadeGain.connect(destinationNode) + fadeGain.gain.value = GAIN_MIN + + const playerHandle = player(fadeGain) + + // fade in + const now = audioCtx.currentTime + const fadeEnd = now + fadeDuration + fadeGain.gain.setValueAtTime(GAIN_MIN, now) + fadeGain.gain.linearRampToValueAtTime(GAIN_MAX, fadeEnd) + + // TODO: setTimeout to actually stop after `when`? + function stop(_when?: Seconds) { + // fade out + const now = audioCtx.currentTime + const fadeEnd = now + fadeDuration + fadeGain.gain.cancelScheduledValues(now) + fadeGain.gain.setValueAtTime(GAIN_MAX, now) + fadeGain.gain.linearRampToValueAtTime(GAIN_MIN, fadeEnd) + + playerHandle.stop(fadeEnd) + } + + return { playerResult: playerHandle, stop } +} + +/** + * Properties relates to the state of playback. + */ +export interface PlaybackState { + /** + * Readonly reference to whether audio is currently playing. + */ + readonly isPlaying: Readonly> + /** + * Readonly reference to the last remembered start-of-playback position. + * + * Will only update if stop(rememberPosition=true) or seek() is called. + */ + readonly startPosition: Readonly> + /** + * Returns current playback position in seconds based on AudioContext time. + * + * Hook it up to requestAnimationFrame while isPlaying is true for live updates. + */ + getCurrentPosition: () => Seconds +} + +export interface StopOptions { + /** + * If true, update remembered playback position to current position, otherwise revert to last remembered one. + * + * Defaults to false. + */ + rememberPosition?: boolean +} + +export interface SeekOptions { + /** + * If scrub is requested, plays a short sample at that position. + * + * Defaults to false. + */ + scrub?: boolean + // TODO: optionally keep playing after seeking? +} + +/** + * Player controls and properties relates to the state of playback. + */ +export interface PlayerControls { + /** + * Start playing audio buffers from the last remembered position. + */ + play: () => void + /** + * Stop playing audio buffers. + * + * If rememberPosition is true, update remembered playback position, otherwise revert to the last remembered one. + */ + stop: (options?: StopOptions) => void + /** + * Seek to given position in seconds. + * + * - Stop the playback. + * - If scrub is requested, plays a short sample at that position. + */ + seek: (position: Seconds, options?: SeekOptions) => void + /** + * Properties relates to the state of playback. + */ + readonly playback: PlaybackState +} + +interface ReusableAudioBuffersTrackPlayer extends PlayerControls { +} + +function reusableAudioBuffersTrackPlayer( + audioCtx: AudioContext, + destinationNode: AudioNode, + audioTrack: AudioTrack, +): ReusableAudioBuffersTrackPlayer { + let currentHandle: PlayWithFadeInOut | null = null + const isPlaying = shallowRef(false) + const wrapper = wrapTimeFn(audioTrack) + const startPosition = useWrapTime(audioTrack, 0) + + function play() { + if (currentHandle) { + return + } + currentHandle = playWithFadeInOut( + audioCtx, + destinationNode, + destinationNode => + playAudioTrackBuffers( + audioCtx, + destinationNode, + audioTrack, + startPosition.value, + ), + ) + isPlaying.value = true + } + + function stop(options?: { rememberPosition?: boolean }) { + const { + rememberPosition = false, + } = options ?? {} + + if (currentHandle) { + isPlaying.value = false + + if (rememberPosition) { + startPosition.value = getCurrentPosition() + } + + // stop and discard current handle + currentHandle.stop() + currentHandle = null + } + } + + // Scrub is subject to debouncing/throttling, so it doesn't start + // playing samples too often before previous ones could stop. + const doThrottledScrub = useThrottleFn(() => { + // play a short sample at the seeked position + const scrubHandle = playWithFadeInOut( + audioCtx, + destinationNode, + destinationNode => + playAudioTrackBuffers( + audioCtx, + destinationNode, + audioTrack, + startPosition.value, + ), + 0.01, // short fade of 10 ms + ) + setTimeout(() => { + scrubHandle.stop(0.01) + }, 80) // stop after N ms + }, 80) + + function seek(seekPosition: Seconds, options?: SeekOptions) { + const { + scrub = false, + } = options ?? {} + + stop({ rememberPosition: false }) + + startPosition.value = seekPosition + + if (scrub) { + doThrottledScrub() + } + } + + function getCurrentPosition(): Seconds { + if (!currentHandle) { + return startPosition.value + } + + const elapsed = audioCtx.currentTime + - currentHandle.playerResult.introStartTime + + return wrapper(elapsed) + } + + return { + play, + stop, + seek, + playback: { + isPlaying, + startPosition, + getCurrentPosition, + }, + } +} + +interface LivePlaybackPositionOptions extends ConfigurableWindow { +} + +interface LivePlaybackPositionReturn { + stop: () => void + position: Readonly> +} + +export function useLivePlaybackPosition( + playback: MaybeRefOrGetter, + options?: LivePlaybackPositionOptions, +): LivePlaybackPositionReturn { + const cleanups: (() => void)[] = [] + const cleanup = () => { + cleanups.forEach(fn => fn()) + cleanups.length = 0 + } + + const getPosition = () => { + return toValue(playback)?.getCurrentPosition() ?? 0 + } + + const position = shallowRef(getPosition()) + + const updatePosition = () => { + position.value = getPosition() + } + + const raf = useRafFn(() => { + updatePosition() + }, { + ...options, + immediate: false, + once: false, + }) + + const stopWatch = watchImmediate(() => [ + toValue(playback), + ], ([playback]) => { + cleanup() + + updatePosition() + + if (!playback) { + return + } + + cleanups.push(watch(playback.isPlaying, (isPlaying) => { + if (isPlaying) { + raf.resume() + } + else { + raf.pause() + updatePosition() + } + })) + + cleanups.push(watch(playback.startPosition, () => { + raf.pause() + updatePosition() + if (playback.isPlaying.value) { + raf.resume() + } + })) + + cleanups.push(() => raf.pause()) + }) + + const stop = () => { + stopWatch() + cleanup() + } + + tryOnScopeDispose(cleanup) + + return { stop, position } +} + +export function togglePlayStop( + player: PlayerControls | null, + options?: StopOptions, +) { + if (!player) { + return + } + if (player.playback.isPlaying.value) { + player.stop(options) + } + else { + player.play() + } +} + +class AudioEngine { + audioCtx: AudioContext | null = null + masterGain: GainNode | null = null // controlled by UI volume slider + // fadeGain: GainNode | null = null; // tiny fade to avoid clicks + + // cache of decoded buffers by URL + bufferCache = new Map() + + private _player: Ref = shallowRef(null) + // readonly player: Readonly> = this._player; + + // settings + fadeDuration = 0.025 // 25 ms for fade-in/fade-out + + init() { + if (this.audioCtx) { + return + } + this.audioCtx + = new (window.AudioContext || (window as any).webkitAudioContext)() + + this.masterGain = this.audioCtx.createGain() + + // routing: sources -> fadeGain -> masterGain -> destination + this.masterGain.connect(this.audioCtx.destination) + // default full volume + this.masterGain.gain.value = 1 + } + + shutdown() { + this.stopPlayer() + this.audioCtx?.close() + this.audioCtx = null + this.masterGain = null + } + + async fetchAudioBuffer( + url: string, + signal?: AbortSignal, + ): Promise { + this.init() + if (this.bufferCache.has(url)) { + return this.bufferCache.get(url)! + } + const res = await fetch(url, { signal }) + if (!res.ok) { + throw new Error(`Network error ${res.status} when fetching ${url}`) + } + const arrayBuffer = await res.arrayBuffer() + const audioBuffer = await this.audioCtx!.decodeAudioData(arrayBuffer) + this.bufferCache.set(url, audioBuffer) + return audioBuffer + } + + // set UI volume 0..VOLUME_MAX + setVolume(value: number) { + this.init() + if (!this.masterGain || !this.audioCtx) { + return + } + const now = this.audioCtx.currentTime + // small linear ramp to avoid jumps + this.masterGain.gain.cancelScheduledValues(now) + this.masterGain.gain.setValueAtTime(this.masterGain.gain.value, now) + this.masterGain.gain.linearRampToValueAtTime(value, now + 0.05) + } + + initPlayer( + audioTrack: AudioTrack, + ): PlayerControls | null { + this.init() + if (!this.audioCtx || !this.masterGain) { + return null + } + + this.stopPlayer() + + if (!audioTrack.loadedIntro || !audioTrack.loadedLoop) { + return null + } + + const player = reusableAudioBuffersTrackPlayer( + this.audioCtx, + this.masterGain, + audioTrack, + ) + this._player.value = player + return player + } + + private stopPlayer() { + if (this._player.value) { + this._player.value.stop() + this._player.value = null + } + } +} + +const audioEngine = new AudioEngine() +export default audioEngine diff --git a/Frontend/src/audio/AudioWaveform.ts b/Frontend/src/audio/AudioWaveform.ts new file mode 100644 index 0000000..7bf5164 --- /dev/null +++ b/Frontend/src/audio/AudioWaveform.ts @@ -0,0 +1,190 @@ +import type { Fn } from '@vueuse/core' +import type { MaybeRefOrGetter, Ref } from 'vue' +import type { Px } from '@/lib/units' +import { tryOnScopeDispose, watchImmediate } from '@vueuse/core' +import { computed, shallowRef, toValue, triggerRef } from 'vue' +import { useWeakCache } from '@/lib/useWeakCache' + +// Result of async computation +interface UseWaveform { + readonly isDone: Readonly> + readonly peaks: Readonly> + stop: () => void +} + +interface WaveformComputation { + readonly isDone: Readonly> + readonly peaks: Readonly> + /** Start or continue asynchronous computation. */ + run: () => void + /** Stops any ongoing asynchronous computation. */ + stop: () => void +} + +const waveformsCache = useWeakCache>( + () => new Map(), +) + +const WAVEFORM_MIN_WIDTH = 10 + +const emptyComputation: WaveformComputation = { + isDone: shallowRef(false), + peaks: shallowRef(new Float32Array(0)), + run() {}, + stop() {}, +} + +export function useWaveform( + buffer: MaybeRefOrGetter, + width: MaybeRefOrGetter, +): UseWaveform { + const cleanups: Fn[] = [] + const cleanup = () => { + cleanups.forEach(fn => fn()) + cleanups.length = 0 + } + + const compRef: Ref = shallowRef(emptyComputation) + + const stopWatch = watchImmediate( + () => + [ + toValue(buffer), + toValue(width), + ] as const, + ([b, w]) => { + cleanup() + + const map = waveformsCache.getOrNew(b) + + if (w < WAVEFORM_MIN_WIDTH) { + compRef.value = emptyComputation + return + } + + let comp = map.get(w) + if (!comp) { + comp = useWaveformComputation(b, w) + map.set(w, comp) + } + compRef.value = comp + comp.run() + cleanups.push(() => { + compRef.value = emptyComputation + comp.stop() + }) + }, + ) + + const stop = () => { + stopWatch() + cleanup() + } + + tryOnScopeDispose(stop) + + return { + isDone: computed(() => compRef.value.isDone.value), + peaks: computed(() => compRef.value.peaks.value), + stop, + } +} + +function useWaveformComputation(buffer: AudioBuffer, width: Px): WaveformComputation { + // How many times run() has been called without stop(). + // This whole computation should not stop until there is at least one user out there. + let users = 0 + + // How many pixels of `width` have been processed so far + let progress = 0 + + let timeoutID: ReturnType | undefined + + // Waveform data, length shall be equal to the requested width + const waveform = new Float32Array(width) + + const isDone = shallowRef(false) + const peaks = shallowRef(waveform) + + const nChannels = buffer.numberOfChannels + + const samplesPerPx = buffer.length / width + const blocksPerChannel: Float32Array[] = [] + for (let channel = 0; channel < nChannels; channel++) { + blocksPerChannel[channel] = new Float32Array(Math.ceil(samplesPerPx)) + } + + const areWeDoneYet = () => progress >= width + + function stepBlock() { + const blockStart = Math.floor(progress * samplesPerPx) + const blockEnd = Math.floor((progress + 1) * samplesPerPx) + const blockSize = blockEnd - blockStart + + for (let channel = 0; channel < nChannels; channel++) { + buffer.copyFromChannel(blocksPerChannel[channel]!, channel, blockStart) + } + + waveform[progress] = compressBlock(blocksPerChannel, blockSize) + progress += 1 + } + + function stepBatchOfBlocks() { + // run blocks for up to ~10ms to keep UI responsive + const start = performance.now() + const progressStart = progress + while (!areWeDoneYet()) { + stepBlock() + if (performance.now() - start >= 10 || progress - progressStart > 100) { + break + } + } + + triggerRef(peaks) + // triggerRef may as well not trigger refs + // https://github.com/vuejs/core/issues/9579 + // Combined with a throttled drawing function, + // this is a slightly better-than-worse workaround. + peaks.value = new Float32Array(0) + peaks.value = waveform + + if (areWeDoneYet()) { + isDone.value = true + timeoutID = undefined + } + else { + timeoutID = setTimeout(stepBatchOfBlocks, 1) + } + } + + return { + isDone, + peaks, + run() { + users += 1 + + if (timeoutID === undefined && users === 1) { + timeoutID = setTimeout(stepBatchOfBlocks, 0) + } + }, + stop() { + users -= 1 + + if (!timeoutID === undefined && users === 0) { + window.clearTimeout(timeoutID) + timeoutID = undefined + } + }, + } +}; + +function compressBlock(channels: Float32Array[], blockSize: number): number { + let peak = 0.0 + + for (let i = 0; i < blockSize; i++) { + for (let channel = 0; channel < channels.length; channel++) { + peak = Math.max(peak, Math.abs(channels[channel]![i]!)) + } + } + return peak +} diff --git a/Frontend/src/components/ErrorScreen.vue b/Frontend/src/components/ErrorScreen.vue new file mode 100644 index 0000000..460cc57 --- /dev/null +++ b/Frontend/src/components/ErrorScreen.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/Frontend/src/components/Footer.vue b/Frontend/src/components/Footer.vue new file mode 100644 index 0000000..406601b --- /dev/null +++ b/Frontend/src/components/Footer.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/Frontend/src/components/LoadingScreen.vue b/Frontend/src/components/LoadingScreen.vue new file mode 100644 index 0000000..5ef03fb --- /dev/null +++ b/Frontend/src/components/LoadingScreen.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/Frontend/src/components/ScreenTransition.vue b/Frontend/src/components/ScreenTransition.vue new file mode 100644 index 0000000..21251cf --- /dev/null +++ b/Frontend/src/components/ScreenTransition.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/Frontend/src/components/SearchField.vue b/Frontend/src/components/SearchField.vue new file mode 100644 index 0000000..c8e74ad --- /dev/null +++ b/Frontend/src/components/SearchField.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/Frontend/src/components/editor/PreviewScnene.vue b/Frontend/src/components/editor/PreviewScnene.vue new file mode 100644 index 0000000..f20eb77 --- /dev/null +++ b/Frontend/src/components/editor/PreviewScnene.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/Frontend/src/components/editor/TrackInfo.vue b/Frontend/src/components/editor/TrackInfo.vue new file mode 100644 index 0000000..108d8b1 --- /dev/null +++ b/Frontend/src/components/editor/TrackInfo.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/Frontend/src/components/inspector/InspectorPanel.vue b/Frontend/src/components/inspector/InspectorPanel.vue new file mode 100644 index 0000000..6f7ed65 --- /dev/null +++ b/Frontend/src/components/inspector/InspectorPanel.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/Frontend/src/components/inspector/controls/Control.vue b/Frontend/src/components/inspector/controls/Control.vue new file mode 100644 index 0000000..f0a36da --- /dev/null +++ b/Frontend/src/components/inspector/controls/Control.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/Frontend/src/components/inspector/controls/ControlsView.vue b/Frontend/src/components/inspector/controls/ControlsView.vue new file mode 100644 index 0000000..c885507 --- /dev/null +++ b/Frontend/src/components/inspector/controls/ControlsView.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/Frontend/src/components/inspector/controls/impl/BaseNamedControlView.vue b/Frontend/src/components/inspector/controls/impl/BaseNamedControlView.vue new file mode 100644 index 0000000..b6a2f07 --- /dev/null +++ b/Frontend/src/components/inspector/controls/impl/BaseNamedControlView.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/Frontend/src/components/inspector/controls/impl/ButtonControlView.vue b/Frontend/src/components/inspector/controls/impl/ButtonControlView.vue new file mode 100644 index 0000000..823b508 --- /dev/null +++ b/Frontend/src/components/inspector/controls/impl/ButtonControlView.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/Frontend/src/components/inspector/controls/impl/CheckboxControlView.vue b/Frontend/src/components/inspector/controls/impl/CheckboxControlView.vue new file mode 100644 index 0000000..9f3482a --- /dev/null +++ b/Frontend/src/components/inspector/controls/impl/CheckboxControlView.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/Frontend/src/components/inspector/controls/impl/DropDownControlView.vue b/Frontend/src/components/inspector/controls/impl/DropDownControlView.vue new file mode 100644 index 0000000..23eb6cc --- /dev/null +++ b/Frontend/src/components/inspector/controls/impl/DropDownControlView.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/Frontend/src/components/inspector/controls/impl/HrControlView.vue b/Frontend/src/components/inspector/controls/impl/HrControlView.vue new file mode 100644 index 0000000..75baf9e --- /dev/null +++ b/Frontend/src/components/inspector/controls/impl/HrControlView.vue @@ -0,0 +1,15 @@ + + + + + diff --git a/Frontend/src/components/inspector/controls/impl/NotImplementedControlView.vue b/Frontend/src/components/inspector/controls/impl/NotImplementedControlView.vue new file mode 100644 index 0000000..5bf2206 --- /dev/null +++ b/Frontend/src/components/inspector/controls/impl/NotImplementedControlView.vue @@ -0,0 +1,15 @@ + + + + + diff --git a/Frontend/src/components/inspector/controls/impl/NumberControlView.vue b/Frontend/src/components/inspector/controls/impl/NumberControlView.vue new file mode 100644 index 0000000..74f02d1 --- /dev/null +++ b/Frontend/src/components/inspector/controls/impl/NumberControlView.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/Frontend/src/components/inspector/controls/impl/RangeControlView.vue b/Frontend/src/components/inspector/controls/impl/RangeControlView.vue new file mode 100644 index 0000000..f1367ab --- /dev/null +++ b/Frontend/src/components/inspector/controls/impl/RangeControlView.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/Frontend/src/components/inspector/controls/impl/TextAreaControlView.vue b/Frontend/src/components/inspector/controls/impl/TextAreaControlView.vue new file mode 100644 index 0000000..7f5ebae --- /dev/null +++ b/Frontend/src/components/inspector/controls/impl/TextAreaControlView.vue @@ -0,0 +1,28 @@ + + +