diff options
Diffstat (limited to 'assets')
| -rw-r--r-- | assets/demo.seq | 215 | ||||
| -rw-r--r-- | assets/final/BASS_SYNTH_1.spec | bin | 32784 -> 32784 bytes | |||
| -rw-r--r-- | assets/final/shaders/gaussian_blur.wgsl | 7 | ||||
| -rw-r--r-- | assets/final/shaders/solarize.wgsl | 40 | ||||
| -rw-r--r-- | assets/music.track | 321 |
5 files changed, 442 insertions, 141 deletions
diff --git a/assets/demo.seq b/assets/demo.seq index 2c54dfb..fced9d6 100644 --- a/assets/demo.seq +++ b/assets/demo.seq @@ -1,10 +1,207 @@ -SEQUENCE 0.0 0 - EFFECT HeptagonEffect 0.0 60.0 0 - EFFECT ParticlesEffect 0.0 60.0 1 - EFFECT Hybrid3DEffect 0.0 60.0 2 +# ============================================================================ +# DEMO SEQUENCE DEFINITION +# ============================================================================ +# This file defines the timeline and layering of visual effects. +# Compiled by seq_compiler into src/generated/timeline.cc at build time. +# +# BPM 120 +# +# +# SYNTAX: +# +# END_DEMO <time> +# Specifies when the demo should automatically exit (optional) +# If not specified, demo runs indefinitely until user closes window +# +# SEQUENCE <global_start> <priority> [optional_end] +# EFFECT <EffectClassName> <local_start> <local_end> <priority> [constructor_args...] +# +# Optional sequence end time: +# - Syntax: [time] (must be wrapped in brackets) +# - If specified, all effects in the sequence will be forcefully ended at this time +# - If not specified, effects run until their individual end times +# - Example: SEQUENCE 0 0 [30.0] ends the entire sequence at 30 seconds +# +# TIME NOTATION: +# - Beat numbers: "0", "64", "128" (no decimal point = beats) +# - Beat numbers with 'b': "0b", "64b", "128b" (explicit beat notation) +# - Seconds: "0.0", "32.0", "64.0" (decimal point = seconds) +# - Seconds with 's': "32.0s", "64.0s" (explicit seconds notation) +# Examples at 120 BPM: +# - Beat 0 = 0.0 seconds +# - Beat 64 = 32.0 seconds +# - Beat 120 = 60.0 seconds +# +# SEQUENCE: +# - global_start: When this sequence starts (beats or seconds) +# - priority: Render order between sequences (higher = rendered later/on top) +# Use 0-9 for scene effects, 10+ for post-processing +# - [optional_end]: Optional end time in brackets [time]. If specified, all effects +# in the sequence will be forcefully ended at this time (relative +# to the sequence start). If omitted, effects run until their +# individual end times. +# +# EFFECT: +# - EffectClassName: C++ class name (must be declared in demo_effects.h) +# - local_start: Start time relative to sequence start (beats or seconds) +# - local_end: End time relative to sequence start (beats or seconds) +# - priority: Render order within sequence (lower = drawn first/background) +# Negative priorities draw behind everything +# - constructor_args: Optional additional constructor parameters (rarely used) +# +# Effect Constructor Parameters: +# ALL effects automatically receive these standard parameters: +# - WGPUDevice device: WebGPU device handle +# - WGPUQueue queue: Command queue for GPU operations +# - WGPUTextureFormat format: Surface texture format +# +# Most effects only use these standard parameters and don't require additional args. +# If an effect needs custom initialization parameters, they are specified after +# the priority field. Example (hypothetical): +# EFFECT CustomEffect 0 10 0 1.5 "param" +# This would translate to: +# std::make_shared<CustomEffect>(device, queue, format, 1.5, "param") +# +# Runtime Parameters (passed to render() method): +# All effects receive these dynamic parameters every frame: +# - time: Global time in seconds (from demo start) +# - beat: Current beat fraction (0.0 to 1.0 within each beat) +# - intensity: Audio peak intensity (0.0 to 1.0, for beat detection) +# - aspect_ratio: Screen width/height ratio +# +# Currently available effects (all use standard constructor only): +# +# Scene Effects (render 3D geometry): +# - HeptagonEffect: Animated geometric heptagon shape +# Uses: time (animation), beat (rotation), aspect_ratio (projection) +# - ParticlesEffect: GPU-simulated particle system +# Uses: time (physics), intensity (emission rate) +# - Hybrid3DEffect: 3D objects with camera movement +# Uses: time (camera paths), beat (object animation), aspect_ratio +# - FlashCubeEffect: Large background cube with Perlin noise texture +# Uses: time (rotation), intensity (flash trigger on beat hits) +# +# Post-Process Effects (full-screen shaders, applied in priority order): +# - GaussianBlurEffect: Gaussian blur with beat pulsation +# Uses: intensity (blur size pulsates 0.5x-2.5x based on audio peak) +# - SolarizeEffect: Color inversion with alternating red/blue tints +# Uses: time (alternates every 2 seconds between color schemes) +# - ChromaAberrationEffect: RGB channel separation +# Uses: time (animation), intensity (separation amount) +# - ThemeModulationEffect: Brightness cycling (bright/dark alternation) +# Uses: time (cycles every 8 seconds: 1.0 bright to 0.35 dark) +# - FadeEffect: Fade to/from black +# Uses: time (fades in first 2s, fades out after 36s - hardcoded) +# - FlashEffect: White flash on strong beat hits +# Uses: intensity (triggers flash when > 0.7, exponential decay) +# +# TIPS: +# - Scene effects render to framebuffer with depth testing +# - Post-processing effects are full-screen shaders applied in order +# - Use negative priority for background elements (skybox, far objects) +# - Higher sequence priority = later in post-process chain +# +# EXAMPLES: +# # Basic sequence starting at beat 0 with priority 0 +# SEQUENCE 0 0 +# EFFECT FlashEffect 0.0 0.5 1 # Starts immediately, runs 0.5s, priority 1 +# EFFECT HeptagonEffect 0.2 10 0 # Starts at 0.2s, runs until 10s, priority 0 +# +# # Sequence with explicit end time - all effects terminated at 5 seconds +# SEQUENCE 8b 0 [5.0] +# EFFECT ParticlesEffect 0 120 1 # Would run 120s, but sequence ends at 5s +# +# # Post-processing chain (high priority renders last/on top) +# SEQUENCE 0 10 +# EFFECT GaussianBlurEffect 0 60 1 # Applied first +# EFFECT ChromaAberrationEffect 0 60 2 # Applied second +# EFFECT SolarizeEffect 0 60 3 # Applied last +# +# # Background element with negative priority (renders behind everything) +# SEQUENCE 0 0 +# EFFECT FlashCubeEffect 0 10 -1 # priority -1 = background layer +# ============================================================================ -# Post-processing chain -SEQUENCE 0.0 10 - EFFECT GaussianBlurEffect 0.0 60.0 0 - EFFECT ChromaAberrationEffect 0.0 60.0 1 - EFFECT SolarizeEffect 0.0 60.0 2 +SEQUENCE 0b 0 + EFFECT FlashEffect 0.0 1. 0 + EFFECT FadeEffect 0.1 1. 1 # Add fade + EFFECT FlashCubeEffect .2 3 -1 # Background cube (priority -1 = behind everything) + EFFECT SolarizeEffect 0 4b 3 # Color inversion (last) + +SEQUENCE 4b 0 + EFFECT FlashEffect 0.0 0.2 4 # Add flash after solarize + EFFECT FlashCubeEffect 0.1 3. -1 + +SEQUENCE 6b 1 + EFFECT ParticlesEffect 0 4 1 # Particles layer + EFFECT GaussianBlurEffect 0 8 1 # Blur + +SEQUENCE 7b 0 + EFFECT FadeEffect 0.1 1.0 5 # Add fade + EFFECT HeptagonEffect 0.0 .2 0 # Main geometric effect + +# Post-processing chain (priority 10 = applied after scene rendering) +# Effects are applied in priority order: lower numbers first +SEQUENCE 8b 3 + EFFECT ThemeModulationEffect 0 4 0 # Brightness modulation (first) + EFFECT HeptagonEffect 0.0 4.0 0 # Main geometric effect + EFFECT GaussianBlurEffect 0 8 1 # Blur + EFFECT ChromaAberrationEffect 0 6 2 # Color separation + EFFECT SolarizeEffect 0 10 3 # Color inversion (last) + +SEQUENCE 12b 2 + EFFECT FlashCubeEffect .2 3 -1 # Background cube (priority -1 = behind everything) + EFFECT HeptagonEffect 0 4 0 + EFFECT ParticlesEffect 0 4 1 # Particles layer + +SEQUENCE 15b 2 + EFFECT FlashCubeEffect .2 3 -1 # Background cube (priority -1 = behind everything) + EFFECT FlashEffect 0.0 1 0 + +SEQUENCE 16b 10 + EFFECT FlashCubeEffect .2 3 -1 # Background cube (priority -1 = behind everything) + EFFECT GaussianBlurEffect 0 8 1 # Blur + EFFECT FlashEffect 0.0 0.2 4 # Add flash after solarize + EFFECT FlashEffect 1b 0.2 4 # Add flash after solarize + +SEQUENCE 17b 2 + EFFECT ThemeModulationEffect 0 4 0 # Brightness modulation (first) + EFFECT HeptagonEffect 0.2 2.0 1 # Main geometric effect + EFFECT ParticlesEffect 0 4 1 # Particles layer + EFFECT GaussianBlurEffect 0 8 3 # Blur + EFFECT Hybrid3DEffect 0 4 2 # 3D objects (priority 2 = foreground) + EFFECT ChromaAberrationEffect 0 6 4 # Color separation + +SEQUENCE 24b 1 + EFFECT ThemeModulationEffect 0 8 0 # Brightness modulation (first) + EFFECT HeptagonEffect 0.2 2.0 1 # Main geometric effect + EFFECT Hybrid3DEffect 0 20 2 # 3D objects (priority 2 = foreground) + EFFECT GaussianBlurEffect 0 8 3 # Blur + EFFECT ChromaAberrationEffect 0 10 4 # Color separation + EFFECT SolarizeEffect 0 10 5 # Color inversion (last) + +SEQUENCE 32b 0 + EFFECT ThemeModulationEffect 0 4 0 # Brightness modulation (first) + EFFECT HeptagonEffect 0 16 1 # Main geometric effect + EFFECT ChromaAberrationEffect 0 16 3 # Color separation + EFFECT GaussianBlurEffect 0 8 4 # Blur + +SEQUENCE 48b 0 + EFFECT ThemeModulationEffect 0 4 0 # Brightness modulation (first) + EFFECT HeptagonEffect 0.2 2.0 1 # Main geometric effect + EFFECT GaussianBlurEffect 0 8 3 # Blur + EFFECT SolarizeEffect 0 2 5 # Color inversion (last) + +SEQUENCE 56b 0 + EFFECT ThemeModulationEffect 0 8 0 # Brightness modulation (first) + EFFECT HeptagonEffect 0.2 2.0 0 # Main geometric effect + EFFECT Hybrid3DEffect 0 4 1 # 3D objects (priority 2 = foreground) + EFFECT HeptagonEffect 0 16 2 # Main geometric effect + EFFECT ChromaAberrationEffect 0 16 3 # Color separation + EFFECT GaussianBlurEffect 0 8 4 # Blur + +SEQUENCE 62b 0 + EFFECT ThemeModulationEffect 0 3 0 # Brightness modulation (first) + EFFECT SolarizeEffect 0 3 5 # Color inversion (last) +# Demo automatically exits at this time (supports beat notation) +END_DEMO 65b diff --git a/assets/final/BASS_SYNTH_1.spec b/assets/final/BASS_SYNTH_1.spec Binary files differindex 1fd7ad0..b0e9eb9 100644 --- a/assets/final/BASS_SYNTH_1.spec +++ b/assets/final/BASS_SYNTH_1.spec diff --git a/assets/final/shaders/gaussian_blur.wgsl b/assets/final/shaders/gaussian_blur.wgsl index fd083ff..7d39ac4 100644 --- a/assets/final/shaders/gaussian_blur.wgsl +++ b/assets/final/shaders/gaussian_blur.wgsl @@ -23,7 +23,12 @@ struct Uniforms { @fragment fn fs_main(@builtin(position) p: vec4<f32>) -> @location(0) vec4<f32> { let uv = p.xy / uniforms.resolution; var res = vec4<f32>(0.0); - let size = 5.0 * uniforms.intensity; + + // Reduced base size + dramatic beat pulsation + let base_size = 2.0; + let pulse = 0.5 + uniforms.intensity * 2.0; // Pulsate between 0.5x and 2.5x with beat + let size = base_size * pulse; + for (var x: f32 = -2.0; x <= 2.0; x += 1.0) { for (var y: f32 = -2.0; y <= 2.0; y += 1.0) { res += textureSample(txt, smplr, uv + vec2<f32>(x, y) * size / uniforms.resolution.x); diff --git a/assets/final/shaders/solarize.wgsl b/assets/final/shaders/solarize.wgsl index 9bd0212..fcb9d80 100644 --- a/assets/final/shaders/solarize.wgsl +++ b/assets/final/shaders/solarize.wgsl @@ -23,15 +23,37 @@ struct Uniforms { @fragment fn fs_main(@builtin(position) p: vec4<f32>) -> @location(0) vec4<f32> { let uv = p.xy / uniforms.resolution; var col = textureSample(txt, smplr, uv); - let thr = 0.5 + 0.3 * sin(uniforms.time); - if (col.r < thr) { - col.r = 1.0 - col.r; - } - if (col.g < thr) { - col.g = 1.0 - col.g; - } - if (col.b < thr) { - col.b = 1.0 - col.b; + + // Patterns are 2 seconds long (120 BPM, 4 beats) + let pattern_num = u32(uniforms.time / 2.0); + let is_even_pattern = (pattern_num % 2u) == 0u; + + // Reduced threshold range for subtler effect + let thr = 0.4 + 0.15 * sin(uniforms.time); + let solarize_strength = 0.4; // Reduced from 1.0 for less saturation + + if (is_even_pattern) { + // Even patterns: Subtle red-orange tint + if (col.r < thr) { + col.r = mix(col.r, 1.0 - col.r, solarize_strength); + } + if (col.g < thr) { + col.g = mix(col.g, 1.0 - col.g * 0.7, solarize_strength * 0.7); + } + if (col.b < thr) { + col.b = mix(col.b, col.b * 0.5, solarize_strength); + } + } else { + // Odd patterns: Subtle blue-cyan tint + if (col.r < thr) { + col.r = mix(col.r, col.r * 0.6, solarize_strength); + } + if (col.g < thr) { + col.g = mix(col.g, 1.0 - col.g * 0.8, solarize_strength * 0.8); + } + if (col.b < thr) { + col.b = mix(col.b, 1.0 - col.b, solarize_strength); + } } return col; } diff --git a/assets/music.track b/assets/music.track index 5f9dc4a..95297ce 100644 --- a/assets/music.track +++ b/assets/music.track @@ -1,206 +1,283 @@ -# Tempo Test Track - Drum beat with acceleration/deceleration tests -# Tests variable tempo system with clear, debuggable patterns +# Enhanced Demo Track - Progressive buildup with varied percussion +# Features acceleration/deceleration with diverse samples and melodic progression -# Import drum samples +# Import expanded drum kit SAMPLE ASSET_KICK_1 SAMPLE ASSET_KICK_2 +SAMPLE ASSET_KICK_3 SAMPLE ASSET_SNARE_1 +SAMPLE ASSET_SNARE_2 SAMPLE ASSET_SNARE_3 +SAMPLE ASSET_SNARE_4 SAMPLE ASSET_HIHAT_1 SAMPLE ASSET_HIHAT_2 +SAMPLE ASSET_HIHAT_3 +SAMPLE ASSET_HIHAT_4 SAMPLE ASSET_CRASH_1 +SAMPLE ASSET_RIDE_1 +SAMPLE ASSET_SPLASH_1 SAMPLE ASSET_BASS_1 -# Simple kick pattern with light syncopation -# Pattern duration: 4 beats (2 seconds at 120 BPM) +# === KICK PATTERNS === +# Varied kicks for different sections PATTERN kick_basic 0.0, ASSET_KICK_1, 1.0, 0.0 2.0, ASSET_KICK_1, 1.0, 0.0 2.5, ASSET_KICK_2, 0.7, -0.2 -# Snare on beats 2 and 4 -PATTERN snare_basic - 1.0, ASSET_SNARE_1, 0.9, 0.1 - 3.0, ASSET_SNARE_1, 0.9, 0.1 - -# Hi-hat 8th notes with stress on beats -PATTERN hihat_stressed - 0.0, ASSET_HIHAT_2, 0.8, -0.3 - 0.5, ASSET_HIHAT_1, 0.4, 0.3 - 1.0, ASSET_HIHAT_2, 0.8, -0.3 - 1.5, ASSET_HIHAT_1, 0.4, 0.3 - 2.0, ASSET_HIHAT_2, 0.8, -0.3 - 2.5, ASSET_HIHAT_1, 0.4, 0.3 - 3.0, ASSET_HIHAT_2, 0.8, -0.3 - 3.5, ASSET_HIHAT_1, 0.4, 0.3 +PATTERN kick_varied + 0.0, ASSET_KICK_2, 1.0, 0.0 + 2.0, ASSET_KICK_3, 0.95, 0.0 + 2.5, ASSET_KICK_1, 0.7, 0.2 -# Denser kick pattern for reset trick (2x faster) PATTERN kick_dense 0.0, ASSET_KICK_1, 1.0, 0.0 0.5, ASSET_KICK_2, 0.6, -0.2 - 1.0, ASSET_KICK_1, 1.0, 0.0 + 1.0, ASSET_KICK_3, 0.95, 0.0 1.5, ASSET_KICK_2, 0.6, 0.2 2.0, ASSET_KICK_1, 1.0, 0.0 2.5, ASSET_KICK_2, 0.6, -0.2 - 3.0, ASSET_KICK_1, 1.0, 0.0 + 3.0, ASSET_KICK_3, 0.95, 0.0 3.5, ASSET_KICK_2, 0.6, 0.2 -# Denser snare pattern +# === SNARE PATTERNS === +# Louder snare for more punch +PATTERN snare_basic + 1.0, ASSET_SNARE_1, 1.1, 0.1 + 3.0, ASSET_SNARE_1, 1.1, 0.1 + +PATTERN snare_varied + 1.0, ASSET_SNARE_2, 1.05, -0.1 + 3.0, ASSET_SNARE_4, 1.1, 0.1 + PATTERN snare_dense - 0.5, ASSET_SNARE_3, 0.7, 0.0 - 1.0, ASSET_SNARE_1, 0.9, 0.1 - 1.5, ASSET_SNARE_3, 0.7, 0.0 - 2.5, ASSET_SNARE_3, 0.7, 0.0 - 3.0, ASSET_SNARE_1, 0.9, 0.1 - 3.5, ASSET_SNARE_3, 0.7, 0.0 + 0.5, ASSET_SNARE_3, 0.9, 0.0 + 1.0, ASSET_SNARE_1, 1.1, 0.1 + 1.5, ASSET_SNARE_4, 0.85, 0.0 + 2.5, ASSET_SNARE_3, 0.9, 0.0 + 3.0, ASSET_SNARE_2, 1.05, 0.1 + 3.5, ASSET_SNARE_4, 0.85, 0.0 -# Crash accent +# === HIHAT PATTERNS === +PATTERN hihat_basic + 0.0, ASSET_HIHAT_2, 0.7, -0.3 + 0.5, ASSET_HIHAT_1, 0.35, 0.3 + 1.0, ASSET_HIHAT_2, 0.7, -0.3 + 1.5, ASSET_HIHAT_1, 0.35, 0.3 + 2.0, ASSET_HIHAT_2, 0.7, -0.3 + 2.5, ASSET_HIHAT_1, 0.35, 0.3 + 3.0, ASSET_HIHAT_2, 0.7, -0.3 + 3.5, ASSET_HIHAT_1, 0.35, 0.3 + +PATTERN hihat_varied + 0.0, ASSET_HIHAT_3, 0.7, -0.3 + 0.5, ASSET_HIHAT_1, 0.35, 0.3 + 1.0, ASSET_HIHAT_4, 0.65, -0.2 + 1.5, ASSET_HIHAT_1, 0.35, 0.3 + 2.0, ASSET_HIHAT_3, 0.7, -0.3 + 2.5, ASSET_HIHAT_1, 0.35, 0.3 + 3.0, ASSET_HIHAT_4, 0.65, -0.2 + 3.5, ASSET_HIHAT_1, 0.35, 0.3 + +# === CYMBAL PATTERNS === +# Crash for major transitions only PATTERN crash 0.0, ASSET_CRASH_1, 0.85, 0.0 -# Bass line in E +# Ride for driving the beat (replaces most crashes) +PATTERN ride + 0.0, ASSET_RIDE_1, 0.75, 0.2 + +# Faster ride beat for intensity +PATTERN ride_fast + 0.0, ASSET_RIDE_1, 0.75, 0.2 + 0.5, ASSET_RIDE_1, 0.6, 0.2 + 1.0, ASSET_RIDE_1, 0.75, 0.2 + 1.5, ASSET_RIDE_1, 0.6, 0.2 + 2.0, ASSET_RIDE_1, 0.75, 0.2 + 2.5, ASSET_RIDE_1, 0.6, 0.2 + 3.0, ASSET_RIDE_1, 0.75, 0.2 + 3.5, ASSET_RIDE_1, 0.6, 0.2 + +# Splash for accent/variation +PATTERN splash + 0.0, ASSET_SPLASH_1, 0.7, -0.2 + +# === BASS PATTERNS === +# Progressive bass introduction with reduced volumes +PATTERN bass_e_soft + 0.0, NOTE_E2, 0.4, 0.0 + 2.0, NOTE_E2, 0.35, 0.0 + PATTERN bass_e - 0.0, NOTE_E2, 0.9, 0.0 - 1.0, NOTE_E2, 0.7, 0.0 - 2.0, NOTE_E2, 0.9, 0.0 - 2.5, NOTE_E2, 0.6, 0.0 - 3.0, NOTE_E2, 0.7, 0.0 + 0.0, NOTE_E2, 0.5, 0.0 + 1.0, NOTE_E2, 0.4, 0.0 + 2.0, NOTE_E2, 0.5, 0.0 + 2.5, NOTE_E2, 0.35, 0.0 + 3.0, NOTE_E2, 0.4, 0.0 -# Bass line with variation (E-G progression) PATTERN bass_eg - 0.0, NOTE_E2, 0.9, 0.0 - 1.0, NOTE_E2, 0.7, 0.0 - 2.0, NOTE_G2, 0.9, 0.0 - 3.0, NOTE_G2, 0.7, 0.0 + 0.0, NOTE_E2, 0.5, 0.0 + 1.0, NOTE_E2, 0.4, 0.0 + 2.0, NOTE_G2, 0.5, 0.0 + 3.0, NOTE_G2, 0.4, 0.0 + +PATTERN bass_progression + 0.0, NOTE_E2, 0.5, 0.0 + 1.0, NOTE_D2, 0.45, 0.0 + 2.0, NOTE_C2, 0.5, 0.0 + 3.0, NOTE_G2, 0.4, 0.0 + +# === SYNCOPATED BASS PATTERNS === +# Punchy, syncopated bass with short notes for final section +PATTERN bass_synco_1 + 0.0, NOTE_E2, 0.6, 0.0 + 0.25, NOTE_E2, 0.5, 0.1 + 0.75, NOTE_E2, 0.55, -0.1 + 1.5, NOTE_E2, 0.5, 0.0 + 2.0, NOTE_E2, 0.6, 0.0 + 2.75, NOTE_G2, 0.55, 0.1 + 3.25, NOTE_E2, 0.5, 0.0 -# Simple melody in E minor -PATTERN melody_em - 0.0, NOTE_E4, 0.7, 0.0 - 0.5, NOTE_G4, 0.6, 0.1 - 1.0, NOTE_B4, 0.7, -0.1 - 2.0, NOTE_A4, 0.6, 0.0 - 2.5, NOTE_G4, 0.6, 0.1 - 3.0, NOTE_E4, 0.7, 0.0 +PATTERN bass_synco_2 + 0.0, NOTE_E2, 0.6, 0.0 + 0.5, NOTE_D2, 0.55, -0.1 + 1.25, NOTE_E2, 0.5, 0.1 + 1.75, NOTE_D2, 0.5, 0.0 + 2.0, NOTE_C2, 0.6, 0.0 + 2.5, NOTE_E2, 0.5, 0.1 + 3.0, NOTE_G2, 0.6, 0.0 + 3.5, NOTE_E2, 0.5, -0.1 -# Score: time_sec, pattern_name -# NOTE: Timing in MUSIC TIME (not physical time) -# Physical time will vary based on tempo_scale in main.cc +PATTERN bass_synco_3 + 0.0, NOTE_E2, 0.65, 0.0 + 0.25, NOTE_E2, 0.5, 0.0 + 0.5, NOTE_E2, 0.55, 0.1 + 1.0, NOTE_G2, 0.6, 0.0 + 1.5, NOTE_E2, 0.5, -0.1 + 2.25, NOTE_D2, 0.55, 0.0 + 2.75, NOTE_E2, 0.5, 0.1 + 3.5, NOTE_E2, 0.55, 0.0 + +# === SCORE === SCORE -# Phase 1: Steady beat (0-10s music time) -# tempo_scale = 1.0 throughout +# Phase 1: Intro - Minimal setup (0-4s) 0.0, crash 0.0, kick_basic - 0.0, snare_basic - 0.0, hihat_stressed + 0.0, hihat_basic 2.0, kick_basic 2.0, snare_basic - 2.0, hihat_stressed + 2.0, hihat_basic - 4.0, crash - 4.0, kick_basic +# Phase 2: Build - Add variety (4-8s) + 4.0, ride + 4.0, kick_varied 4.0, snare_basic - 4.0, hihat_stressed + 4.0, hihat_varied - 6.0, kick_basic - 6.0, snare_basic - 6.0, hihat_stressed + 6.0, kick_varied + 6.0, snare_varied + 6.0, hihat_varied - 8.0, crash +# Phase 3: Introduce bass softly (8-12s) + 8.0, splash 8.0, kick_basic 8.0, snare_basic - 8.0, hihat_stressed + 8.0, hihat_basic + 8.0, bass_e_soft -# Phase 2: Acceleration section (10-15s music time) -# tempo_scale accelerates from 1.0 to 2.0 -# Then resets to 1.0 with denser patterns - 10.0, crash - 10.0, kick_basic - 10.0, snare_basic - 10.0, hihat_stressed - 10.0, bass_e + 10.0, kick_varied + 10.0, snare_varied + 10.0, hihat_varied + 10.0, bass_e_soft +# Phase 4: Acceleration section (12-16s music time) +# tempo_scale accelerates from 1.0 to 2.0 + 12.0, ride 12.0, kick_basic 12.0, snare_basic - 12.0, hihat_stressed + 12.0, hihat_basic 12.0, bass_e - 14.0, kick_basic - 14.0, snare_basic - 14.0, hihat_stressed - 14.0, bass_e + 14.0, kick_varied + 14.0, snare_varied + 14.0, hihat_varied + 14.0, bass_eg -# Phase 3: After reset - denser patterns (16-20s music time) +# Phase 5: After acceleration reset - denser patterns (16-20s) # tempo_scale = 1.0 with 2x denser patterns 16.0, crash 16.0, kick_dense 16.0, snare_dense - 16.0, hihat_stressed + 16.0, hihat_varied 16.0, bass_e 18.0, kick_dense 18.0, snare_dense - 18.0, hihat_stressed - 18.0, bass_eg + 18.0, hihat_basic + 18.0, bass_progression -# Phase 4: Slow-down section (20-25s music time) -# tempo_scale decelerates from 1.0 to 0.5 -# Then resets to 1.0 - 20.0, crash +# Phase 6: Continue buildup (20-24s) + 20.0, ride 20.0, kick_dense 20.0, snare_dense - 20.0, hihat_stressed + 20.0, hihat_varied 20.0, bass_e 22.0, kick_dense 22.0, snare_dense - 22.0, hihat_stressed - 22.0, bass_e + 22.0, hihat_basic + 22.0, bass_eg +# Phase 7: Slow-down section (24-28s music time) +# tempo_scale decelerates from 1.0 to 0.5 + 24.0, splash 24.0, kick_dense 24.0, snare_dense - 24.0, hihat_stressed - 24.0, bass_eg + 24.0, hihat_varied + 24.0, bass_progression -# Phase 5: After slow-down reset (26-30s music time) -# Back to normal tempo with bass - 26.0, crash - 26.0, kick_basic - 26.0, snare_basic - 26.0, hihat_stressed + 26.0, kick_dense + 26.0, snare_dense + 26.0, hihat_basic 26.0, bass_e +# Phase 8: Build to break (28-31s) + 28.0, ride_fast 28.0, kick_basic - 28.0, snare_basic - 28.0, hihat_stressed + 28.0, snare_varied + 28.0, hihat_varied 28.0, bass_eg -# Phase 6: Add melody (30s+ music time) - 30.0, crash - 30.0, kick_basic + 30.0, kick_varied 30.0, snare_basic - 30.0, hihat_stressed - 30.0, bass_e - 30.0, melody_em + 30.0, hihat_basic + 30.0, bass_progression + +# DRAMATIC BREAK: 1 beat of silence before climax (31-32s) + 31.0, hihat_basic - 32.0, kick_basic - 32.0, snare_basic - 32.0, hihat_stressed - 32.0, bass_eg - 32.0, melody_em +# Phase 9: CLIMAX - Punchy syncopated bass with fast ride (32-36s) + 32.0, crash + 32.0, ride_fast + 32.0, kick_dense + 32.0, snare_dense + 32.0, hihat_varied + 32.0, bass_synco_1 - 34.0, kick_basic - 34.0, snare_basic - 34.0, hihat_stressed - 34.0, bass_e - 34.0, melody_em + 34.0, ride_fast + 34.0, kick_dense + 34.0, snare_dense + 34.0, hihat_basic + 34.0, bass_synco_2 - 36.0, crash - 36.0, kick_basic - 36.0, snare_basic - 36.0, hihat_stressed - 36.0, bass_eg - 36.0, melody_em +# Phase 10: Final push with syncopation (36-38s) + 36.0, ride_fast + 36.0, kick_dense + 36.0, snare_dense + 36.0, hihat_varied + 36.0, bass_synco_3 # Ending 38.0, crash |
