# Proposal: Fix Musical Coherence ## Intent Generated RPP MIDI content lacks musical coherence — bass timing wrong for reggaeton, lead melodies span 2+ octaves, chords are triads not 7ths, pads have no movement, and Ozone 12 master chain may fail to load. Fix all five issues. ## Scope ### In Scope - Fix 808 Bass pattern: sparse i-iv-i-V (1 note/2 bars, on beat 1.0, 1.5 beat duration) - Fix Lead melody: constrain to ≤1 octave range with chord-tone emphasis - Fix Chords: use 4-note 7th voicings (m7/7) instead of 3-note triads - Fix Pad: add arpeggiated movement instead of static sustained notes - Fix Ozone 12: ensure master chain PluginDef has correct .vst3 path ### Out of Scope - Drum pattern changes - Vocal generation - Mix levels recalibration ## Capabilities ### New Capabilities None ### Modified Capabilities None (implementation-only fixes — no spec changes) ## Approach 1. **Ozone 12**: In `_build_master_fxchain()`, construct PluginDef with actual registry path instead of `path=""`. Or verify registry lookup already works and confirm. 2. **808 Bass**: Replace dense 16-note `BASS_PATTERN_8BARS` with sparse 4-note pattern matching Ableton project: bar 1-2 A1, bar 3-4 D2, bar 5-6 A1, bar 7-8 E2, each on beat 1.0 with 1.5 beat duration. 3. **Lead**: Remove ±1 octave expansion in `_resolve_chord_tones()` (melody_engine.py line 80). Constrain chord tones to single octave around tonic (oct_shift=0 only). 4. **Chords**: Change `EMOTION_PROGRESSIONS` in chords.py to use `m7`/`7` qualities instead of `min`/`maj`, producing 4-note seventh chord voicings. 5. **Pad**: Replace single sustained chord with arpeggiated eighth-note pattern cycling through chord notes. ## Affected Areas | Area | Impact | Description | |------|--------|-------------| | `scripts/compose.py` — BASS_PATTERN_8BARS | Modified | Sparse 4-note pattern | | `scripts/compose.py` — build_pad_track() | Modified | Arpeggiated movement | | `src/composer/melody_engine.py` — _resolve_chord_tones() | Modified | Single octave constraint | | `src/composer/chords.py` — EMOTION_PROGRESSIONS | Modified | m7/7 instead of min/maj | | `src/reaper_builder/__init__.py` — _build_master_fxchain() | Modified | Correct plugin path | | Tests | Modified | Update expected note counts/positions | ## Risks | Risk | Likelihood | Mitigation | |------|------------|------------| | Sparse bass pattern too empty | Low | 1.5-beat 808 tails fill space | | 7th chords sound too jazzy | Low | Reggaeton standard is i7-VI7-III7-VII7 | | Arpeggiated pad clashes with chords | Low | Different octave (3 vs 4) | ## Rollback Plan Revert git commit. All changes are in existing files. ## Dependencies None ## Success Criteria - [ ] 808 bass notes start at beat 1.0 of bars 1,3,5,7 (not 3.5,7.0...) - [ ] Lead melody stays within 12 semitones per bar - [ ] Chord voicings have 4 notes (root, 3rd, 5th, 7th) - [ ] Pad has arpeggiated eighth-note movement - [ ] Ozone 12 vst3 filename correct in RPP output - [ ] `python -m pytest tests/ -q` passes - [ ] Generated RPP loads in REAPER and plays coherently