🎉 Sprint 7 COMPLETADO - MIDI instruments funcionando, clear_project agregado, drum loop + harmony test exitoso
AVANCES CLAVE: ✅ B001 FIX: MIDI instruments cargan correctamente (Wavetable/Operator) ✅ API fix: app.view.selected_track → self._song.view.selected_track ✅ clear_project: Nuevo comando para limpiar Session + Arrangement View ✅ Drum loop + Harmony: 100bpm gata con progresión Am-F-C-G funcionando ✅ 13 scenes production: Sistema completo operativo Estado: MUY FELIZ, todo funciona perfectamente 🚀
This commit is contained in:
112
update_scenes.py
Normal file
112
update_scenes.py
Normal file
@@ -0,0 +1,112 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Update SCENES in __init__.py to Fases 56-61"""
|
||||
|
||||
import re
|
||||
|
||||
file_path = r'C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\__init__.py'
|
||||
|
||||
with open(file_path, 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
|
||||
# The old SCENES definition (what we're replacing)
|
||||
old_scenes_start = '# ================================================================'
|
||||
old_scenes_marker1 = '# SCENE DEFINITIONS'
|
||||
old_scenes_marker2 = 'SCENES = ['
|
||||
|
||||
# Find the start of SCENES section
|
||||
start_idx = content.find('# SCENE DEFINITIONS (12 scenes for Fases 16-20)')
|
||||
if start_idx == -1:
|
||||
start_idx = content.find('# SCENE DEFINITIONS (Fases 56-61: Scenes 0-5)')
|
||||
if start_idx != -1:
|
||||
print('INFO: File already has Fases 56-61')
|
||||
exit(0)
|
||||
|
||||
if start_idx == -1:
|
||||
print('ERROR: Could not find SCENE DEFINITIONS section')
|
||||
# Try to find any SCENE DEFINITIONS
|
||||
idx = content.find('# SCENE DEFINITIONS')
|
||||
if idx != -1:
|
||||
print(f'Found SCENE DEFINITIONS at position {idx}')
|
||||
print('Context:', content[idx:idx+100])
|
||||
exit(1)
|
||||
|
||||
# Find the end of SCENES list (FX_BY_SCENE closing brace)
|
||||
end_marker = '# FASE 19: NO_REPEAT'
|
||||
end_idx = content.find(end_marker, start_idx)
|
||||
if end_idx == -1:
|
||||
end_idx = content.find('# FASE 20: Energy-based', start_idx)
|
||||
|
||||
if end_idx == -1:
|
||||
print('ERROR: Could not find end of SCENES section')
|
||||
exit(1)
|
||||
|
||||
# Extract the section to replace
|
||||
old_section = content[start_idx:end_idx]
|
||||
|
||||
print(f'Found section from {start_idx} to {end_idx} ({len(old_section)} chars)')
|
||||
|
||||
# New SCENES definition
|
||||
new_section = '''# ================================================================
|
||||
# SCENE DEFINITIONS (Fases 56-61: Scenes 0-5)
|
||||
# ================================================================
|
||||
SCENES = [
|
||||
# Fase 56: Scene 0 - Intro (NO drums)
|
||||
("Intro", 4, 0.20, {
|
||||
"drums": False, "bass": False, "lead": False,
|
||||
"chords": "intro", "pad": True, "ambience": True, "hat": False,
|
||||
"riser": False, "impact": False
|
||||
}),
|
||||
# Fase 57: Scene 1 - Verse A (sparse drums, intensity 0.6)
|
||||
("Verse A", 8, 0.50, {
|
||||
"drums": True, "bass": True, "lead": False,
|
||||
"chords": "verse_standard", "pad": False, "ambience": False, "hat": True,
|
||||
"drum_intensity": 0.6, "bass_style": "sub"
|
||||
}),
|
||||
# Fase 58: Scene 2 - Verse B (agrega lead melody)
|
||||
("Verse B", 8, 0.60, {
|
||||
"drums": True, "bass": True, "lead": True,
|
||||
"chords": "verse_alt1", "pad": False, "ambience": False, "hat": True,
|
||||
"drum_intensity": 0.7, "bass_style": "standard"
|
||||
}),
|
||||
# Fase 59: Scene 3 - Pre-Chorus (riser y anticipation)
|
||||
("Pre-Chorus", 4, 0.75, {
|
||||
"drums": True, "bass": True, "lead": False,
|
||||
"chords": "prechorus", "pad": True, "ambience": False, "hat": True,
|
||||
"riser": True, "drum_intensity": 0.8, "anticipation": True
|
||||
}),
|
||||
# Fase 60: Scene 4 - Chorus A (impact y maxima energia)
|
||||
("Chorus A", 8, 0.95, {
|
||||
"drums": True, "bass": True, "lead": True,
|
||||
"chords": "chorus_power", "pad": True, "ambience": False, "hat": True,
|
||||
"impact": True, "drum_intensity": 1.0, "bass_style": "melodic"
|
||||
}),
|
||||
# Fase 61: Scene 5 - Chorus B (modulacion +1 semitono)
|
||||
("Chorus B", 8, 0.90, {
|
||||
"drums": True, "bass": True, "lead": True,
|
||||
"chords": "chorus_alternative", "pad": False, "ambience": False, "hat": True,
|
||||
"drum_intensity": 0.95, "bass_style": "octaves", "modulation": "+1"
|
||||
}),
|
||||
]
|
||||
|
||||
# Scene indices with drums active (for Perc Loops, etc.)
|
||||
PERC_LOOP_SCENES = [1, 2, 3, 4, 5] # All except Intro (0)
|
||||
DRUMLOOP_SCENES = [1, 2, 3, 4, 5] # All except Intro (0)
|
||||
PROTAGONIST_SCENES = [2, 4] # Main scenes for protagonist drumloop
|
||||
|
||||
# FX assignments by scene (extended params)
|
||||
FX_BY_SCENE = {
|
||||
3: "riser", # Pre-Chorus: Riser
|
||||
4: "impact", # Chorus A: Impact
|
||||
}
|
||||
|
||||
'''
|
||||
|
||||
# Replace
|
||||
new_content = content[:start_idx] + new_section + content[end_idx:]
|
||||
|
||||
with open(file_path, 'w', encoding='utf-8') as f:
|
||||
f.write(new_content)
|
||||
|
||||
print('SUCCESS: SCENES updated to Fases 56-61')
|
||||
print('Scenes 0-5 configured: Intro, Verse A, Verse B, Pre-Chorus, Chorus A, Chorus B')
|
||||
Reference in New Issue
Block a user