@nice2dev/ui-audio 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/LICENSE +21 -0
- package/README.md +175 -0
- package/dist/assets/pitchWorker-BgAp5Z97.js +1 -0
- package/dist/assets/scoringWorker-B1PkYu_m.js +1 -0
- package/dist/config/noteSoundSets.d.ts +29 -0
- package/dist/config/noteSoundSets.d.ts.map +1 -0
- package/dist/constants/audioColors.d.ts +2 -0
- package/dist/constants/audioColors.d.ts.map +1 -0
- package/dist/constants/debugKaraoke.d.ts +20 -0
- package/dist/constants/debugKaraoke.d.ts.map +1 -0
- package/dist/constants/karaokeScoringConfig.d.ts +18 -0
- package/dist/constants/karaokeScoringConfig.d.ts.map +1 -0
- package/dist/constants/playerColors.d.ts +5 -0
- package/dist/constants/playerColors.d.ts.map +1 -0
- package/dist/constants/ui.d.ts +3 -0
- package/dist/constants/ui.d.ts.map +1 -0
- package/dist/core/i18n.d.ts +11 -0
- package/dist/core/i18n.d.ts.map +1 -0
- package/dist/dmx/DmxChannelControls.d.ts +14 -0
- package/dist/dmx/DmxChannelControls.d.ts.map +1 -0
- package/dist/dmx/DmxEditor.d.ts +13 -0
- package/dist/dmx/DmxEditor.d.ts.map +1 -0
- package/dist/dmx/dmxService.d.ts +20 -0
- package/dist/dmx/dmxService.d.ts.map +1 -0
- package/dist/editor/AudioClipBox.d.ts +9 -0
- package/dist/editor/AudioClipBox.d.ts.map +1 -0
- package/dist/editor/AudioClipInfo.d.ts +7 -0
- package/dist/editor/AudioClipInfo.d.ts.map +1 -0
- package/dist/editor/AudioEditorPianoRoll.d.ts +20 -0
- package/dist/editor/AudioEditorPianoRoll.d.ts.map +1 -0
- package/dist/editor/AudioEditorPianoRollContainer.d.ts +20 -0
- package/dist/editor/AudioEditorPianoRollContainer.d.ts.map +1 -0
- package/dist/editor/AudioLayerDetails.d.ts +10 -0
- package/dist/editor/AudioLayerDetails.d.ts.map +1 -0
- package/dist/editor/AudioLayerDetailsContainer.d.ts +10 -0
- package/dist/editor/AudioLayerDetailsContainer.d.ts.map +1 -0
- package/dist/editor/AudioLayersNavContainer.d.ts +9 -0
- package/dist/editor/AudioLayersNavContainer.d.ts.map +1 -0
- package/dist/editor/AudioMiniMap.d.ts +11 -0
- package/dist/editor/AudioMiniMap.d.ts.map +1 -0
- package/dist/editor/AudioMiniMapContainer.d.ts +10 -0
- package/dist/editor/AudioMiniMapContainer.d.ts.map +1 -0
- package/dist/editor/AudioSourceDetails.d.ts +12 -0
- package/dist/editor/AudioSourceDetails.d.ts.map +1 -0
- package/dist/editor/AudioTimeline.d.ts +22 -0
- package/dist/editor/AudioTimeline.d.ts.map +1 -0
- package/dist/editor/AudioTimelineContainer.d.ts +18 -0
- package/dist/editor/AudioTimelineContainer.d.ts.map +1 -0
- package/dist/editor/AudioTimelineNavContainer.d.ts +14 -0
- package/dist/editor/AudioTimelineNavContainer.d.ts.map +1 -0
- package/dist/editor/CCLane.d.ts +23 -0
- package/dist/editor/CCLane.d.ts.map +1 -0
- package/dist/editor/CCLaneSelector.d.ts +14 -0
- package/dist/editor/CCLaneSelector.d.ts.map +1 -0
- package/dist/editor/PianoRoll.d.ts +14 -0
- package/dist/editor/PianoRoll.d.ts.map +1 -0
- package/dist/editor/Waveform.d.ts +9 -0
- package/dist/editor/Waveform.d.ts.map +1 -0
- package/dist/editor/editorDisplayModes.d.ts +37 -0
- package/dist/editor/editorDisplayModes.d.ts.map +1 -0
- package/dist/editor/editorIO.d.ts +11 -0
- package/dist/editor/editorIO.d.ts.map +1 -0
- package/dist/editor/hooks/index.d.ts +7 -0
- package/dist/editor/hooks/index.d.ts.map +1 -0
- package/dist/editor/hooks/useAutoSave.d.ts +13 -0
- package/dist/editor/hooks/useAutoSave.d.ts.map +1 -0
- package/dist/editor/hooks/usePlaybackEngine.d.ts +35 -0
- package/dist/editor/hooks/usePlaybackEngine.d.ts.map +1 -0
- package/dist/editor/hooks/useProjectCRUD.d.ts +45 -0
- package/dist/editor/hooks/useProjectCRUD.d.ts.map +1 -0
- package/dist/editor/hooks/useRecording.d.ts +46 -0
- package/dist/editor/hooks/useRecording.d.ts.map +1 -0
- package/dist/editor/nav/AudioLayersNav.d.ts +9 -0
- package/dist/editor/nav/AudioLayersNav.d.ts.map +1 -0
- package/dist/editor/nav/AudioProjectSectionNav.d.ts +12 -0
- package/dist/editor/nav/AudioProjectSectionNav.d.ts.map +1 -0
- package/dist/editor/nav/AudioTimelineNav.d.ts +14 -0
- package/dist/editor/nav/AudioTimelineNav.d.ts.map +1 -0
- package/dist/editor/nav/SaveLoadControls.d.ts +9 -0
- package/dist/editor/nav/SaveLoadControls.d.ts.map +1 -0
- package/dist/editor/panels/AdvancedEditingPanel.d.ts +30 -0
- package/dist/editor/panels/AdvancedEditingPanel.d.ts.map +1 -0
- package/dist/editor/panels/ArpeggiatorPanel.d.ts +12 -0
- package/dist/editor/panels/ArpeggiatorPanel.d.ts.map +1 -0
- package/dist/editor/panels/CCAutomationLaneEditor.d.ts +19 -0
- package/dist/editor/panels/CCAutomationLaneEditor.d.ts.map +1 -0
- package/dist/editor/panels/DisplayModeSelector.d.ts +9 -0
- package/dist/editor/panels/DisplayModeSelector.d.ts.map +1 -0
- package/dist/editor/panels/EditorPanels.d.ts +66 -0
- package/dist/editor/panels/EditorPanels.d.ts.map +1 -0
- package/dist/editor/panels/LFOPanel.d.ts +12 -0
- package/dist/editor/panels/LFOPanel.d.ts.map +1 -0
- package/dist/editor/panels/LayerTrack.d.ts +17 -0
- package/dist/editor/panels/LayerTrack.d.ts.map +1 -0
- package/dist/editor/panels/ProjectPanel.d.ts +23 -0
- package/dist/editor/panels/ProjectPanel.d.ts.map +1 -0
- package/dist/editor/panels/SectionPanel.d.ts +11 -0
- package/dist/editor/panels/SectionPanel.d.ts.map +1 -0
- package/dist/editor/panels/StepSequencerPanel.d.ts +8 -0
- package/dist/editor/panels/StepSequencerPanel.d.ts.map +1 -0
- package/dist/editor/useEditorRecording.d.ts +45 -0
- package/dist/editor/useEditorRecording.d.ts.map +1 -0
- package/dist/editor/useEditorTrack.d.ts +71 -0
- package/dist/editor/useEditorTrack.d.ts.map +1 -0
- package/dist/effects/NoteParticles.d.ts +2 -0
- package/dist/effects/NoteParticles.d.ts.map +1 -0
- package/dist/effects/NoteRiver.d.ts +15 -0
- package/dist/effects/NoteRiver.d.ts.map +1 -0
- package/dist/effects/noteThemeColors.d.ts +14 -0
- package/dist/effects/noteThemeColors.d.ts.map +1 -0
- package/dist/engine/audioContext.d.ts +12 -0
- package/dist/engine/audioContext.d.ts.map +1 -0
- package/dist/engine/audioKeyboard.d.ts +28 -0
- package/dist/engine/audioKeyboard.d.ts.map +1 -0
- package/dist/engine/audioLayerDetails.d.ts +13 -0
- package/dist/engine/audioLayerDetails.d.ts.map +1 -0
- package/dist/engine/audioPlaybackEngine.d.ts +186 -0
- package/dist/engine/audioPlaybackEngine.d.ts.map +1 -0
- package/dist/engine/audioProject.d.ts +10 -0
- package/dist/engine/audioProject.d.ts.map +1 -0
- package/dist/engine/audioSource.d.ts +38 -0
- package/dist/engine/audioSource.d.ts.map +1 -0
- package/dist/engine/audioTimeline.d.ts +54 -0
- package/dist/engine/audioTimeline.d.ts.map +1 -0
- package/dist/engine/audioUtils.d.ts +3 -0
- package/dist/engine/audioUtils.d.ts.map +1 -0
- package/dist/engine/generate-pitch-points.d.ts +2 -0
- package/dist/engine/generate-pitch-points.d.ts.map +1 -0
- package/dist/engine/instrumentPresets.d.ts +13 -0
- package/dist/engine/instrumentPresets.d.ts.map +1 -0
- package/dist/engine/pitch-worklet-processor.d.ts +11 -0
- package/dist/engine/pitch-worklet-processor.d.ts.map +1 -0
- package/dist/engine/pitch_client.d.ts +16 -0
- package/dist/engine/pitch_client.d.ts.map +1 -0
- package/dist/engine/recording.d.ts +31 -0
- package/dist/engine/recording.d.ts.map +1 -0
- package/dist/engine/simpleSynth.d.ts +46 -0
- package/dist/engine/simpleSynth.d.ts.map +1 -0
- package/dist/hooks/useCCAutomation.d.ts +36 -0
- package/dist/hooks/useCCAutomation.d.ts.map +1 -0
- package/dist/hooks/useStepSequencer.d.ts +48 -0
- package/dist/hooks/useStepSequencer.d.ts.map +1 -0
- package/dist/index.cjs +73 -0
- package/dist/index.d.ts +101 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +13179 -0
- package/dist/karaoke/AudioPitchAnalyzer.d.ts +25 -0
- package/dist/karaoke/AudioPitchAnalyzer.d.ts.map +1 -0
- package/dist/karaoke/BarFillEditor.d.ts +14 -0
- package/dist/karaoke/BarFillEditor.d.ts.map +1 -0
- package/dist/karaoke/KaraokeLyrics.d.ts +9 -0
- package/dist/karaoke/KaraokeLyrics.d.ts.map +1 -0
- package/dist/karaoke/KaraokeTimeline.d.ts +21 -0
- package/dist/karaoke/KaraokeTimeline.d.ts.map +1 -0
- package/dist/karaoke/karaokeTimelineTypes.d.ts +77 -0
- package/dist/karaoke/karaokeTimelineTypes.d.ts.map +1 -0
- package/dist/karaoke/rendering/fontCatalog.d.ts +30 -0
- package/dist/karaoke/rendering/fontCatalog.d.ts.map +1 -0
- package/dist/karaoke/rendering/glossyBarCaps.d.ts +57 -0
- package/dist/karaoke/rendering/glossyBarCaps.d.ts.map +1 -0
- package/dist/karaoke/rendering/glossyBarPatterns.d.ts +16 -0
- package/dist/karaoke/rendering/glossyBarPatterns.d.ts.map +1 -0
- package/dist/karaoke/rendering/glossyBarRenderer.d.ts +65 -0
- package/dist/karaoke/rendering/glossyBarRenderer.d.ts.map +1 -0
- package/dist/karaoke/rendering/karaokeAnimations.d.ts +25 -0
- package/dist/karaoke/rendering/karaokeAnimations.d.ts.map +1 -0
- package/dist/karaoke/rendering/karaokeDisplaySettings.d.ts +65 -0
- package/dist/karaoke/rendering/karaokeDisplaySettings.d.ts.map +1 -0
- package/dist/karaoke/rendering/karaokeLyrics.d.ts +54 -0
- package/dist/karaoke/rendering/karaokeLyrics.d.ts.map +1 -0
- package/dist/karaoke/rendering/karaokeNoteParsing.d.ts +20 -0
- package/dist/karaoke/rendering/karaokeNoteParsing.d.ts.map +1 -0
- package/dist/karaoke/rendering/karaokeSettings.d.ts +143 -0
- package/dist/karaoke/rendering/karaokeSettings.d.ts.map +1 -0
- package/dist/karaoke/rendering/karaokeTimeline.d.ts +8 -0
- package/dist/karaoke/rendering/karaokeTimeline.d.ts.map +1 -0
- package/dist/karaoke/rendering/karaokeTimelineRenderer.d.ts +45 -0
- package/dist/karaoke/rendering/karaokeTimelineRenderer.d.ts.map +1 -0
- package/dist/karaoke/rendering/karaokeTimelineTypes.d.ts +32 -0
- package/dist/karaoke/rendering/karaokeTimelineTypes.d.ts.map +1 -0
- package/dist/karaoke/rendering/padNotePlayer.d.ts +73 -0
- package/dist/karaoke/rendering/padNotePlayer.d.ts.map +1 -0
- package/dist/karaoke/rendering/textureCache.d.ts +32 -0
- package/dist/karaoke/rendering/textureCache.d.ts.map +1 -0
- package/dist/karaoke/rendering/textureCatalog.d.ts +27 -0
- package/dist/karaoke/rendering/textureCatalog.d.ts.map +1 -0
- package/dist/karaokeEditor/KaraokeEditorManager.d.ts +21 -0
- package/dist/karaokeEditor/KaraokeEditorManager.d.ts.map +1 -0
- package/dist/karaokeEditor/KaraokePhaserRenderer.d.ts +11 -0
- package/dist/karaokeEditor/KaraokePhaserRenderer.d.ts.map +1 -0
- package/dist/midi/midiSeedGenerator.d.ts +45 -0
- package/dist/midi/midiSeedGenerator.d.ts.map +1 -0
- package/dist/midi/oxygen25Profile.d.ts +42 -0
- package/dist/midi/oxygen25Profile.d.ts.map +1 -0
- package/dist/midi/useMidiLearn.d.ts +94 -0
- package/dist/midi/useMidiLearn.d.ts.map +1 -0
- package/dist/midi/useOxygen25.d.ts +90 -0
- package/dist/midi/useOxygen25.d.ts.map +1 -0
- package/dist/midi/useWebMidi.d.ts +60 -0
- package/dist/midi/useWebMidi.d.ts.map +1 -0
- package/dist/models/editor/audioTypes.d.ts +35 -0
- package/dist/models/editor/audioTypes.d.ts.map +1 -0
- package/dist/models/editor/fxTypes.d.ts +9 -0
- package/dist/models/editor/fxTypes.d.ts.map +1 -0
- package/dist/models/editor/midiTypes.d.ts +15 -0
- package/dist/models/editor/midiTypes.d.ts.map +1 -0
- package/dist/models/editor/timelineTypes.d.ts +11 -0
- package/dist/models/editor/timelineTypes.d.ts.map +1 -0
- package/dist/models/game/modelsGame.d.ts +12 -0
- package/dist/models/game/modelsGame.d.ts.map +1 -0
- package/dist/models/modelsAiAudio.d.ts +121 -0
- package/dist/models/modelsAiAudio.d.ts.map +1 -0
- package/dist/models/modelsAiVideo.d.ts +75 -0
- package/dist/models/modelsAiVideo.d.ts.map +1 -0
- package/dist/models/modelsAudio.d.ts +160 -0
- package/dist/models/modelsAudio.d.ts.map +1 -0
- package/dist/models/modelsDmx.d.ts +75 -0
- package/dist/models/modelsDmx.d.ts.map +1 -0
- package/dist/models/modelsEditor.d.ts +112 -0
- package/dist/models/modelsEditor.d.ts.map +1 -0
- package/dist/models/modelsKaraoke.d.ts +75 -0
- package/dist/models/modelsKaraoke.d.ts.map +1 -0
- package/dist/models/modelsMusicPlatform.d.ts +8 -0
- package/dist/models/modelsMusicPlatform.d.ts.map +1 -0
- package/dist/models/modelsPlatforms.d.ts +52 -0
- package/dist/models/modelsPlatforms.d.ts.map +1 -0
- package/dist/models/modelsPlaylistManager.d.ts +197 -0
- package/dist/models/modelsPlaylistManager.d.ts.map +1 -0
- package/dist/models/modelsPlaylists.d.ts +97 -0
- package/dist/models/modelsPlaylists.d.ts.map +1 -0
- package/dist/player/GenericPlayer.d.ts +56 -0
- package/dist/player/GenericPlayer.d.ts.map +1 -0
- package/dist/player/GenericPlayerControls.d.ts +17 -0
- package/dist/player/GenericPlayerControls.d.ts.map +1 -0
- package/dist/player/GenericPlayerStage.d.ts +20 -0
- package/dist/player/GenericPlayerStage.d.ts.map +1 -0
- package/dist/player/GenericPlayerStageVisualizer.d.ts +32 -0
- package/dist/player/GenericPlayerStageVisualizer.d.ts.map +1 -0
- package/dist/player/GenericPlayerTrackList.d.ts +10 -0
- package/dist/player/GenericPlayerTrackList.d.ts.map +1 -0
- package/dist/player/YouTubePlayer.d.ts +13 -0
- package/dist/player/YouTubePlayer.d.ts.map +1 -0
- package/dist/player/nowPlayingAdapter.d.ts +19 -0
- package/dist/player/nowPlayingAdapter.d.ts.map +1 -0
- package/dist/player/visualizer/ModeSwitcher.d.ts +12 -0
- package/dist/player/visualizer/ModeSwitcher.d.ts.map +1 -0
- package/dist/player/visualizer/StageVisualizer.d.ts +23 -0
- package/dist/player/visualizer/StageVisualizer.d.ts.map +1 -0
- package/dist/player/visualizer/VuOverlay.d.ts +6 -0
- package/dist/player/visualizer/VuOverlay.d.ts.map +1 -0
- package/dist/player/visualizer/modes/BarsMode.d.ts +2 -0
- package/dist/player/visualizer/modes/BarsMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/BlobFlowMode.d.ts +11 -0
- package/dist/player/visualizer/modes/BlobFlowMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/ColorRipplesMode.d.ts +12 -0
- package/dist/player/visualizer/modes/ColorRipplesMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/CoverMode.d.ts +9 -0
- package/dist/player/visualizer/modes/CoverMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/CozyFireplaceMode.d.ts +14 -0
- package/dist/player/visualizer/modes/CozyFireplaceMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/EqualizerCircleMode.d.ts +2 -0
- package/dist/player/visualizer/modes/EqualizerCircleMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/GridMode.d.ts +2 -0
- package/dist/player/visualizer/modes/GridMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/ImageTornadoMode.d.ts +18 -0
- package/dist/player/visualizer/modes/ImageTornadoMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/LavaLampMode.d.ts +13 -0
- package/dist/player/visualizer/modes/LavaLampMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/NeonTrianglesMode.d.ts +11 -0
- package/dist/player/visualizer/modes/NeonTrianglesMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/OrbitalsMode.d.ts +2 -0
- package/dist/player/visualizer/modes/OrbitalsMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/PaletteMode.d.ts +2 -0
- package/dist/player/visualizer/modes/PaletteMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/ParticlesMode.d.ts +13 -0
- package/dist/player/visualizer/modes/ParticlesMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/PlasmaBallMode.d.ts +3 -0
- package/dist/player/visualizer/modes/PlasmaBallMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/RadialMode.d.ts +2 -0
- package/dist/player/visualizer/modes/RadialMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/RaysMode.d.ts +4 -0
- package/dist/player/visualizer/modes/RaysMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/RiftMode.d.ts +3 -0
- package/dist/player/visualizer/modes/RiftMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/RingsMode.d.ts +2 -0
- package/dist/player/visualizer/modes/RingsMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/SpectrumMode.d.ts +2 -0
- package/dist/player/visualizer/modes/SpectrumMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/StarfieldMode.d.ts +13 -0
- package/dist/player/visualizer/modes/StarfieldMode.d.ts.map +1 -0
- package/dist/player/visualizer/modes/WaveformMode.d.ts +2 -0
- package/dist/player/visualizer/modes/WaveformMode.d.ts.map +1 -0
- package/dist/player/visualizer/types.d.ts +3 -0
- package/dist/player/visualizer/types.d.ts.map +1 -0
- package/dist/player/visualizer/useLocalStorageState.d.ts +2 -0
- package/dist/player/visualizer/useLocalStorageState.d.ts.map +1 -0
- package/dist/playlist/DynamicRuleEditor.d.ts +11 -0
- package/dist/playlist/DynamicRuleEditor.d.ts.map +1 -0
- package/dist/playlist/GenericPlaylist.d.ts +22 -0
- package/dist/playlist/GenericPlaylist.d.ts.map +1 -0
- package/dist/playlist/GenericPlaylistItem.d.ts +41 -0
- package/dist/playlist/GenericPlaylistItem.d.ts.map +1 -0
- package/dist/playlist/PlaylistBrowser.d.ts +24 -0
- package/dist/playlist/PlaylistBrowser.d.ts.map +1 -0
- package/dist/playlist/PlaylistDualPane.d.ts +17 -0
- package/dist/playlist/PlaylistDualPane.d.ts.map +1 -0
- package/dist/playlist/PlaylistGridView.d.ts +12 -0
- package/dist/playlist/PlaylistGridView.d.ts.map +1 -0
- package/dist/playlist/PlaylistList.d.ts +23 -0
- package/dist/playlist/PlaylistList.d.ts.map +1 -0
- package/dist/playlist/PlaylistOverview.d.ts +14 -0
- package/dist/playlist/PlaylistOverview.d.ts.map +1 -0
- package/dist/playlist/PlaylistSearchBar.d.ts +22 -0
- package/dist/playlist/PlaylistSearchBar.d.ts.map +1 -0
- package/dist/playlist/PlaylistSidebar.d.ts +25 -0
- package/dist/playlist/PlaylistSidebar.d.ts.map +1 -0
- package/dist/playlist/PlaylistTagEditor.d.ts +15 -0
- package/dist/playlist/PlaylistTagEditor.d.ts.map +1 -0
- package/dist/playlist/PlaylistTrackList.d.ts +26 -0
- package/dist/playlist/PlaylistTrackList.d.ts.map +1 -0
- package/dist/playlist/useLocalPlaylists.d.ts +17 -0
- package/dist/playlist/useLocalPlaylists.d.ts.map +1 -0
- package/dist/ui-audio.css +1 -0
- package/dist/utils/BaseStreamClient.d.ts +64 -0
- package/dist/utils/BaseStreamClient.d.ts.map +1 -0
- package/dist/utils/arpeggiator.d.ts +49 -0
- package/dist/utils/arpeggiator.d.ts.map +1 -0
- package/dist/utils/articulationEngine.d.ts +69 -0
- package/dist/utils/articulationEngine.d.ts.map +1 -0
- package/dist/utils/audioEditorUtils.d.ts +2 -0
- package/dist/utils/audioEditorUtils.d.ts.map +1 -0
- package/dist/utils/audioFxUtils.d.ts +6 -0
- package/dist/utils/audioFxUtils.d.ts.map +1 -0
- package/dist/utils/audioMidiUtils.d.ts +18 -0
- package/dist/utils/audioMidiUtils.d.ts.map +1 -0
- package/dist/utils/audioPitchAlgorithms.d.ts +3 -0
- package/dist/utils/audioPitchAlgorithms.d.ts.map +1 -0
- package/dist/utils/audioPitchAnalyzeFile.d.ts +26 -0
- package/dist/utils/audioPitchAnalyzeFile.d.ts.map +1 -0
- package/dist/utils/audioTimelineUtils.d.ts +5 -0
- package/dist/utils/audioTimelineUtils.d.ts.map +1 -0
- package/dist/utils/ccAutomation.d.ts +51 -0
- package/dist/utils/ccAutomation.d.ts.map +1 -0
- package/dist/utils/chordScale.d.ts +47 -0
- package/dist/utils/chordScale.d.ts.map +1 -0
- package/dist/utils/clipLauncher.d.ts +97 -0
- package/dist/utils/clipLauncher.d.ts.map +1 -0
- package/dist/utils/colorResolver.d.ts +12 -0
- package/dist/utils/colorResolver.d.ts.map +1 -0
- package/dist/utils/crepeStreaming.d.ts +21 -0
- package/dist/utils/crepeStreaming.d.ts.map +1 -0
- package/dist/utils/drawTool.d.ts +31 -0
- package/dist/utils/drawTool.d.ts.map +1 -0
- package/dist/utils/envelopeFollower.d.ts +46 -0
- package/dist/utils/envelopeFollower.d.ts.map +1 -0
- package/dist/utils/gameAudio.d.ts +237 -0
- package/dist/utils/gameAudio.d.ts.map +1 -0
- package/dist/utils/grooveTemplates.d.ts +69 -0
- package/dist/utils/grooveTemplates.d.ts.map +1 -0
- package/dist/utils/karaokeHelpers.d.ts +61 -0
- package/dist/utils/karaokeHelpers.d.ts.map +1 -0
- package/dist/utils/karaokeMetadata.d.ts +27 -0
- package/dist/utils/karaokeMetadata.d.ts.map +1 -0
- package/dist/utils/karaokeScoring.d.ts +111 -0
- package/dist/utils/karaokeScoring.d.ts.map +1 -0
- package/dist/utils/latencyEstimate.d.ts +8 -0
- package/dist/utils/latencyEstimate.d.ts.map +1 -0
- package/dist/utils/lfoEngine.d.ts +55 -0
- package/dist/utils/lfoEngine.d.ts.map +1 -0
- package/dist/utils/librosaStreaming.d.ts +19 -0
- package/dist/utils/librosaStreaming.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +31 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/macroSystem.d.ts +97 -0
- package/dist/utils/macroSystem.d.ts.map +1 -0
- package/dist/utils/musicPlayerUtils.d.ts +7 -0
- package/dist/utils/musicPlayerUtils.d.ts.map +1 -0
- package/dist/utils/padKaraokeSession.d.ts +50 -0
- package/dist/utils/padKaraokeSession.d.ts.map +1 -0
- package/dist/utils/songDataHelpers.d.ts +59 -0
- package/dist/utils/songDataHelpers.d.ts.map +1 -0
- package/dist/utils/stepSequencer.d.ts +62 -0
- package/dist/utils/stepSequencer.d.ts.map +1 -0
- package/dist/utils/undoRedoUtils.d.ts +5 -0
- package/dist/utils/undoRedoUtils.d.ts.map +1 -0
- package/dist/utils/vocalEffectsEngine.d.ts +64 -0
- package/dist/utils/vocalEffectsEngine.d.ts.map +1 -0
- package/dist/utils/vocalPerformanceMetrics.d.ts +117 -0
- package/dist/utils/vocalPerformanceMetrics.d.ts.map +1 -0
- package/dist/workers/pitchWorker.d.ts +11 -0
- package/dist/workers/pitchWorker.d.ts.map +1 -0
- package/dist/workers/scoringWorker.d.ts +71 -0
- package/dist/workers/scoringWorker.d.ts.map +1 -0
- package/dist/workers/usePitchWorker.d.ts +7 -0
- package/dist/workers/usePitchWorker.d.ts.map +1 -0
- package/dist/workers/useScoringWorker.d.ts +7 -0
- package/dist/workers/useScoringWorker.d.ts.map +1 -0
- package/dist/workers/useWorker.d.ts +12 -0
- package/dist/workers/useWorker.d.ts.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grooveTemplates.d.ts","sourceRoot":"","sources":["../../src/utils/grooveTemplates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,oDAAoD;IACpD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,oDAAoD;IACpD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,cAAc,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,cAAc,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,0BAA0B;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,qBAAqB;IACrB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAID,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAiD5C,CAAC;AAcF,4BAA4B;AAC5B,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,WAAW,GAAG,UAAU,EAAE,CAclF;AAED,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,cAAc,GAAG,UAAU,EAAE,CAexF;AAED,sCAAsC;AACtC,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,EAAE,EACpB,QAAQ,EAAE,cAAc,EACxB,QAAQ,GAAE,MAAU,GACnB,UAAU,EAAE,CAmBd;AAED,oEAAoE;AACpE,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,iBAAiB,GAAG,UAAU,EAAE,CAmBzF;AAED,yBAAyB;AACzB,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAExE;AAED,8BAA8B;AAC9B,wBAAgB,sBAAsB,IAAI,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAE5E"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { KaraokeSongFile } from '../models/modelsKaraoke';
|
|
2
|
+
import { PlayerTrack } from '../player/GenericPlayer';
|
|
3
|
+
import { NoteDescriptor, PitchPoint, NoteScoreResult } from './karaokeScoring';
|
|
4
|
+
import { KaraokeNoteData } from '../karaoke/rendering/karaokeTimeline';
|
|
5
|
+
/**
|
|
6
|
+
* Classic autocorrelation pitch estimator.
|
|
7
|
+
* Returns detected frequency in Hz, or 0 if the signal is below `rmsThreshold`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function autoCorrelate(buf: Float32Array, sampleRate: number, rmsThreshold?: number): number;
|
|
10
|
+
/**
|
|
11
|
+
* Converts parsed KaraokeNoteData[][] + gap (seconds) into a flat
|
|
12
|
+
* NoteDescriptor[] suitable for `scoreNotesWithPitchPoints`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function buildNoteDescriptors(noteLines: KaraokeNoteData[][], gapSec: number): NoteDescriptor[];
|
|
15
|
+
export interface SegmentScoreEntry {
|
|
16
|
+
start: number;
|
|
17
|
+
end: number;
|
|
18
|
+
pitch: number;
|
|
19
|
+
frac: number;
|
|
20
|
+
isGold?: boolean;
|
|
21
|
+
noteStart?: number;
|
|
22
|
+
noteEnd?: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Maps per-note scoring results back to timeline-friendly segment entries
|
|
26
|
+
* for canvas visualization.
|
|
27
|
+
*/
|
|
28
|
+
export declare function buildSegmentScores(perNote: NoteScoreResult[], noteLines: KaraokeNoteData[][], gapSec: number): SegmentScoreEntry[];
|
|
29
|
+
/**
|
|
30
|
+
* Down-samples an array of pitch points to at most `maxPoints` evenly-spaced
|
|
31
|
+
* entries and quantizes time to 3 decimal places and frequency to integers.
|
|
32
|
+
*/
|
|
33
|
+
export declare function downsampleAndQuantizePitchPoints(points: PitchPoint[], maxPoints?: number): PitchPoint[];
|
|
34
|
+
/**
|
|
35
|
+
* Estimates one-way latency (ms) between a server-recorded timestamp and now,
|
|
36
|
+
* accounting for clock offset.
|
|
37
|
+
*/
|
|
38
|
+
export declare function estimateLatencyMs(serverTimeUtc: string, localNowMs: number, clockOffsetMs: number): number;
|
|
39
|
+
/**
|
|
40
|
+
* Returns a human-readable label for a pitch algorithm ID.
|
|
41
|
+
*/
|
|
42
|
+
export declare function getAlgorithmLabel(alg: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* Returns a hex colour associated with the given pitch algorithm.
|
|
45
|
+
*/
|
|
46
|
+
export declare function getAlgorithmColor(alg: string): string;
|
|
47
|
+
export declare function getAlgorithmCssVar(alg: string): string;
|
|
48
|
+
/**
|
|
49
|
+
* Converts a `KaraokeSongFile` into a `PlayerTrack` the generic player
|
|
50
|
+
* can consume. Behaviour depends on `gameMode`:
|
|
51
|
+
* - modes containing "no-music" → empty sources (a-cappella)
|
|
52
|
+
* - modes containing "instrumental" → prefer `instrumentalPath`
|
|
53
|
+
* - default → YouTube > audioPath
|
|
54
|
+
*/
|
|
55
|
+
export declare function toTrack(song: KaraokeSongFile, gameMode: string | undefined): PlayerTrack;
|
|
56
|
+
/**
|
|
57
|
+
* Maps a "browser song" object (from KaraokeSongBrowser) to a proper
|
|
58
|
+
* `KaraokeSongFile`. Accepts an `any`-ish input shape and normalises it.
|
|
59
|
+
*/
|
|
60
|
+
export declare function convertBrowserSongToKaraokeSongFile(initialSong: Record<string, unknown>): KaraokeSongFile;
|
|
61
|
+
//# sourceMappingURL=karaokeHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"karaokeHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/karaokeHelpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAO5E;;;GAGG;AACH,wBAAgB,aAAa,CACzB,GAAG,EAAE,YAAY,EACjB,UAAU,EAAE,MAAM,EAClB,YAAY,GAAE,MAAa,GAC5B,MAAM,CAkBR;AAMD;;;GAGG;AACH,wBAAgB,oBAAoB,CAChC,SAAS,EAAE,eAAe,EAAE,EAAE,EAC9B,MAAM,EAAE,MAAM,GACf,cAAc,EAAE,CAelB;AAMD,MAAM,WAAW,iBAAiB;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAC9B,OAAO,EAAE,eAAe,EAAE,EAC1B,SAAS,EAAE,eAAe,EAAE,EAAE,EAC9B,MAAM,EAAE,MAAM,GACf,iBAAiB,EAAE,CAmBrB;AAMD;;;GAGG;AACH,wBAAgB,gCAAgC,CAC5C,MAAM,EAAE,UAAU,EAAE,EACpB,SAAS,GAAE,MAAY,GACxB,UAAU,EAAE,CAYd;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC7B,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACtB,MAAM,CAIR;AAaD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAErD;AAID,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGtD;AAMD;;;;;;GAMG;AACH,wBAAgB,OAAO,CACnB,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC7B,WAAW,CAmDb;AAMD;;;GAGG;AACH,wBAAgB,mCAAmC,CAC/C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,eAAe,CAkCjB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses metadata from format: v=youtubeId,co=cover.jpg,bg=background.jpg
|
|
3
|
+
* Used in VIDEO tags in karaoke files.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* parseVideoMetadata("v=l9ml3nyww80,co=cruel-summer.jpg,bg=bananarama.jpg")
|
|
7
|
+
* // returns { youtubeId: "l9ml3nyww80", coverImage: "cruel-summer.jpg", backgroundImage: "bananarama.jpg" }
|
|
8
|
+
*/
|
|
9
|
+
export interface VideoMetadata {
|
|
10
|
+
youtubeId?: string;
|
|
11
|
+
coverImage?: string;
|
|
12
|
+
backgroundImage?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function parseVideoMetadata(metadata: string | null | undefined): VideoMetadata;
|
|
15
|
+
/**
|
|
16
|
+
* Constructs a cover image URL based on metadata.
|
|
17
|
+
* If coverImage is a full URL (http/https), returns it directly.
|
|
18
|
+
* If it is a relative filename, builds URL via backend API.
|
|
19
|
+
* If it is a youtubeId, returns YouTube thumbnail URL.
|
|
20
|
+
* Otherwise returns a placeholder.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getCoverUrl(metadata: VideoMetadata, baseUrl?: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Constructs background URL based on metadata.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getBackgroundUrl(metadata: VideoMetadata, baseUrl?: string): string;
|
|
27
|
+
//# sourceMappingURL=karaokeMetadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"karaokeMetadata.d.ts","sourceRoot":"","sources":["../../src/utils/karaokeMetadata.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,aAAa,CAoBrF;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,SAAuB,GAAG,MAAM,CAmB3F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,SAAiB,GAAG,MAAM,CAM1F"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
export interface NoteDescriptor {
|
|
2
|
+
startTime: number;
|
|
3
|
+
duration: number;
|
|
4
|
+
pitch: number;
|
|
5
|
+
isGold?: boolean;
|
|
6
|
+
line?: number;
|
|
7
|
+
idx?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface PitchPoint {
|
|
10
|
+
t: number;
|
|
11
|
+
hz: number;
|
|
12
|
+
}
|
|
13
|
+
export interface ScoringParams {
|
|
14
|
+
semitoneTolerance: number;
|
|
15
|
+
preWindow: number;
|
|
16
|
+
postExtra: number;
|
|
17
|
+
segMs?: number;
|
|
18
|
+
completionBonusFactor?: number;
|
|
19
|
+
goldFullBonusFactor?: number;
|
|
20
|
+
difficultyMult?: number;
|
|
21
|
+
/** When true, gold notes are treated as regular (ScoreFactor=1 instead of 2). */
|
|
22
|
+
disableGoldNotes?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface NoteScoreResult {
|
|
25
|
+
noteKey: string;
|
|
26
|
+
segments: Array<{
|
|
27
|
+
segIndex: number;
|
|
28
|
+
frac: number;
|
|
29
|
+
add: number;
|
|
30
|
+
segStart: number;
|
|
31
|
+
segEnd: number;
|
|
32
|
+
visualStart: number;
|
|
33
|
+
visualEnd: number;
|
|
34
|
+
}>;
|
|
35
|
+
totalAdded: number;
|
|
36
|
+
completed?: boolean;
|
|
37
|
+
completionBonus?: number;
|
|
38
|
+
goldFullBonus?: number;
|
|
39
|
+
}
|
|
40
|
+
/** Aggregated note-level statistics for backend submission. */
|
|
41
|
+
export interface NoteStats {
|
|
42
|
+
/** Notes where the player scored > 0 */
|
|
43
|
+
hits: number;
|
|
44
|
+
/** Notes with zero score */
|
|
45
|
+
misses: number;
|
|
46
|
+
/** Partially-hit notes (some segments scored, not all) */
|
|
47
|
+
good: number;
|
|
48
|
+
/** Fully-completed notes (all segments scored) */
|
|
49
|
+
perfect: number;
|
|
50
|
+
/** Longest consecutive note-hit streak */
|
|
51
|
+
maxCombo: number;
|
|
52
|
+
}
|
|
53
|
+
export interface ScoringResult {
|
|
54
|
+
/** Classic score: note hits with gold 2× (UltraStar rules). Raw before scaling, 0–10 000 after. */
|
|
55
|
+
classicScore: number;
|
|
56
|
+
/** Bonus points: combo + completion + gold-full bonuses. Raw before scaling, uncapped after. */
|
|
57
|
+
bonusScore: number;
|
|
58
|
+
/** Total = classicScore + bonusScore */
|
|
59
|
+
totalScore: number;
|
|
60
|
+
/** @deprecated Alias for classicScore — backward compat with tests */
|
|
61
|
+
total: number;
|
|
62
|
+
perNote: NoteScoreResult[];
|
|
63
|
+
combo?: ComboResult;
|
|
64
|
+
verseRatings?: VerseRating[];
|
|
65
|
+
/** Aggregated hit/miss/good/perfect/combo stats for backend XP formula. */
|
|
66
|
+
noteStats?: NoteStats;
|
|
67
|
+
}
|
|
68
|
+
/** Rating labels for verse performance (UltraStar-style) */
|
|
69
|
+
export type VerseRatingLabel = 'Awful' | 'Bad' | 'OK' | 'Good' | 'Great' | 'Perfect';
|
|
70
|
+
export interface VerseRating {
|
|
71
|
+
verseIndex: number;
|
|
72
|
+
hitFraction: number;
|
|
73
|
+
label: VerseRatingLabel;
|
|
74
|
+
comboBonus: number;
|
|
75
|
+
}
|
|
76
|
+
export interface ComboResult {
|
|
77
|
+
maxCombo: number;
|
|
78
|
+
currentCombo: number;
|
|
79
|
+
totalComboBonus: number;
|
|
80
|
+
}
|
|
81
|
+
/** Map a hit fraction (0-1) to a rating label */
|
|
82
|
+
export declare function getVerseRatingLabel(fraction: number): VerseRatingLabel;
|
|
83
|
+
/** Combo multiplier: combo >= 10 → 1.5x, >= 20 → 2x, >= 30 → 2.5x, >= 50 → 3x */
|
|
84
|
+
export declare function getComboMultiplier(combo: number): number;
|
|
85
|
+
export declare function scoreNotesWithPitchPoints(notes: NoteDescriptor[], points: PitchPoint[], params: ScoringParams): ScoringResult;
|
|
86
|
+
/**
|
|
87
|
+
* Compute the theoretical maximum raw segment score (perfect play on every note).
|
|
88
|
+
* This equals 10 000 in the scaled UI — songs of any length map to the same max.
|
|
89
|
+
*/
|
|
90
|
+
export declare function computeTheoreticalMax(notes: NoteDescriptor[], disableGoldNotes?: boolean): number;
|
|
91
|
+
/**
|
|
92
|
+
* Scale a raw segment score to the 0–10 000 range.
|
|
93
|
+
* 10 000 = perfect performance regardless of song length.
|
|
94
|
+
*/
|
|
95
|
+
export declare function scaleTo10k(rawScore: number, theoreticalMax: number): number;
|
|
96
|
+
/**
|
|
97
|
+
* Scale a full ScoringResult using UltraStar 10k normalization.
|
|
98
|
+
* - classicScore: capped at 10 000 (UltraStar parity)
|
|
99
|
+
* - bonusScore: scaled proportionally but uncapped (combo/completion/gold-full)
|
|
100
|
+
* - totalScore: classicScore + bonusScore
|
|
101
|
+
* - total: alias for classicScore (backward compat)
|
|
102
|
+
*/
|
|
103
|
+
export declare function scaleResult(result: ScoringResult, notes: NoteDescriptor[], disableGoldNotes?: boolean): ScoringResult;
|
|
104
|
+
declare const _default: {
|
|
105
|
+
scoreNotesWithPitchPoints: typeof scoreNotesWithPitchPoints;
|
|
106
|
+
computeTheoreticalMax: typeof computeTheoreticalMax;
|
|
107
|
+
scaleTo10k: typeof scaleTo10k;
|
|
108
|
+
scaleResult: typeof scaleResult;
|
|
109
|
+
};
|
|
110
|
+
export default _default;
|
|
111
|
+
//# sourceMappingURL=karaokeScoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"karaokeScoring.d.ts","sourceRoot":"","sources":["../../src/utils/karaokeScoring.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function makeClickReference(totalMs: number, sampleRate: number, clickAtMs?: number, clickWidthMs?: number): Float32Array<ArrayBuffer>;
|
|
2
|
+
export declare function estimateLatencyMsFromRecording(recorded: Float32Array, sampleRate: number, clickAtMs?: number, clickWidthMs?: number): number | null;
|
|
3
|
+
declare const _default: {
|
|
4
|
+
estimateLatencyMsFromRecording: typeof estimateLatencyMsFromRecording;
|
|
5
|
+
makeClickReference: typeof makeClickReference;
|
|
6
|
+
};
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=latencyEstimate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"latencyEstimate.d.ts","sourceRoot":"","sources":["../../src/utils/latencyEstimate.ts"],"names":[],"mappings":"AAIA,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,SAAK,EAAE,YAAY,SAAK,6BAYxG;AA8CD,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,SAAK,EAAE,YAAY,SAAK,GAAI,MAAM,GAAG,IAAI,CAc5I;;;;;AAED,wBAAsE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export type LFOWaveform = 'sine' | 'triangle' | 'sawtooth' | 'square' | 'random' | 'sample-hold';
|
|
2
|
+
export interface LFOConfig {
|
|
3
|
+
/** Waveform shape */
|
|
4
|
+
waveform: LFOWaveform;
|
|
5
|
+
/** Frequency in Hz (0.01 - 20) */
|
|
6
|
+
rate: number;
|
|
7
|
+
/** Depth/amplitude (0-1) */
|
|
8
|
+
depth: number;
|
|
9
|
+
/** Phase offset in radians (0 - 2π) */
|
|
10
|
+
phase: number;
|
|
11
|
+
/** Center/bias value (0-1) — output = center ± depth/2 */
|
|
12
|
+
center: number;
|
|
13
|
+
/** Whether the LFO is synced to BPM */
|
|
14
|
+
syncToBpm: boolean;
|
|
15
|
+
/** Sync division (e.g. '1/4' = quarter note, '1/8' = eighth note) */
|
|
16
|
+
syncDivision: LFOSyncDivision;
|
|
17
|
+
/** Target CC number (or parameter ID) */
|
|
18
|
+
targetCC?: number;
|
|
19
|
+
/** Whether the LFO is active */
|
|
20
|
+
enabled: boolean;
|
|
21
|
+
}
|
|
22
|
+
export type LFOSyncDivision = '4/1' | '2/1' | '1/1' | '1/2' | '1/4' | '1/8' | '1/16' | '1/32' | '1/2t' | '1/4t' | '1/8t' | '1/16t';
|
|
23
|
+
export declare function createDefaultLFO(): LFOConfig;
|
|
24
|
+
/** Convert BPM + sync division to LFO frequency in Hz */
|
|
25
|
+
export declare function syncDivisionToHz(bpm: number, division: LFOSyncDivision): number;
|
|
26
|
+
/** Core waveform function: returns value in [-1, 1] range */
|
|
27
|
+
export declare function waveformValue(waveform: LFOWaveform, phase: number): number;
|
|
28
|
+
/**
|
|
29
|
+
* Compute LFO output at a given time.
|
|
30
|
+
* Returns value in [0, 1] range (clamped).
|
|
31
|
+
*/
|
|
32
|
+
export declare function evaluateLFO(config: LFOConfig, time: number, bpm?: number): number;
|
|
33
|
+
/**
|
|
34
|
+
* Compute LFO output mapped to a CC value (0-127).
|
|
35
|
+
*/
|
|
36
|
+
export declare function evaluateLFOAsCC(config: LFOConfig, time: number, bpm?: number): number;
|
|
37
|
+
/**
|
|
38
|
+
* Sample LFO over a time range to generate CC automation events.
|
|
39
|
+
*/
|
|
40
|
+
export declare function sampleLFOToCCEvents(config: LFOConfig, startTime: number, endTime: number, cc: number, samplesPerSecond?: number, bpm?: number): {
|
|
41
|
+
time: number;
|
|
42
|
+
value: number;
|
|
43
|
+
cc: number;
|
|
44
|
+
}[];
|
|
45
|
+
/**
|
|
46
|
+
* Generate an array of { x, y } points for SVG visualization.
|
|
47
|
+
* x in [0, width], y in [0, height].
|
|
48
|
+
*/
|
|
49
|
+
export declare function sampleLFOForDisplay(config: LFOConfig, width: number, height: number, duration?: number, bpm?: number, samples?: number): {
|
|
50
|
+
x: number;
|
|
51
|
+
y: number;
|
|
52
|
+
}[];
|
|
53
|
+
export declare function serializeLFO(config: LFOConfig): string;
|
|
54
|
+
export declare function deserializeLFO(json: string): LFOConfig | null;
|
|
55
|
+
//# sourceMappingURL=lfoEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lfoEngine.d.ts","sourceRoot":"","sources":["../../src/utils/lfoEngine.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEjG,MAAM,WAAW,SAAS;IACxB,qBAAqB;IACrB,QAAQ,EAAE,WAAW,CAAC;IACtB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,YAAY,EAAE,eAAe,CAAC;IAC9B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,eAAe,GACvB,KAAK,GAAG,KAAK,GAAG,KAAK,GACrB,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GACvC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAIvC,wBAAgB,gBAAgB,IAAI,SAAS,CAW5C;AAmBD,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,MAAM,CAG/E;AAID,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA4B1E;AAID;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAYjF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAErF;AAID;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,gBAAgB,GAAE,MAAW,EAC7B,GAAG,CAAC,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,CAY/C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAU,EACpB,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,GAAE,MAAY,GACpB;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,CAa5B;AAID,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAEtD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAS7D"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BaseStreamClient, BaseStreamOptions } from './BaseStreamClient';
|
|
2
|
+
export type LibrosaMessage = {
|
|
3
|
+
hz?: number;
|
|
4
|
+
confidence?: number;
|
|
5
|
+
error?: string;
|
|
6
|
+
[k: string]: unknown;
|
|
7
|
+
};
|
|
8
|
+
export type LibrosaStreamOptions = BaseStreamOptions & {
|
|
9
|
+
onMessage?: (msg: LibrosaMessage) => void;
|
|
10
|
+
};
|
|
11
|
+
export declare class LibrosaStreamClient extends BaseStreamClient {
|
|
12
|
+
private readonly librosaOpts;
|
|
13
|
+
constructor(opts: LibrosaStreamOptions);
|
|
14
|
+
protected get tag(): string;
|
|
15
|
+
protected handleWsMessage(data: string): void;
|
|
16
|
+
protected get useWorklet(): boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function startLibrosaMicStream(opts: LibrosaStreamOptions): Promise<LibrosaStreamClient>;
|
|
19
|
+
//# sourceMappingURL=librosaStreaming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"librosaStreaming.d.ts","sourceRoot":"","sources":["../../src/utils/librosaStreaming.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAExG,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG;IACrD,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;CAC3C,CAAC;AAEF,qBAAa,mBAAoB,SAAQ,gBAAgB;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuB;gBAEvC,IAAI,EAAE,oBAAoB;IAKtC,SAAS,KAAK,GAAG,IAAI,MAAM,CAE1B;IAED,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM7C,SAAS,KAAK,UAAU,IAAI,OAAO,CAElC;CACF;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,gCAIrE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* General-purpose debug logger with environment-based log levels.
|
|
3
|
+
*
|
|
4
|
+
* Production builds only emit WARN and ERROR.
|
|
5
|
+
* Development builds emit all levels by default (overridable via VITE_LOG_LEVEL).
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* * logger.debug('KaraokeManager', 'pitch updated', { pitch: 440 });
|
|
9
|
+
* logger.warn('AudioPitch', 'fallback to default analyser');
|
|
10
|
+
* logger.error('RSVP', 'mutation failed', error);
|
|
11
|
+
*
|
|
12
|
+
* Scoped loggers:
|
|
13
|
+
* const _LOG_PREFIX = 'KaraokeManager';* console.debug(_LOG_PREFIX,'init');
|
|
14
|
+
* console.error(_LOG_PREFIX,'failed', error);
|
|
15
|
+
*/
|
|
16
|
+
export interface ScopedLogger {
|
|
17
|
+
debug: (message: string, ...args: unknown[]) => void;
|
|
18
|
+
info: (message: string, ...args: unknown[]) => void;
|
|
19
|
+
warn: (message: string, ...args: unknown[]) => void;
|
|
20
|
+
error: (message: string, ...args: unknown[]) => void;
|
|
21
|
+
}
|
|
22
|
+
export declare const logger: {
|
|
23
|
+
readonly debug: (tag: string, message: string, ...args: unknown[]) => void;
|
|
24
|
+
readonly info: (tag: string, message: string, ...args: unknown[]) => void;
|
|
25
|
+
readonly warn: (tag: string, message: string, ...args: unknown[]) => void;
|
|
26
|
+
readonly error: (tag: string, message: string, ...args: unknown[]) => void;
|
|
27
|
+
/** Create a logger pre-bound to a specific tag/module name. */
|
|
28
|
+
readonly scoped: (tag: string) => ScopedLogger;
|
|
29
|
+
};
|
|
30
|
+
export default logger;
|
|
31
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAsCH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpD,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACtD;AAED,eAAO,MAAM,MAAM;0BACN,MAAM,WAAW,MAAM,WAAW,OAAO,EAAE,KAAG,IAAI;yBAOnD,MAAM,WAAW,MAAM,WAAW,OAAO,EAAE,KAAG,IAAI;yBAOlD,MAAM,WAAW,MAAM,WAAW,OAAO,EAAE,KAAG,IAAI;0BAOjD,MAAM,WAAW,MAAM,WAAW,OAAO,EAAE,KAAG,IAAI;IAO7D,+DAA+D;2BACnD,MAAM,KAAG,YAAY;CAYzB,CAAC;AAEX,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Macro system — macro controllers, parameter mapping, and modulation routing.
|
|
3
|
+
* Maps macro knobs → multiple target parameters with curves and ranges.
|
|
4
|
+
*/
|
|
5
|
+
export type ModulationCurve = 'linear' | 'exponential' | 'logarithmic' | 's-curve' | 'step' | 'inverse';
|
|
6
|
+
export interface MacroMapping {
|
|
7
|
+
id: string;
|
|
8
|
+
/** Target parameter identifier (e.g., 'filter.frequency', 'reverb.mix') */
|
|
9
|
+
targetParam: string;
|
|
10
|
+
/** Target component/effect identifier */
|
|
11
|
+
targetId: string;
|
|
12
|
+
/** Min output value */
|
|
13
|
+
minValue: number;
|
|
14
|
+
/** Max output value */
|
|
15
|
+
maxValue: number;
|
|
16
|
+
/** Curve type for value transformation */
|
|
17
|
+
curve: ModulationCurve;
|
|
18
|
+
/** Bipolar: if true, 0.5 macro = center, below inverts range */
|
|
19
|
+
bipolar: boolean;
|
|
20
|
+
/** Enabled flag */
|
|
21
|
+
enabled: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface MacroController {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
/** Current value 0-1 */
|
|
27
|
+
value: number;
|
|
28
|
+
/** Default value */
|
|
29
|
+
defaultValue: number;
|
|
30
|
+
/** Color for UI */
|
|
31
|
+
color: string;
|
|
32
|
+
/** Mappings to target parameters */
|
|
33
|
+
mappings: MacroMapping[];
|
|
34
|
+
/** MIDI CC number for external control (null = unmapped) */
|
|
35
|
+
midiCC?: number;
|
|
36
|
+
/** Smoothing time in ms */
|
|
37
|
+
smoothingMs: number;
|
|
38
|
+
}
|
|
39
|
+
export interface LFOModulator {
|
|
40
|
+
id: string;
|
|
41
|
+
name: string;
|
|
42
|
+
/** LFO waveform */
|
|
43
|
+
waveform: 'sine' | 'triangle' | 'square' | 'sawtooth' | 'random';
|
|
44
|
+
/** Rate in Hz (free) or note division (synced) */
|
|
45
|
+
rate: number;
|
|
46
|
+
/** Sync to BPM */
|
|
47
|
+
synced: boolean;
|
|
48
|
+
/** Phase offset 0-1 */
|
|
49
|
+
phase: number;
|
|
50
|
+
/** Depth 0-1 */
|
|
51
|
+
depth: number;
|
|
52
|
+
/** Center value */
|
|
53
|
+
center: number;
|
|
54
|
+
/** Target mappings */
|
|
55
|
+
mappings: MacroMapping[];
|
|
56
|
+
/** Is running */
|
|
57
|
+
active: boolean;
|
|
58
|
+
}
|
|
59
|
+
export interface ModulationMatrix {
|
|
60
|
+
macros: MacroController[];
|
|
61
|
+
lfos: LFOModulator[];
|
|
62
|
+
}
|
|
63
|
+
/** Create an empty modulation matrix with N macro knobs */
|
|
64
|
+
export declare function createModulationMatrix(macroCount?: number, lfoCount?: number): ModulationMatrix;
|
|
65
|
+
/** Add a mapping to a macro */
|
|
66
|
+
export declare function addMacroMapping(matrix: ModulationMatrix, macroId: string, targetId: string, targetParam: string, minValue?: number, maxValue?: number, curve?: ModulationCurve): ModulationMatrix;
|
|
67
|
+
/** Remove a mapping from a macro */
|
|
68
|
+
export declare function removeMacroMapping(matrix: ModulationMatrix, macroId: string, mappingId: string): ModulationMatrix;
|
|
69
|
+
/** Set macro value and compute all mapped output values */
|
|
70
|
+
export declare function setMacroValue(matrix: ModulationMatrix, macroId: string, value: number): {
|
|
71
|
+
matrix: ModulationMatrix;
|
|
72
|
+
outputs: Array<{
|
|
73
|
+
targetId: string;
|
|
74
|
+
targetParam: string;
|
|
75
|
+
value: number;
|
|
76
|
+
}>;
|
|
77
|
+
};
|
|
78
|
+
/** Apply curve transformation to map macro value → output value */
|
|
79
|
+
export declare function applyCurve(input: number, mapping: MacroMapping): number;
|
|
80
|
+
/** Compute LFO value at a given time */
|
|
81
|
+
export declare function computeLFOValue(lfo: LFOModulator, timeSeconds: number): number;
|
|
82
|
+
/** Get all LFO outputs at a given time */
|
|
83
|
+
export declare function computeAllLFOOutputs(matrix: ModulationMatrix, timeSeconds: number): Array<{
|
|
84
|
+
targetId: string;
|
|
85
|
+
targetParam: string;
|
|
86
|
+
value: number;
|
|
87
|
+
}>;
|
|
88
|
+
/** Reset macro to its default value */
|
|
89
|
+
export declare function resetMacro(matrix: ModulationMatrix, macroId: string): ModulationMatrix;
|
|
90
|
+
/** Add mapping to an LFO */
|
|
91
|
+
export declare function addLFOMapping(matrix: ModulationMatrix, lfoId: string, targetId: string, targetParam: string, minValue?: number, maxValue?: number): ModulationMatrix;
|
|
92
|
+
/** Get available modulation curves */
|
|
93
|
+
export declare function getModulationCurves(): Array<{
|
|
94
|
+
curve: ModulationCurve;
|
|
95
|
+
label: string;
|
|
96
|
+
}>;
|
|
97
|
+
//# sourceMappingURL=macroSystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"macroSystem.d.ts","sourceRoot":"","sources":["../../src/utils/macroSystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type SourceKind = "youtube" | "hls" | "audio";
|
|
2
|
+
export declare const isYouTubeUrl: (u: string) => boolean;
|
|
3
|
+
export declare const isM3U8: (u?: string) => boolean;
|
|
4
|
+
export declare const isAudioFile: (u?: string) => boolean;
|
|
5
|
+
export declare const formatTime: (sec: number) => string;
|
|
6
|
+
export declare function extractVideoId(url?: string): string;
|
|
7
|
+
//# sourceMappingURL=musicPlayerUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"musicPlayerUtils.d.ts","sourceRoot":"","sources":["../../src/utils/musicPlayerUtils.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC;AAErD,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,YAAmC,CAAC;AAC1E,eAAO,MAAM,MAAM,GAAI,IAAI,MAAM,YAAqC,CAAC;AACvE,eAAO,MAAM,WAAW,GAAI,IAAI,MAAM,YAA2D,CAAC;AAElG,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,WAKrC,CAAC;AAEF,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,UAM1C"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Karaoke Pad Session — play karaoke by hitting notes with keyboard/pad instead of singing.
|
|
3
|
+
* Difficulty levels control how many keys are needed (more keys = harder).
|
|
4
|
+
*/
|
|
5
|
+
export type PadKaraokeDifficulty = 'easy' | 'normal' | 'hard' | 'expert';
|
|
6
|
+
export interface PadKaraokeConfig {
|
|
7
|
+
difficulty: PadKaraokeDifficulty;
|
|
8
|
+
/** Number of active keys for this difficulty */
|
|
9
|
+
keyCount: number;
|
|
10
|
+
/** Tolerance in semitones for "correct" hit */
|
|
11
|
+
semitoneTolerance: number;
|
|
12
|
+
/** Window in ms before the note to accept early hits */
|
|
13
|
+
preWindowMs: number;
|
|
14
|
+
/** Window in ms after the note to accept late hits */
|
|
15
|
+
postWindowMs: number;
|
|
16
|
+
}
|
|
17
|
+
export interface PadKaraokeNote {
|
|
18
|
+
id: number;
|
|
19
|
+
pitch: number;
|
|
20
|
+
startTime: number;
|
|
21
|
+
duration: number;
|
|
22
|
+
lyric?: string;
|
|
23
|
+
isGolden?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface PadKaraokeHit {
|
|
26
|
+
noteId: number;
|
|
27
|
+
padIndex: number;
|
|
28
|
+
accuracy: 'perfect' | 'good' | 'ok' | 'miss';
|
|
29
|
+
timeDeltaMs: number;
|
|
30
|
+
score: number;
|
|
31
|
+
}
|
|
32
|
+
export interface PadKaraokeResult {
|
|
33
|
+
totalScore: number;
|
|
34
|
+
maxScore: number;
|
|
35
|
+
hits: PadKaraokeHit[];
|
|
36
|
+
combo: number;
|
|
37
|
+
maxCombo: number;
|
|
38
|
+
accuracy: number;
|
|
39
|
+
grade: 'S' | 'A' | 'B' | 'C' | 'D' | 'F';
|
|
40
|
+
}
|
|
41
|
+
export declare const DIFFICULTY_CONFIGS: Record<PadKaraokeDifficulty, PadKaraokeConfig>;
|
|
42
|
+
/** Map a MIDI note pitch to a pad index given difficulty key count */
|
|
43
|
+
export declare function pitchToPadIndex(pitch: number, keyCount: number, minPitch?: number, maxPitch?: number): number;
|
|
44
|
+
/** Check if a pad press matches an expected note */
|
|
45
|
+
export declare function evaluateHit(padIndex: number, pressTimeMs: number, expectedNote: PadKaraokeNote, config: PadKaraokeConfig, minPitch?: number, maxPitch?: number): PadKaraokeHit;
|
|
46
|
+
/** Calculate final results from all hits */
|
|
47
|
+
export declare function calculateResult(hits: PadKaraokeHit[], totalNotes: number): PadKaraokeResult;
|
|
48
|
+
/** Generate a key mapping label for UI display */
|
|
49
|
+
export declare function getPadKeyLabel(padIndex: number, keyCount: number): string;
|
|
50
|
+
//# sourceMappingURL=padKaraokeSession.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"padKaraokeSession.d.ts","sourceRoot":"","sources":["../../src/utils/padKaraokeSession.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,oBAAoB,CAAC;IACjC,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CAC1C;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,oBAAoB,EAAE,gBAAgB,CAK7E,CAAC;AAEF,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAW,EAAE,QAAQ,GAAE,MAAW,GAAG,MAAM,CAIrH;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,cAAc,EAC5B,MAAM,EAAE,gBAAgB,EACxB,QAAQ,GAAE,MAAW,EACrB,QAAQ,GAAE,MAAW,GACpB,aAAa,CA2Bf;AAED,4CAA4C;AAC5C,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB,CA+B3F;AAED,kDAAkD;AAClD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUzE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* songDataHelpers — Shared accessors for cover URL, year, and genre
|
|
3
|
+
* from KaraokeSong / KaraokeSongFile, consolidating linkedSong data.
|
|
4
|
+
*
|
|
5
|
+
* Handles TWO data shapes for linkedSong:
|
|
6
|
+
* A) DTO shape (from /get-filtered-songs): flat fields like albumCoverUrl, albumReleaseYear, artistName
|
|
7
|
+
* B) Raw entity shape (from /filter-songs): nested objects like album.coverUrl, album.releaseYear, primaryArtist.name
|
|
8
|
+
*
|
|
9
|
+
* Priority mirrors KaraokeSongBrowser.getSongCover():
|
|
10
|
+
* 1. linkedSong.albumCoverUrl / album.coverUrl (highest quality, from catalog)
|
|
11
|
+
* 2. linkedSong.externalCoverUrl (Spotify / external service)
|
|
12
|
+
* 3. song.externalCoverUrl (from import)
|
|
13
|
+
* 4. song.coverPath / coverImage (local / YouTube)
|
|
14
|
+
*/
|
|
15
|
+
/** DTO shape returned by /get-filtered-songs (LinkedSongInfoDto) */
|
|
16
|
+
interface LinkedSongDto {
|
|
17
|
+
albumCoverUrl?: string | null;
|
|
18
|
+
externalCoverUrl?: string | null;
|
|
19
|
+
albumReleaseYear?: number | null;
|
|
20
|
+
artistName?: string | null;
|
|
21
|
+
}
|
|
22
|
+
/** Raw entity shape returned by /filter-songs (Song with nav properties) */
|
|
23
|
+
interface LinkedSongRaw {
|
|
24
|
+
album?: {
|
|
25
|
+
coverUrl?: string | null;
|
|
26
|
+
releaseYear?: number | null;
|
|
27
|
+
} | null;
|
|
28
|
+
primaryArtist?: {
|
|
29
|
+
name?: string | null;
|
|
30
|
+
imageUrl?: string | null;
|
|
31
|
+
} | null;
|
|
32
|
+
externalCoverUrl?: string | null;
|
|
33
|
+
}
|
|
34
|
+
type LinkedSongAny = (LinkedSongDto & LinkedSongRaw) | null | undefined;
|
|
35
|
+
interface SongLike {
|
|
36
|
+
coverPath?: string;
|
|
37
|
+
coverImage?: string;
|
|
38
|
+
externalCoverUrl?: string | null;
|
|
39
|
+
genre?: string;
|
|
40
|
+
year?: number | string;
|
|
41
|
+
linkedSong?: LinkedSongAny;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Resolve the best available cover URL for a song,
|
|
45
|
+
* including data from the linked Song entity.
|
|
46
|
+
*/
|
|
47
|
+
export declare function getSongCoverUrl(s: SongLike): string | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* Resolve the best available year, falling back to linkedSong.albumReleaseYear.
|
|
50
|
+
*/
|
|
51
|
+
export declare function getSongYear(s: SongLike): number | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Resolve the best available genre.
|
|
54
|
+
* (LinkedSongInfoDto has no genre field, so this is just the direct value,
|
|
55
|
+
* but centralised here for future expansion.)
|
|
56
|
+
*/
|
|
57
|
+
export declare function getSongGenre(s: SongLike): string | undefined;
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=songDataHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"songDataHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/songDataHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,oEAAoE;AACpE,UAAU,aAAa;IACnB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,4EAA4E;AAC5E,UAAU,aAAa;IACnB,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACzE,aAAa,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1E,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,KAAK,aAAa,GAAG,CAAC,aAAa,GAAG,aAAa,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;AAExE,UAAU,QAAQ;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,aAAa,CAAC;CAC9B;AAkCD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAS/D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAI3D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAE5D"}
|