@leumas/sing
Leumas Sing — the karaoke game ("Just Dance for karaoke"). A HEADLESS game engine (src/engine: MPM pitch tracker, score engine, game clock, session state machine, library reader — zero...
@leumas/sing
Leumas Sing — the karaoke game ("Just Dance for karaoke"). Pick a song, sing into the mic over the instrumental, and get scored on timing, steadiness, and (with scoring v2) pitch, while a 3D dancer reacts on a cinematic stage. Leaderboards + live rooms make it a micro-community in Leumas Social. Roadmap: ops/todos/sing-roadmap.md.
Layout
src/engine/— the headless** game core. No React, no DOM, no three, no CSS.pitch/— the pitch pipeline:detectPitchMPM(McLeod Pitch Method over the NSDF),
createPitchTracker (AnalyserNode + rAF → pitch frames), createMicSource (the shared mic with the permission latch), pitchMath (freq⇄MIDI⇄note helpers).
constants.js— tracker defaults, storage keys.src/react/**— React bindings + screens (MicLab,SingProvider,useMicPermission).src/surfaces/**— the mountable shell (SingApp) +singRoutes()for hosts.
Entries
@leumas/sing— React barrel (grows per phase).@leumas/sing/engine— the headless core (usable in tests / a tuner / node).@leumas/sing/sing.css— base skin, scoped under.lms-sing, tokens only.
Rules
sing → musiconly via@leumas/music/karaoke(timing utils). Music never imports sing.- Exactly one file may import
@leumas/react-3d-viewer(the lazy 3D dancer), behind a quality gate. - Tokens only (
@leumas/theme); CSS scoped under.lms-sing.
What it exports
54 exports: 26 components, 3 hooks, 25 helpers. Import from @leumas/sing.
CalibrationModalChallengesDEFAULT_CALIBRATION_MSGameStageGRADESHistoryLeaderboardsLyricLaneMIC_CONSTRAINTSMicLabMultiplayerLobbyNOTE_NAMESPITCH_DEFAULTSPitchLaneResultsScreenScoreHudSING_VERSIONSingAppSingHomeSingPlaySingProviderSongPickerSTORAGE_KEYSVerdictPopupWordKaraokeLineXP_FOR_GRADEuseMicPermissionuseSingContextuseSingGameaccuracyToGradecentsOffclamp01createCalibratorcreateGameClockcreateGameSessioncreateLocalSessionDrivercreateMicSourcecreatePitchTrackercreateRoomSessionDrivercreateScoreEnginedetectPitchMPMfoldToOctavefreqToMidigetMicStatejudgeWordlistSingableTracksloadChartmedianOfWindowmidiToFreqmultiplierForCombonoteNameonMicStateretryMicsingRoutes