playlist-data-engine 1.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/LICENSE +21 -0
- package/README.md +352 -0
- package/dist/__vite-browser-external-DYxpcVy9.js +4 -0
- package/dist/constants/DefaultClasses.d.ts +46 -0
- package/dist/constants/DefaultClasses.d.ts.map +1 -0
- package/dist/constants/DefaultEnchantments.d.ts +337 -0
- package/dist/constants/DefaultEnchantments.d.ts.map +1 -0
- package/dist/constants/DefaultEnemies.d.ts +83 -0
- package/dist/constants/DefaultEnemies.d.ts.map +1 -0
- package/dist/constants/DefaultEquipment.d.ts +23 -0
- package/dist/constants/DefaultEquipment.d.ts.map +1 -0
- package/dist/constants/DefaultFeatures.d.ts +22 -0
- package/dist/constants/DefaultFeatures.d.ts.map +1 -0
- package/dist/constants/DefaultRaces.d.ts +102 -0
- package/dist/constants/DefaultRaces.d.ts.map +1 -0
- package/dist/constants/DefaultSkills.d.ts +26 -0
- package/dist/constants/DefaultSkills.d.ts.map +1 -0
- package/dist/constants/DefaultSpells.d.ts +41 -0
- package/dist/constants/DefaultSpells.d.ts.map +1 -0
- package/dist/constants/EncounterBalance.d.ts +208 -0
- package/dist/constants/EncounterBalance.d.ts.map +1 -0
- package/dist/constants/EnemyEquipment.d.ts +71 -0
- package/dist/constants/EnemyEquipment.d.ts.map +1 -0
- package/dist/constants/EnemyRarity.d.ts +79 -0
- package/dist/constants/EnemyRarity.d.ts.map +1 -0
- package/dist/constants/EnemyTemplates/Construct.d.ts +63 -0
- package/dist/constants/EnemyTemplates/Construct.d.ts.map +1 -0
- package/dist/constants/EnemyTemplates/Dragon.d.ts +68 -0
- package/dist/constants/EnemyTemplates/Dragon.d.ts.map +1 -0
- package/dist/constants/EnemyTemplates/Elemental.d.ts +64 -0
- package/dist/constants/EnemyTemplates/Elemental.d.ts.map +1 -0
- package/dist/constants/EnemyTemplates/Fiend.d.ts +62 -0
- package/dist/constants/EnemyTemplates/Fiend.d.ts.map +1 -0
- package/dist/constants/EnemyTemplates/Monstrosity.d.ts +63 -0
- package/dist/constants/EnemyTemplates/Monstrosity.d.ts.map +1 -0
- package/dist/constants/EnemyTemplates/Undead.d.ts +61 -0
- package/dist/constants/EnemyTemplates/Undead.d.ts.map +1 -0
- package/dist/constants/ItemTemplates.d.ts +40 -0
- package/dist/constants/ItemTemplates.d.ts.map +1 -0
- package/dist/constants/MagicItems.d.ts +30 -0
- package/dist/constants/MagicItems.d.ts.map +1 -0
- package/dist/constants/SpellSlots.d.ts +30 -0
- package/dist/constants/SpellSlots.d.ts.map +1 -0
- package/dist/constants/StatScaling.d.ts +113 -0
- package/dist/constants/StatScaling.d.ts.map +1 -0
- package/dist/core/analysis/AudioAnalyzer.d.ts +599 -0
- package/dist/core/analysis/AudioAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/ColorExtractor.d.ts +64 -0
- package/dist/core/analysis/ColorExtractor.d.ts.map +1 -0
- package/dist/core/analysis/EssentiaPitchDetector.d.ts +282 -0
- package/dist/core/analysis/EssentiaPitchDetector.d.ts.map +1 -0
- package/dist/core/analysis/LevelSerializer.d.ts +265 -0
- package/dist/core/analysis/LevelSerializer.d.ts.map +1 -0
- package/dist/core/analysis/MelodyContourAnalyzer.d.ts +283 -0
- package/dist/core/analysis/MelodyContourAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/MultiBandAnalyzer.d.ts +214 -0
- package/dist/core/analysis/MultiBandAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/MusicClassifier.d.ts +524 -0
- package/dist/core/analysis/MusicClassifier.d.ts.map +1 -0
- package/dist/core/analysis/PitchAnalyzer.d.ts +266 -0
- package/dist/core/analysis/PitchAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/PitchDetector.d.ts +251 -0
- package/dist/core/analysis/PitchDetector.d.ts.map +1 -0
- package/dist/core/analysis/SpectrumScanner.d.ts +52 -0
- package/dist/core/analysis/SpectrumScanner.d.ts.map +1 -0
- package/dist/core/analysis/beat/BeatInterpolator.d.ts +477 -0
- package/dist/core/analysis/beat/BeatInterpolator.d.ts.map +1 -0
- package/dist/core/analysis/beat/BeatMapGenerator.d.ts +170 -0
- package/dist/core/analysis/beat/BeatMapGenerator.d.ts.map +1 -0
- package/dist/core/analysis/beat/BeatStream.d.ts +316 -0
- package/dist/core/analysis/beat/BeatStream.d.ts.map +1 -0
- package/dist/core/analysis/beat/BeatSubdivider.d.ts +205 -0
- package/dist/core/analysis/beat/BeatSubdivider.d.ts.map +1 -0
- package/dist/core/analysis/beat/BeatTracker.d.ts +137 -0
- package/dist/core/analysis/beat/BeatTracker.d.ts.map +1 -0
- package/dist/core/analysis/beat/CompositeStreamGenerator.d.ts +180 -0
- package/dist/core/analysis/beat/CompositeStreamGenerator.d.ts.map +1 -0
- package/dist/core/analysis/beat/DensityAnalyzer.d.ts +246 -0
- package/dist/core/analysis/beat/DensityAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/beat/DifficultyVariantGenerator.d.ts +1082 -0
- package/dist/core/analysis/beat/DifficultyVariantGenerator.d.ts.map +1 -0
- package/dist/core/analysis/beat/GrooveAnalyzer.d.ts +192 -0
- package/dist/core/analysis/beat/GrooveAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/beat/OnsetStrengthEnvelope.d.ts +133 -0
- package/dist/core/analysis/beat/OnsetStrengthEnvelope.d.ts.map +1 -0
- package/dist/core/analysis/beat/PhraseAnalyzer.d.ts +230 -0
- package/dist/core/analysis/beat/PhraseAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/beat/RhythmQuantizer.d.ts +399 -0
- package/dist/core/analysis/beat/RhythmQuantizer.d.ts.map +1 -0
- package/dist/core/analysis/beat/RhythmicBalancer.d.ts +262 -0
- package/dist/core/analysis/beat/RhythmicBalancer.d.ts.map +1 -0
- package/dist/core/analysis/beat/StreamScorer.d.ts +275 -0
- package/dist/core/analysis/beat/StreamScorer.d.ts.map +1 -0
- package/dist/core/analysis/beat/TempoAwareQuantizer.d.ts +256 -0
- package/dist/core/analysis/beat/TempoAwareQuantizer.d.ts.map +1 -0
- package/dist/core/analysis/beat/TempoDetector.d.ts +220 -0
- package/dist/core/analysis/beat/TempoDetector.d.ts.map +1 -0
- package/dist/core/analysis/beat/TransientDetector.d.ts +303 -0
- package/dist/core/analysis/beat/TransientDetector.d.ts.map +1 -0
- package/dist/core/analysis/beat/beatKeyHelpers.d.ts +180 -0
- package/dist/core/analysis/beat/beatKeyHelpers.d.ts.map +1 -0
- package/dist/core/analysis/beat/index.d.ts +41 -0
- package/dist/core/analysis/beat/index.d.ts.map +1 -0
- package/dist/core/analysis/beat/utils/audioUtils.d.ts +204 -0
- package/dist/core/analysis/beat/utils/audioUtils.d.ts.map +1 -0
- package/dist/core/analysis/beat/utils/beatInterpolationDebug.d.ts +404 -0
- package/dist/core/analysis/beat/utils/beatInterpolationDebug.d.ts.map +1 -0
- package/dist/core/analysis/beat/utils/subdivideBeatMap.d.ts +61 -0
- package/dist/core/analysis/beat/utils/subdivideBeatMap.d.ts.map +1 -0
- package/dist/core/analysis/beat/utils/unifyBeatMap.d.ts +33 -0
- package/dist/core/analysis/beat/utils/unifyBeatMap.d.ts.map +1 -0
- package/dist/core/analysis/index.d.ts +18 -0
- package/dist/core/analysis/index.d.ts.map +1 -0
- package/dist/core/combat/AI/AICombatRunner.d.ts +108 -0
- package/dist/core/combat/AI/AICombatRunner.d.ts.map +1 -0
- package/dist/core/combat/AI/CombatAI.d.ts +179 -0
- package/dist/core/combat/AI/CombatAI.d.ts.map +1 -0
- package/dist/core/combat/AI/CombatMetricsTracker.d.ts +30 -0
- package/dist/core/combat/AI/CombatMetricsTracker.d.ts.map +1 -0
- package/dist/core/combat/Analysis/BalanceValidator.d.ts +170 -0
- package/dist/core/combat/Analysis/BalanceValidator.d.ts.map +1 -0
- package/dist/core/combat/Analysis/ComparativeAnalyzer.d.ts +231 -0
- package/dist/core/combat/Analysis/ComparativeAnalyzer.d.ts.map +1 -0
- package/dist/core/combat/Analysis/DifficultyCalculator.d.ts +203 -0
- package/dist/core/combat/Analysis/DifficultyCalculator.d.ts.map +1 -0
- package/dist/core/combat/Analysis/ParameterSweep.d.ts +201 -0
- package/dist/core/combat/Analysis/ParameterSweep.d.ts.map +1 -0
- package/dist/core/combat/AttackResolver.d.ts +220 -0
- package/dist/core/combat/AttackResolver.d.ts.map +1 -0
- package/dist/core/combat/CombatEngine.d.ts +388 -0
- package/dist/core/combat/CombatEngine.d.ts.map +1 -0
- package/dist/core/combat/DiceRoller.d.ts +115 -0
- package/dist/core/combat/DiceRoller.d.ts.map +1 -0
- package/dist/core/combat/InitiativeRoller.d.ts +62 -0
- package/dist/core/combat/InitiativeRoller.d.ts.map +1 -0
- package/dist/core/combat/PartyAnalyzer.d.ts +215 -0
- package/dist/core/combat/PartyAnalyzer.d.ts.map +1 -0
- package/dist/core/combat/SeededDiceRoller.d.ts +120 -0
- package/dist/core/combat/SeededDiceRoller.d.ts.map +1 -0
- package/dist/core/combat/Simulation/CombatSimulator.d.ts +366 -0
- package/dist/core/combat/Simulation/CombatSimulator.d.ts.map +1 -0
- package/dist/core/combat/SpellCaster.d.ts +113 -0
- package/dist/core/combat/SpellCaster.d.ts.map +1 -0
- package/dist/core/config/index.d.ts +24 -0
- package/dist/core/config/index.d.ts.map +1 -0
- package/dist/core/config/progressionConfig.d.ts +73 -0
- package/dist/core/config/progressionConfig.d.ts.map +1 -0
- package/dist/core/config/sensorConfig.d.ts +134 -0
- package/dist/core/config/sensorConfig.d.ts.map +1 -0
- package/dist/core/equipment/BoxOpener.d.ts +175 -0
- package/dist/core/equipment/BoxOpener.d.ts.map +1 -0
- package/dist/core/equipment/EquipmentEffectApplier.d.ts +189 -0
- package/dist/core/equipment/EquipmentEffectApplier.d.ts.map +1 -0
- package/dist/core/equipment/EquipmentModifier.d.ts +327 -0
- package/dist/core/equipment/EquipmentModifier.d.ts.map +1 -0
- package/dist/core/equipment/EquipmentSpawnHelper.d.ts +246 -0
- package/dist/core/equipment/EquipmentSpawnHelper.d.ts.map +1 -0
- package/dist/core/equipment/EquipmentValidator.d.ts +173 -0
- package/dist/core/equipment/EquipmentValidator.d.ts.map +1 -0
- package/dist/core/extensions/ExtensionManager.d.ts +517 -0
- package/dist/core/extensions/ExtensionManager.d.ts.map +1 -0
- package/dist/core/extensions/WeightedSelector.d.ts +156 -0
- package/dist/core/extensions/WeightedSelector.d.ts.map +1 -0
- package/dist/core/extensions/index.d.ts +11 -0
- package/dist/core/extensions/index.d.ts.map +1 -0
- package/dist/core/extensions/initializeDefaults.d.ts +170 -0
- package/dist/core/extensions/initializeDefaults.d.ts.map +1 -0
- package/dist/core/features/FeatureEffectApplier.d.ts +102 -0
- package/dist/core/features/FeatureEffectApplier.d.ts.map +1 -0
- package/dist/core/features/FeatureQuery.d.ts +368 -0
- package/dist/core/features/FeatureQuery.d.ts.map +1 -0
- package/dist/core/features/FeatureTypes.d.ts +199 -0
- package/dist/core/features/FeatureTypes.d.ts.map +1 -0
- package/dist/core/features/FeatureValidator.d.ts +149 -0
- package/dist/core/features/FeatureValidator.d.ts.map +1 -0
- package/dist/core/features/index.d.ts +12 -0
- package/dist/core/features/index.d.ts.map +1 -0
- package/dist/core/generation/AbilityScoreCalculator.d.ts +83 -0
- package/dist/core/generation/AbilityScoreCalculator.d.ts.map +1 -0
- package/dist/core/generation/AppearanceGenerator.d.ts +32 -0
- package/dist/core/generation/AppearanceGenerator.d.ts.map +1 -0
- package/dist/core/generation/BeatConverter.d.ts +127 -0
- package/dist/core/generation/BeatConverter.d.ts.map +1 -0
- package/dist/core/generation/ButtonMapper.d.ts +346 -0
- package/dist/core/generation/ButtonMapper.d.ts.map +1 -0
- package/dist/core/generation/ButtonPatternLibrary.d.ts +92 -0
- package/dist/core/generation/ButtonPatternLibrary.d.ts.map +1 -0
- package/dist/core/generation/CRLevelConverter.d.ts +242 -0
- package/dist/core/generation/CRLevelConverter.d.ts.map +1 -0
- package/dist/core/generation/CharacterGenerator.d.ts +194 -0
- package/dist/core/generation/CharacterGenerator.d.ts.map +1 -0
- package/dist/core/generation/ClassSuggester.d.ts +184 -0
- package/dist/core/generation/ClassSuggester.d.ts.map +1 -0
- package/dist/core/generation/EnemyEquipmentGenerator.d.ts +151 -0
- package/dist/core/generation/EnemyEquipmentGenerator.d.ts.map +1 -0
- package/dist/core/generation/EnemyGenerator.d.ts +595 -0
- package/dist/core/generation/EnemyGenerator.d.ts.map +1 -0
- package/dist/core/generation/EquipmentGenerator.d.ts +204 -0
- package/dist/core/generation/EquipmentGenerator.d.ts.map +1 -0
- package/dist/core/generation/LegendaryGenerator.d.ts +213 -0
- package/dist/core/generation/LegendaryGenerator.d.ts.map +1 -0
- package/dist/core/generation/LevelGenerator.d.ts +390 -0
- package/dist/core/generation/LevelGenerator.d.ts.map +1 -0
- package/dist/core/generation/NamingEngine.d.ts +136 -0
- package/dist/core/generation/NamingEngine.d.ts.map +1 -0
- package/dist/core/generation/PitchBeatLinker.d.ts +150 -0
- package/dist/core/generation/PitchBeatLinker.d.ts.map +1 -0
- package/dist/core/generation/RaceSelector.d.ts +58 -0
- package/dist/core/generation/RaceSelector.d.ts.map +1 -0
- package/dist/core/generation/RhythmGenerator.d.ts +597 -0
- package/dist/core/generation/RhythmGenerator.d.ts.map +1 -0
- package/dist/core/generation/SkillAssigner.d.ts +78 -0
- package/dist/core/generation/SkillAssigner.d.ts.map +1 -0
- package/dist/core/generation/SpellManager.d.ts +132 -0
- package/dist/core/generation/SpellManager.d.ts.map +1 -0
- package/dist/core/generation/SpellcastingGenerator.d.ts +255 -0
- package/dist/core/generation/SpellcastingGenerator.d.ts.map +1 -0
- package/dist/core/generation/index.d.ts +41 -0
- package/dist/core/generation/index.d.ts.map +1 -0
- package/dist/core/parser/MetadataExtractor.d.ts +66 -0
- package/dist/core/parser/MetadataExtractor.d.ts.map +1 -0
- package/dist/core/parser/PlaylistParser.d.ts +45 -0
- package/dist/core/parser/PlaylistParser.d.ts.map +1 -0
- package/dist/core/playback/SubdivisionPlaybackController.d.ts +333 -0
- package/dist/core/playback/SubdivisionPlaybackController.d.ts.map +1 -0
- package/dist/core/playback/index.d.ts +5 -0
- package/dist/core/playback/index.d.ts.map +1 -0
- package/dist/core/progression/CharacterUpdater.d.ts +203 -0
- package/dist/core/progression/CharacterUpdater.d.ts.map +1 -0
- package/dist/core/progression/LevelUpProcessor.d.ts +234 -0
- package/dist/core/progression/LevelUpProcessor.d.ts.map +1 -0
- package/dist/core/progression/PrestigeSystem.d.ts +217 -0
- package/dist/core/progression/PrestigeSystem.d.ts.map +1 -0
- package/dist/core/progression/RhythmXPCalculator.d.ts +182 -0
- package/dist/core/progression/RhythmXPCalculator.d.ts.map +1 -0
- package/dist/core/progression/SessionTracker.d.ts +169 -0
- package/dist/core/progression/SessionTracker.d.ts.map +1 -0
- package/dist/core/progression/XPCalculator.d.ts +128 -0
- package/dist/core/progression/XPCalculator.d.ts.map +1 -0
- package/dist/core/progression/stat/StatIncreaseStrategy.d.ts +97 -0
- package/dist/core/progression/stat/StatIncreaseStrategy.d.ts.map +1 -0
- package/dist/core/progression/stat/StatManager.d.ts +179 -0
- package/dist/core/progression/stat/StatManager.d.ts.map +1 -0
- package/dist/core/sensors/EnvironmentalSensors.d.ts +301 -0
- package/dist/core/sensors/EnvironmentalSensors.d.ts.map +1 -0
- package/dist/core/sensors/GamingPlatformSensors.d.ts +162 -0
- package/dist/core/sensors/GamingPlatformSensors.d.ts.map +1 -0
- package/dist/core/sensors/GeolocationProvider.d.ts +156 -0
- package/dist/core/sensors/GeolocationProvider.d.ts.map +1 -0
- package/dist/core/sensors/MotionDetector.d.ts +58 -0
- package/dist/core/sensors/MotionDetector.d.ts.map +1 -0
- package/dist/core/sensors/SteamAPIClient.d.ts +108 -0
- package/dist/core/sensors/SteamAPIClient.d.ts.map +1 -0
- package/dist/core/sensors/WeatherAPIClient.d.ts +360 -0
- package/dist/core/sensors/WeatherAPIClient.d.ts.map +1 -0
- package/dist/core/sensors/schemas/weather.schema.d.ts +144 -0
- package/dist/core/sensors/schemas/weather.schema.d.ts.map +1 -0
- package/dist/core/skills/SkillQuery.d.ts +159 -0
- package/dist/core/skills/SkillQuery.d.ts.map +1 -0
- package/dist/core/skills/SkillTypes.d.ts +233 -0
- package/dist/core/skills/SkillTypes.d.ts.map +1 -0
- package/dist/core/skills/SkillValidator.d.ts +146 -0
- package/dist/core/skills/SkillValidator.d.ts.map +1 -0
- package/dist/core/skills/index.d.ts +11 -0
- package/dist/core/skills/index.d.ts.map +1 -0
- package/dist/core/spells/SpellQuery.d.ts +194 -0
- package/dist/core/spells/SpellQuery.d.ts.map +1 -0
- package/dist/core/spells/SpellTypes.d.ts +71 -0
- package/dist/core/spells/SpellTypes.d.ts.map +1 -0
- package/dist/core/spells/SpellValidator.d.ts +129 -0
- package/dist/core/spells/SpellValidator.d.ts.map +1 -0
- package/dist/core/spells/index.d.ts +11 -0
- package/dist/core/spells/index.d.ts.map +1 -0
- package/dist/core/types/AudioProfile.d.ts +143 -0
- package/dist/core/types/AudioProfile.d.ts.map +1 -0
- package/dist/core/types/BeatMap.d.ts +1825 -0
- package/dist/core/types/BeatMap.d.ts.map +1 -0
- package/dist/core/types/ButtonMapping.d.ts +345 -0
- package/dist/core/types/ButtonMapping.d.ts.map +1 -0
- package/dist/core/types/Character.d.ts +397 -0
- package/dist/core/types/Character.d.ts.map +1 -0
- package/dist/core/types/ChartedBeatMap.d.ts +169 -0
- package/dist/core/types/ChartedBeatMap.d.ts.map +1 -0
- package/dist/core/types/Combat.d.ts +268 -0
- package/dist/core/types/Combat.d.ts.map +1 -0
- package/dist/core/types/CombatAI.d.ts +143 -0
- package/dist/core/types/CombatAI.d.ts.map +1 -0
- package/dist/core/types/Enemy.d.ts +447 -0
- package/dist/core/types/Enemy.d.ts.map +1 -0
- package/dist/core/types/Environmental.d.ts +213 -0
- package/dist/core/types/Environmental.d.ts.map +1 -0
- package/dist/core/types/Equipment.d.ts +309 -0
- package/dist/core/types/Equipment.d.ts.map +1 -0
- package/dist/core/types/ISessionTracker.d.ts +48 -0
- package/dist/core/types/ISessionTracker.d.ts.map +1 -0
- package/dist/core/types/LevelExport.d.ts +366 -0
- package/dist/core/types/LevelExport.d.ts.map +1 -0
- package/dist/core/types/Playlist.d.ts +70 -0
- package/dist/core/types/Playlist.d.ts.map +1 -0
- package/dist/core/types/Prestige.d.ts +94 -0
- package/dist/core/types/Prestige.d.ts.map +1 -0
- package/dist/core/types/Progression.d.ts +214 -0
- package/dist/core/types/Progression.d.ts.map +1 -0
- package/dist/core/types/RhythmXP.d.ts +398 -0
- package/dist/core/types/RhythmXP.d.ts.map +1 -0
- package/dist/core/utils/AbilityConstants.d.ts +31 -0
- package/dist/core/utils/AbilityConstants.d.ts.map +1 -0
- package/dist/core/utils/EffectApplierUtils.d.ts +56 -0
- package/dist/core/utils/EffectApplierUtils.d.ts.map +1 -0
- package/dist/core/utils/ImageValidator.d.ts +66 -0
- package/dist/core/utils/ImageValidator.d.ts.map +1 -0
- package/dist/core/utils/PrerequisiteValidator.d.ts +88 -0
- package/dist/core/utils/PrerequisiteValidator.d.ts.map +1 -0
- package/dist/essentia-wasm.es-BUEnKUts.js +2990 -0
- package/dist/essentia.js-model.es-CGA0xotH.js +306 -0
- package/dist/index.d.ts +176 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/playlist-data-engine.js +124 -0
- package/dist/playlist-data-engine.mjs +49251 -0
- package/dist/utils/EnchantmentLibrary.d.ts +378 -0
- package/dist/utils/EnchantmentLibrary.d.ts.map +1 -0
- package/dist/utils/arweaveGatewayManager.d.ts +485 -0
- package/dist/utils/arweaveGatewayManager.d.ts.map +1 -0
- package/dist/utils/arweaveUtils.d.ts +118 -0
- package/dist/utils/arweaveUtils.d.ts.map +1 -0
- package/dist/utils/constants.d.ts +439 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/equipmentConstants.d.ts +60 -0
- package/dist/utils/equipmentConstants.d.ts.map +1 -0
- package/dist/utils/hash.d.ts +33 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +192 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/magicItemExamples.d.ts +46 -0
- package/dist/utils/magicItemExamples.d.ts.map +1 -0
- package/dist/utils/playlistUtils.d.ts +149 -0
- package/dist/utils/playlistUtils.d.ts.map +1 -0
- package/dist/utils/random.d.ts +34 -0
- package/dist/utils/random.d.ts.map +1 -0
- package/dist/utils/sensorDashboard.d.ts +60 -0
- package/dist/utils/sensorDashboard.d.ts.map +1 -0
- package/dist/utils/validators.d.ts +189 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/vite.svg +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composite Stream Generator for Procedural Rhythm Generation
|
|
3
|
+
*
|
|
4
|
+
* Creates a single composite stream by slicing together the highest-scoring sections
|
|
5
|
+
* from each band stream.
|
|
6
|
+
*
|
|
7
|
+
* Part of the Procedural Rhythm Generation pipeline - Phase 3.2
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // Basic usage - generate composite from scored streams
|
|
12
|
+
* const generator = new CompositeStreamGenerator();
|
|
13
|
+
* const composite = generator.generate(quantizedBandStreams, scoringResult, densityAnalysis);
|
|
14
|
+
*
|
|
15
|
+
* // Access the composite beats
|
|
16
|
+
* console.log(`Total beats: ${composite.beats.length}`);
|
|
17
|
+
* console.log(`Natural difficulty: ${composite.naturalDifficulty}`);
|
|
18
|
+
*
|
|
19
|
+
* // Check which band contributed to each section
|
|
20
|
+
* for (const section of composite.sections) {
|
|
21
|
+
* console.log(`Beats ${section.beatRange.start}-${section.beatRange.end}: ${section.sourceBand}`);
|
|
22
|
+
* console.log(` Score: ${section.score.toFixed(2)}, margin: ${section.margin.toFixed(2)}`);
|
|
23
|
+
* }
|
|
24
|
+
*
|
|
25
|
+
* // Check band contribution statistics
|
|
26
|
+
* console.log('Beats per band:', composite.metadata.beatsPerBand);
|
|
27
|
+
* console.log('Sections per band:', composite.metadata.sectionsPerBand);
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
import type { GeneratedBeat, QuantizedBandStreams } from './RhythmQuantizer.js';
|
|
31
|
+
import type { StreamScoringResult, Band } from './StreamScorer.js';
|
|
32
|
+
import type { DensityAnalysisResult, NaturalDifficulty } from './DensityAnalyzer.js';
|
|
33
|
+
/**
|
|
34
|
+
* A section of the composite stream contributed by a single band
|
|
35
|
+
*/
|
|
36
|
+
export interface CompositeSection {
|
|
37
|
+
/** Beat range for this section */
|
|
38
|
+
beatRange: {
|
|
39
|
+
start: number;
|
|
40
|
+
end: number;
|
|
41
|
+
};
|
|
42
|
+
/** Which band contributed this section */
|
|
43
|
+
sourceBand: Band;
|
|
44
|
+
/** The winning score for this section */
|
|
45
|
+
score: number;
|
|
46
|
+
/** Margin of victory over the runner-up band */
|
|
47
|
+
margin: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* A beat in the composite stream with additional metadata about its source
|
|
51
|
+
*/
|
|
52
|
+
export interface CompositeBeat extends GeneratedBeat {
|
|
53
|
+
/** Which band this beat originated from */
|
|
54
|
+
sourceBand: Band;
|
|
55
|
+
/**
|
|
56
|
+
* What action the RhythmicBalancer took on this beat, if any.
|
|
57
|
+
* undefined = balancer did not modify this beat.
|
|
58
|
+
* Set during the balance() step.
|
|
59
|
+
*/
|
|
60
|
+
balancerAction?: 'shifted_to_downbeat' | 'empty_measure_fill' | 'proximity_shift';
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Complete composite stream result
|
|
64
|
+
*/
|
|
65
|
+
export interface CompositeStream {
|
|
66
|
+
/** The composite beat stream (all beats combined from winning sections) */
|
|
67
|
+
beats: CompositeBeat[];
|
|
68
|
+
/** Sections showing which band contributed to each part */
|
|
69
|
+
sections: CompositeSection[];
|
|
70
|
+
/** Natural difficulty determined by density analysis of the composite */
|
|
71
|
+
naturalDifficulty: NaturalDifficulty;
|
|
72
|
+
/** Duration of a quarter note in seconds (derived from beat map) */
|
|
73
|
+
quarterNoteInterval: number;
|
|
74
|
+
/** Metadata about the composite generation */
|
|
75
|
+
metadata: {
|
|
76
|
+
/** Total number of beats in the composite */
|
|
77
|
+
totalBeats: number;
|
|
78
|
+
/** Number of sections */
|
|
79
|
+
sectionCount: number;
|
|
80
|
+
/** Count of beats contributed by each band */
|
|
81
|
+
beatsPerBand: {
|
|
82
|
+
low: number;
|
|
83
|
+
mid: number;
|
|
84
|
+
high: number;
|
|
85
|
+
};
|
|
86
|
+
/** Percentage of sections won by each band */
|
|
87
|
+
sectionsPerBand: {
|
|
88
|
+
low: number;
|
|
89
|
+
mid: number;
|
|
90
|
+
high: number;
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Configuration for composite stream generation
|
|
96
|
+
*/
|
|
97
|
+
export interface CompositeStreamConfig {
|
|
98
|
+
/** Number of beats to overlap at section boundaries for smooth transitions.
|
|
99
|
+
* Default: 0 (no overlap, immediate transition) */
|
|
100
|
+
transitionOverlapBeats: number;
|
|
101
|
+
/** Whether to preserve the original grid decisions at section boundaries.
|
|
102
|
+
* If true, maintains the grid type from the winning band's stream.
|
|
103
|
+
* Default: true */
|
|
104
|
+
preserveGridDecisions: boolean;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Creates a composite rhythm stream by combining the highest-scoring sections
|
|
108
|
+
* from each frequency band.
|
|
109
|
+
*
|
|
110
|
+
* ## Algorithm Overview
|
|
111
|
+
*
|
|
112
|
+
* 1. **Section Selection**: For each section, select the band with the highest
|
|
113
|
+
* interest score (determined by StreamScorer).
|
|
114
|
+
*
|
|
115
|
+
* 2. **Beat Extraction**: Extract all beats from the winning band's stream
|
|
116
|
+
* for each section's beat range.
|
|
117
|
+
*
|
|
118
|
+
* 3. **Stream Assembly**: Combine all extracted beats into a single composite
|
|
119
|
+
* stream, maintaining temporal order.
|
|
120
|
+
*
|
|
121
|
+
* 4. **Natural Difficulty**: Determine the composite's natural difficulty based
|
|
122
|
+
* on the density of the combined stream.
|
|
123
|
+
*
|
|
124
|
+
* ## Usage
|
|
125
|
+
*
|
|
126
|
+
* ```typescript
|
|
127
|
+
* const generator = new CompositeStreamGenerator();
|
|
128
|
+
* const composite = generator.generate(quantizedStreams, scoringResult, densityAnalysis);
|
|
129
|
+
*
|
|
130
|
+
* // Access the composite beat stream
|
|
131
|
+
* const beats = composite.beats;
|
|
132
|
+
*
|
|
133
|
+
* // See which band contributed each section
|
|
134
|
+
* for (const section of composite.sections) {
|
|
135
|
+
* console.log(`Beats ${section.beatRange.start}-${section.beatRange.end}: ${section.sourceBand}`);
|
|
136
|
+
* }
|
|
137
|
+
*
|
|
138
|
+
* // Get the natural difficulty
|
|
139
|
+
* console.log('Natural difficulty:', composite.naturalDifficulty);
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
export declare class CompositeStreamGenerator {
|
|
143
|
+
private config;
|
|
144
|
+
constructor(config?: Partial<CompositeStreamConfig>);
|
|
145
|
+
/**
|
|
146
|
+
* Generate a composite stream from quantized band streams and scoring results
|
|
147
|
+
*
|
|
148
|
+
* @param streams - Quantized band streams from RhythmQuantizer
|
|
149
|
+
* @param scoringResult - Scoring result from StreamScorer
|
|
150
|
+
* @param densityAnalysis - Density analysis from DensityAnalyzer
|
|
151
|
+
* @returns Composite stream with sections and metadata
|
|
152
|
+
*/
|
|
153
|
+
generate(streams: QuantizedBandStreams, scoringResult: StreamScoringResult, densityAnalysis: DensityAnalysisResult, trackDurationSeconds?: number): CompositeStream;
|
|
154
|
+
/**
|
|
155
|
+
* Extract beats from a band stream for a specific beat range
|
|
156
|
+
*/
|
|
157
|
+
private extractSectionBeats;
|
|
158
|
+
/**
|
|
159
|
+
* Remove duplicate beats (same timestamp) keeping the one with highest intensity
|
|
160
|
+
*/
|
|
161
|
+
private deduplicateBeats;
|
|
162
|
+
/**
|
|
163
|
+
* Determine the natural difficulty of the composite stream
|
|
164
|
+
*
|
|
165
|
+
* Calculates density based on the merged composite beats (what the player actually hits)
|
|
166
|
+
* rather than the multi-band density (which counts overlapping beats multiple times).
|
|
167
|
+
*
|
|
168
|
+
* Density is measured in notes per second, which accounts for tempo.
|
|
169
|
+
* A 120 BPM track with 2 notes/beat = 4 notes/sec feels much easier than
|
|
170
|
+
* a 180 BPM track with 2 notes/beat = 6 notes/sec.
|
|
171
|
+
*
|
|
172
|
+
* This gives a more accurate representation of gameplay difficulty.
|
|
173
|
+
*/
|
|
174
|
+
private determineNaturalDifficulty;
|
|
175
|
+
/**
|
|
176
|
+
* Get the current configuration
|
|
177
|
+
*/
|
|
178
|
+
getConfig(): CompositeStreamConfig;
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=CompositeStreamGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompositeStreamGenerator.d.ts","sourceRoot":"","sources":["../../../../src/core/analysis/beat/CompositeStreamGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAsB,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,KAAK,EAAE,mBAAmB,EAAiB,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAMrF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,kCAAkC;IAClC,SAAS,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;KACf,CAAC;IAEF,0CAA0C;IAC1C,UAAU,EAAE,IAAI,CAAC;IAEjB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IAEd,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,aAAa;IAChD,2CAA2C;IAC3C,UAAU,EAAE,IAAI,CAAC;IAEjB;;;;OAIG;IACH,cAAc,CAAC,EAAE,qBAAqB,GAAG,oBAAoB,GAAG,iBAAiB,CAAC;CACrF;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,2EAA2E;IAC3E,KAAK,EAAE,aAAa,EAAE,CAAC;IAEvB,2DAA2D;IAC3D,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAE7B,yEAAyE;IACzE,iBAAiB,EAAE,iBAAiB,CAAC;IAErC,oEAAoE;IACpE,mBAAmB,EAAE,MAAM,CAAC;IAE5B,8CAA8C;IAC9C,QAAQ,EAAE;QACN,6CAA6C;QAC7C,UAAU,EAAE,MAAM,CAAC;QAEnB,yBAAyB;QACzB,YAAY,EAAE,MAAM,CAAC;QAErB,8CAA8C;QAC9C,YAAY,EAAE;YACV,GAAG,EAAE,MAAM,CAAC;YACZ,GAAG,EAAE,MAAM,CAAC;YACZ,IAAI,EAAE,MAAM,CAAC;SAChB,CAAC;QAEF,8CAA8C;QAC9C,eAAe,EAAE;YACb,GAAG,EAAE,MAAM,CAAC;YACZ,GAAG,EAAE,MAAM,CAAC;YACZ,IAAI,EAAE,MAAM,CAAC;SAChB,CAAC;KACL,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC;wDACoD;IACpD,sBAAsB,EAAE,MAAM,CAAC;IAE/B;;wBAEoB;IACpB,qBAAqB,EAAE,OAAO,CAAC;CAClC;AA0BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAAa,wBAAwB;IACjC,OAAO,CAAC,MAAM,CAAwB;gBAE1B,MAAM,GAAE,OAAO,CAAC,qBAAqB,CAAM;IAIvD;;;;;;;OAOG;IACH,QAAQ,CACJ,OAAO,EAAE,oBAAoB,EAC7B,aAAa,EAAE,mBAAmB,EAClC,eAAe,EAAE,qBAAqB,EACtC,oBAAoB,CAAC,EAAE,MAAM,GAC9B,eAAe;IAyFlB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,0BAA0B;IAiClC;;OAEG;IACH,SAAS,IAAI,qBAAqB;CAGrC"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Density Analyzer for Procedural Rhythm Generation
|
|
3
|
+
*
|
|
4
|
+
* Analyzes quantized rhythm streams to measure density (in notes per second)
|
|
5
|
+
* and determine natural difficulty.
|
|
6
|
+
*
|
|
7
|
+
* Part of the Procedural Rhythm Generation pipeline - Phase 2.2
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // Basic usage - analyze density of quantized streams
|
|
12
|
+
* const analyzer = new DensityAnalyzer();
|
|
13
|
+
* const result = analyzer.analyze(quantizedBandStreams, 120);
|
|
14
|
+
*
|
|
15
|
+
* // Check combined metrics for overall density
|
|
16
|
+
* console.log(`Combined density: ${result.combinedMetrics.notesPerSecond.toFixed(2)} notes/sec`);
|
|
17
|
+
* console.log(`Natural difficulty: ${result.combinedMetrics.naturalDifficulty}`);
|
|
18
|
+
*
|
|
19
|
+
* // Access per-band metrics
|
|
20
|
+
* for (const [band, metrics] of Object.entries(result.bandMetrics)) {
|
|
21
|
+
* console.log(`${band}: ${metrics.densityCategory} (${metrics.notesPerSecond.toFixed(2)} n/s)`);
|
|
22
|
+
* }
|
|
23
|
+
*
|
|
24
|
+
* // Check section-level density for dynamic difficulty
|
|
25
|
+
* for (const section of result.sections) {
|
|
26
|
+
* console.log(`Beats ${section.startBeat}-${section.endBeat}: ${section.densityCategory}`);
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
import type { QuantizedBandStreams } from './RhythmQuantizer.js';
|
|
31
|
+
/**
|
|
32
|
+
* Density category for a stream
|
|
33
|
+
*/
|
|
34
|
+
export type DensityCategory = 'sparse' | 'moderate' | 'dense';
|
|
35
|
+
/**
|
|
36
|
+
* Natural difficulty based on density
|
|
37
|
+
*/
|
|
38
|
+
export type NaturalDifficulty = 'easy' | 'medium' | 'hard';
|
|
39
|
+
/**
|
|
40
|
+
* Density metrics for a single beat
|
|
41
|
+
*/
|
|
42
|
+
export interface BeatDensityMetrics {
|
|
43
|
+
/** Beat index in the UnifiedBeatMap */
|
|
44
|
+
beatIndex: number;
|
|
45
|
+
/** Number of transients in this beat */
|
|
46
|
+
transientCount: number;
|
|
47
|
+
/** Which band(s) contributed to this beat */
|
|
48
|
+
bands: ('low' | 'mid' | 'high')[];
|
|
49
|
+
/** Average intensity of transients in this beat */
|
|
50
|
+
averageIntensity: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Density metrics for a section (multiple beats)
|
|
54
|
+
*/
|
|
55
|
+
export interface SectionDensityMetrics {
|
|
56
|
+
/** Starting beat index (inclusive) */
|
|
57
|
+
startBeat: number;
|
|
58
|
+
/** Ending beat index (inclusive) */
|
|
59
|
+
endBeat: number;
|
|
60
|
+
/** Number of beats in this section */
|
|
61
|
+
beatCount: number;
|
|
62
|
+
/** Total transients in this section */
|
|
63
|
+
totalTransients: number;
|
|
64
|
+
/** Average notes per second in this section */
|
|
65
|
+
notesPerSecond: number;
|
|
66
|
+
/** Minimum notes per second in any single beat of this section */
|
|
67
|
+
minNotesPerSecond: number;
|
|
68
|
+
/** Maximum notes per second in any single beat of this section */
|
|
69
|
+
maxNotesPerSecond: number;
|
|
70
|
+
/** Density category for this section */
|
|
71
|
+
densityCategory: DensityCategory;
|
|
72
|
+
/** Natural difficulty for this section */
|
|
73
|
+
naturalDifficulty: NaturalDifficulty;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Density metrics for a single band stream
|
|
77
|
+
*/
|
|
78
|
+
export interface BandDensityMetrics {
|
|
79
|
+
/** Band name */
|
|
80
|
+
band: 'low' | 'mid' | 'high';
|
|
81
|
+
/** Total number of beats in the stream */
|
|
82
|
+
totalBeats: number;
|
|
83
|
+
/** Total transients across all beats */
|
|
84
|
+
totalTransients: number;
|
|
85
|
+
/** Average notes per second */
|
|
86
|
+
notesPerSecond: number;
|
|
87
|
+
/** Minimum notes per second in any single beat */
|
|
88
|
+
minNotesPerSecond: number;
|
|
89
|
+
/** Maximum notes per second in any single beat */
|
|
90
|
+
maxNotesPerSecond: number;
|
|
91
|
+
/** Variance in notes per second */
|
|
92
|
+
variance: number;
|
|
93
|
+
/** Density category */
|
|
94
|
+
densityCategory: DensityCategory;
|
|
95
|
+
/** Natural difficulty */
|
|
96
|
+
naturalDifficulty: NaturalDifficulty;
|
|
97
|
+
/** Per-beat density breakdown */
|
|
98
|
+
perBeatDensity: BeatDensityMetrics[];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Complete density analysis result for all bands
|
|
102
|
+
*/
|
|
103
|
+
export interface DensityAnalysisResult {
|
|
104
|
+
/** Per-band density metrics */
|
|
105
|
+
bandMetrics: {
|
|
106
|
+
low: BandDensityMetrics;
|
|
107
|
+
mid: BandDensityMetrics;
|
|
108
|
+
high: BandDensityMetrics;
|
|
109
|
+
};
|
|
110
|
+
/** Combined density across all bands */
|
|
111
|
+
combinedMetrics: {
|
|
112
|
+
/** Total transients across all bands */
|
|
113
|
+
totalTransients: number;
|
|
114
|
+
/** Average notes per second (across all bands) */
|
|
115
|
+
notesPerSecond: number;
|
|
116
|
+
/** Overall density category */
|
|
117
|
+
densityCategory: DensityCategory;
|
|
118
|
+
/** Overall natural difficulty */
|
|
119
|
+
naturalDifficulty: NaturalDifficulty;
|
|
120
|
+
};
|
|
121
|
+
/** Section-based density analysis (2-measure sections = 8 beats) */
|
|
122
|
+
sections: SectionDensityMetrics[];
|
|
123
|
+
/** Per-beat density for all bands combined */
|
|
124
|
+
perBeatDensity: BeatDensityMetrics[];
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Configuration for density analysis
|
|
128
|
+
*/
|
|
129
|
+
export interface DensityAnalyzerConfig {
|
|
130
|
+
/** Number of beats per section for section analysis. Default: 8 (2 measures in 4/4 time) */
|
|
131
|
+
beatsPerSection: number;
|
|
132
|
+
/** Threshold for sparse density (notes per second below this = sparse). Default: 1.0 */
|
|
133
|
+
sparseThreshold: number;
|
|
134
|
+
/** Threshold for dense density (notes per second above this = dense). Default: 1.5 */
|
|
135
|
+
denseThreshold: number;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Notes per second thresholds for density categorization
|
|
139
|
+
*
|
|
140
|
+
* Sparse: < 1.0 notes/sec (mostly quarter notes at moderate tempo)
|
|
141
|
+
* Moderate: 1.0 - 1.5 notes/sec (eighth notes, some sixteenths)
|
|
142
|
+
* Dense: > 1.5 notes/sec (heavy sixteenth notes, triplets)
|
|
143
|
+
*/
|
|
144
|
+
/**
|
|
145
|
+
* Analyzes quantized rhythm streams for density and natural difficulty.
|
|
146
|
+
*
|
|
147
|
+
* Density is measured in notes per second (n/s), which accounts for BPM.
|
|
148
|
+
* A 120 BPM track with 2 notes/beat = 4 notes/sec feels much easier than
|
|
149
|
+
* a 180 BPM track with 2 notes/beat = 6 notes/sec.
|
|
150
|
+
*
|
|
151
|
+
* ## Algorithm Overview
|
|
152
|
+
*
|
|
153
|
+
* 1. **Per-Beat Density Calculation**:
|
|
154
|
+
* - Count transients in each beat across all bands
|
|
155
|
+
* - Track which bands contribute to each beat
|
|
156
|
+
*
|
|
157
|
+
* 2. **Notes/Second Conversion**:
|
|
158
|
+
* - Convert per-beat transient counts to notes/sec: `transientsPerBeat * (bpm / 60)`
|
|
159
|
+
*
|
|
160
|
+
* 3. **Density Categorization**:
|
|
161
|
+
* - Sparse: < 1.0 notes/sec (mostly quarter notes at moderate tempo)
|
|
162
|
+
* - Moderate: 1.0 - 1.5 notes/sec (eighth notes, some sixteenths)
|
|
163
|
+
* - Dense: > 1.5 notes/sec (heavy sixteenth notes, triplets)
|
|
164
|
+
*
|
|
165
|
+
* 4. **Natural Difficulty Determination**:
|
|
166
|
+
* - High density (dense) → Hard
|
|
167
|
+
* - Medium density (moderate) → Medium
|
|
168
|
+
* - Low density (sparse) → Easy
|
|
169
|
+
*
|
|
170
|
+
* 5. **Section Analysis**:
|
|
171
|
+
* - Divide track into sections (default: 8 beats = 2 measures)
|
|
172
|
+
* - Calculate density per section for granular analysis
|
|
173
|
+
*
|
|
174
|
+
* ## Usage
|
|
175
|
+
*
|
|
176
|
+
* ```typescript
|
|
177
|
+
* const analyzer = new DensityAnalyzer();
|
|
178
|
+
* const result = analyzer.analyze(quantizedStreams, 150);
|
|
179
|
+
*
|
|
180
|
+
* // Access per-band metrics
|
|
181
|
+
* const lowDensity = result.bandMetrics.low;
|
|
182
|
+
*
|
|
183
|
+
* // Get overall natural difficulty
|
|
184
|
+
* const difficulty = result.combinedMetrics.naturalDifficulty;
|
|
185
|
+
*
|
|
186
|
+
* // Access section-based analysis
|
|
187
|
+
* const sections = result.sections;
|
|
188
|
+
* ```
|
|
189
|
+
*/
|
|
190
|
+
export declare class DensityAnalyzer {
|
|
191
|
+
private config;
|
|
192
|
+
constructor(config?: Partial<DensityAnalyzerConfig>);
|
|
193
|
+
/**
|
|
194
|
+
* Analyze quantized band streams for density
|
|
195
|
+
*
|
|
196
|
+
* @param streams - Quantized band streams from RhythmQuantizer
|
|
197
|
+
* @param bpm - Tempo in beats per minute, used to convert to notes/second
|
|
198
|
+
* @returns Complete density analysis result
|
|
199
|
+
*/
|
|
200
|
+
analyze(streams: QuantizedBandStreams, bpm: number, trackDurationSeconds?: number): DensityAnalysisResult;
|
|
201
|
+
/**
|
|
202
|
+
* Analyze a single band for density metrics
|
|
203
|
+
*/
|
|
204
|
+
private analyzeBand;
|
|
205
|
+
/**
|
|
206
|
+
* Calculate combined per-beat density across all bands
|
|
207
|
+
*/
|
|
208
|
+
private calculateCombinedPerBeatDensity;
|
|
209
|
+
/**
|
|
210
|
+
* Helper to add beat data to the aggregation map
|
|
211
|
+
*/
|
|
212
|
+
private addToBeatData;
|
|
213
|
+
/**
|
|
214
|
+
* Calculate combined metrics from per-beat density
|
|
215
|
+
*/
|
|
216
|
+
private calculateCombinedMetrics;
|
|
217
|
+
/**
|
|
218
|
+
* Calculate section-based metrics
|
|
219
|
+
*/
|
|
220
|
+
private calculateSectionMetrics;
|
|
221
|
+
/**
|
|
222
|
+
* Categorize density based on notes per second
|
|
223
|
+
*
|
|
224
|
+
* Sparse: < sparseThreshold (mostly quarter notes at moderate tempo)
|
|
225
|
+
* Moderate: sparseThreshold - denseThreshold (eighth notes, some sixteenths)
|
|
226
|
+
* Dense: > denseThreshold (heavy sixteenth notes, triplets)
|
|
227
|
+
*/
|
|
228
|
+
categorizeDensity(notesPerSecond: number): DensityCategory;
|
|
229
|
+
/**
|
|
230
|
+
* Determine natural difficulty from density category
|
|
231
|
+
*
|
|
232
|
+
* High density (dense) → Hard
|
|
233
|
+
* Medium density (moderate) → Medium
|
|
234
|
+
* Low density (sparse) → Easy
|
|
235
|
+
*/
|
|
236
|
+
determineNaturalDifficulty(densityCategory: DensityCategory): NaturalDifficulty;
|
|
237
|
+
/**
|
|
238
|
+
* Calculate variance of an array of numbers
|
|
239
|
+
*/
|
|
240
|
+
private calculateVariance;
|
|
241
|
+
/**
|
|
242
|
+
* Get the current configuration
|
|
243
|
+
*/
|
|
244
|
+
getConfig(): DensityAnalyzerConfig;
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=DensityAnalyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DensityAnalyzer.d.ts","sourceRoot":"","sources":["../../../../src/core/analysis/beat/DensityAnalyzer.ts"],"names":[],"mappings":"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"}
|