MÓDULO 1: Variedad de Samples (usa más de la librería) - Fix _find_sample_for_section(): rotación round-robin por sección * Intro: samples 0-2 (suaves) * Verse: samples 3-6 (rotación) * Chorus: samples 7-10 (energía) * Bridge: samples 11-14 (diferentes) * Outro: últimos samples - Nueva función _pick_variety() distribuye 12 samples entre secciones - generate_intelligent_track(): múltiples samples por rol (no 1 solo) - load_samples_for_genre(): hasta 3 bass tracks, 3 FX tracks (eliminados breaks) MÓDULO 2: Humanización Real (suena musical, no robótico) - Fix bug de escala: intensity 0.0-1.0 → timing 0-15ms audible - Perfiles por instrumento: * Kick: timing×5ms (sutil) * Snare: timing×10ms (medio) * HiHat: timing×15ms (expressivo) * Bass: timing×8ms * Melody: timing×12ms - Soporte Arrangement View: procesa arrangement_clips - Humanización de audio clips: gain variation + micro-timing - BPM-aware timing en HumanFeel (lee tempo real del proyecto) MÓDULO 3: Sistema de Coherencia (calidad profesional) - Fix validate_coherence: import roto CoherenceValidator → RealCoherenceValidator - Fix select_coherent_kit: mismo fix de import - Detección de frequency masking: identifica kick+bass colisión en sub-bass - Phase correlation real: calculado desde onsets coincidentes - Unificación _calculate_coherence(): usa RealCoherenceValidator como default Resultado: - Antes: 7-12 samples de 511 (6-12%) - Ahora: 20-40+ samples por producción (rotación automática) - Humanización: audible y por instrumento - Coherencia: detecta problemas kick/bass, phase issues Refs: Módulos 1, 2, 3 del plan de desarrollo
74 lines
3.3 KiB
Plaintext
74 lines
3.3 KiB
Plaintext
# REGLAS DEL PROYECTO AbletonMCP_AI v2.0
|
|
|
|
> **OBLIGATORIO**: Estas reglas se aplican ANTES de cada cambio en el proyecto.
|
|
|
|
## 🚫 PROHIBIDO (NUNCA HACER)
|
|
|
|
1. **NO tocar `libreria/` ni `librerias/`** - Son las samples del usuario. NUNCA borrar, mover ni modificar nada ahí.
|
|
2. **NO borrar archivos del proyecto actual** - Si hay que reemplazar algo, hacer overwrite, no delete + create.
|
|
3. **NO crear archivos .md de debugging** en la raíz del proyecto - Todo va a `AbletonMCP_AI/docs/`.
|
|
4. **NO usar `rmdir /s /q` en carpetas que no sean `__pycache__`** - Se puede borrar todo el proyecto por error.
|
|
5. **NO modificar scripts de Ableton que no sean AbletonMCP_AI** - Las carpetas `_Framework`, `_APC`, etc. son de Ableton.
|
|
|
|
## ✅ OBLIGATORIO (SIEMPRE HACER)
|
|
|
|
1. **Compilar después de cada cambio**:
|
|
```powershell
|
|
python -m py_compile "C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\__init__.py"
|
|
python -m py_compile "C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\mcp_server\server.py"
|
|
```
|
|
|
|
2. **Los sprints van a `docs/`** - Cada sprint se guarda en `AbletonMCP_AI/docs/sprint_N_descripcion.md`.
|
|
|
|
3. **Usar paths absolutos de Windows** en todos los comandos y scripts.
|
|
|
|
4. **Usar PowerShell**, no bash. Los comandos son `cmd.exe` compatible.
|
|
|
|
5. **Reiniciar Ableton Live** después de cambios en `__init__.py` - El Remote Script se carga al inicio y no se puede hot-reload.
|
|
|
|
## 📁 ESTRUCTURA DEL PROYECTO
|
|
|
|
```
|
|
MIDI Remote Scripts/
|
|
├── AbletonMCP_AI/
|
|
│ ├── __init__.py # Entry point (TODO el código de Live)
|
|
│ ├── README.md # Documentación principal
|
|
│ ├── docs/ # Sprints y docs del proyecto
|
|
│ │ └── WORKFLOW.md # Flujo Qwen + Kimi
|
|
│ └── mcp_server/
|
|
│ ├── server.py # MCP FastMCP server
|
|
│ └── engines/ # Lógica musical
|
|
│ ├── sample_selector.py
|
|
│ └── song_generator.py
|
|
├── mcp_wrapper.py # Launcher del MCP server
|
|
├── libreria/reggaeton/ # 509 samples del usuario (NO TOCAR)
|
|
└── librerias/ # Samples organizados (NO TOCAR)
|
|
```
|
|
|
|
## 🔧 ARQUITECTURA
|
|
|
|
### Remote Script (`__init__.py`)
|
|
- **Todo en un solo archivo** - Ableton solo lee `__init__.py` para descubrir el script.
|
|
- **No hacer imports de módulos externos** - Pone todo el código acá adentro.
|
|
- **Socket TCP en puerto 9877** - Un thread escucha, cada comando abre conexión nueva.
|
|
- **`update_display()` drena tareas** - Las mutaciones de Live van a `_pending_tasks` y se ejecutan en `update_display()`.
|
|
|
|
### MCP Server (`mcp_server/server.py`)
|
|
- **FastMCP sobre stdio** - Se comunica con opencode via stdin/stdout.
|
|
- **Cada tool llama a `_send_to_ableton()`** - Abre socket, envía comando JSON, cierra.
|
|
- **Timeouts por tipo de comando** - Info: 5s, Mutación: 10-15s, Generación: 300s.
|
|
|
|
## 🧪 TESTING
|
|
|
|
Después de cada cambio:
|
|
1. `python -m py_compile <archivo_modificado>`
|
|
2. Si es `__init__.py` → reiniciar Ableton
|
|
3. Probar con `get_session_info` → debe responder sin timeout
|
|
|
|
## 🤝 FLUJO QWEN + KIMI
|
|
|
|
- **Kimi** codea rápido, implementa features
|
|
- **Qwen** verifica, compila, debuggea, arregla, crea siguiente sprint
|
|
- Los sprints se guardan en `docs/`
|
|
- Qwen decide la arquitectura y el próximo paso
|