184 lines
3.9 KiB
Markdown
184 lines
3.9 KiB
Markdown
# Melody Generator README
|
|
|
|
## Modulo de generacion melodica procedural para reggaeton
|
|
|
|
**Version:** Sprint Granular v0.1.40
|
|
**Tareas:** T121-T135
|
|
**Archivo:** `AbletonMCP_AI/AbletonMCP_AI/MCP_Server/melody_generator.py`
|
|
|
|
---
|
|
|
|
## Proposito
|
|
|
|
El modulo `melody_generator.py` proporciona generacion proceduralde melodias MIDI para tracks armonicos en producciones de reggaeton. Se integra con `reference_listener` para deteccion automatica de tonalidad y genera melodias coherentes con la estructura del track.
|
|
|
|
---
|
|
|
|
## Caracteristicas Principales
|
|
|
|
### T121: Escalas y Tontericas
|
|
|
|
- Soporte para escalas menores (Am, Bm, Cm, Dm, Em, Fm, Gm, F#m)
|
|
- Mapeo completo de raices MIDI por tonalidad
|
|
- Cuantizacion automatica a escala
|
|
|
|
### T122-T124: Progresiones de Acordes
|
|
|
|
```python
|
|
REGGAETON_CHORD_PROGRESSION = ['Am', 'F', 'G', 'Em']
|
|
```
|
|
|
|
- Progresion clasica reggaeton Am-F-G-Em
|
|
- Soporte para variaciones modales
|
|
- Transiciones suaves entre secciones
|
|
|
|
### T125-T127: Generacion de Melodias
|
|
|
|
```python
|
|
@dataclass
|
|
class MidiNote:
|
|
pitch: int
|
|
start_beat: float
|
|
duration_beats: float
|
|
velocity: int = 80
|
|
```
|
|
|
|
- Notas MIDI estructuradas
|
|
- Control de duracion y velocidad
|
|
- Cuantizacion a beats
|
|
|
|
### T128-T130: Contorno Melodico
|
|
|
|
- Melodias ascendentes para builds
|
|
- Melodias descendentes para drops
|
|
- Contornos por seccion
|
|
|
|
### T131-T135: Integracion con Arrangement
|
|
|
|
- Melodias por seccion (intro, build, drop, break)
|
|
- Variaciones A/B para evitar repeticion
|
|
- Sincronizacion con estructura reggaeton 95 BPM
|
|
|
|
---
|
|
|
|
## API Principal
|
|
|
|
### `scale_notes(root_midi: int, octaves: int) -> List[int]`
|
|
|
|
Genera notas de la escala Am en el rango especificado.
|
|
|
|
**Args:**
|
|
- `root_midi`: Nota raiz en MIDI (default: A3 = 57)
|
|
- `octaves`: Numero de octavas (default: 2)
|
|
|
|
**Returns:**
|
|
- Lista de pitches MIDI en la escala
|
|
|
|
---
|
|
|
|
### `quantize_to_scale(pitch: int, scale_root: int) -> int`
|
|
|
|
Cuantiza un pitch MIDI a la nota mas cercana en la escala.
|
|
|
|
**Args:**
|
|
- `pitch`: pitch MIDI a cuantizar
|
|
- `scale_root`: raiz de la escala
|
|
|
|
**Returns:**
|
|
- Pitch MIDI cuantizado
|
|
|
|
---
|
|
|
|
### `MidiNote`
|
|
|
|
Dataclass para representar notas MIDI.
|
|
|
|
```python
|
|
note = MidiNote(
|
|
pitch=60,
|
|
start_beat=0.0,
|
|
duration_beats=0.5,
|
|
velocity=90
|
|
)
|
|
```
|
|
|
|
---
|
|
|
|
## Integracion con MCP
|
|
|
|
El melody generator se invoca desde `server.py` en la generacion de tracks:
|
|
|
|
```python
|
|
def generate_melody_for_section(
|
|
track_index: int,
|
|
key: str,
|
|
section: str,
|
|
bars: int = 4,
|
|
style: str = "reggaeton"
|
|
) -> List[MidiNote]:
|
|
...
|
|
```
|
|
|
|
---
|
|
|
|
## Tests
|
|
|
|
Los tests se encuentran en `tests/test_melody_generator.py`:
|
|
|
|
```powershell
|
|
python -m pytest "C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\tests\test_melody_generator.py"
|
|
```
|
|
|
|
---
|
|
|
|
## Dependencias
|
|
|
|
- `reference_listener.py` - Deteccion de tonalidad
|
|
- `arrangement_intelligence.py` - Estructura por seccion
|
|
- `song_generator.py` - Orquestacion de generacion
|
|
|
|
---
|
|
|
|
## Ejemplo de Uso
|
|
|
|
```python
|
|
from melody_generator import MidiNote, scale_notes, quantize_to_scale
|
|
|
|
# Obtener notas de la escala Am
|
|
notes = scale_notes(root_midi=57, octaves=2)
|
|
|
|
# Cuantizar un pitch fuera de escala
|
|
pitch = 62 # D4 (fuera de Am)
|
|
quantized = quantize_to_scale(pitch, scale_root=57)
|
|
|
|
# Crear nota MIDI
|
|
note = MidiNote(
|
|
pitch=quantized,
|
|
start_beat=0.0,
|
|
duration_beats=1.0,
|
|
velocity=80
|
|
)
|
|
```
|
|
|
|
---
|
|
|
|
## Notas de Implementacion
|
|
|
|
1. **Tonalidad**: El modulo detecta automaticamente la tonalidad desde el reference_listener
|
|
2. **Estructura**: Respeta la estructura reggaeton definida en `arrangement_intelligence.py`
|
|
3. **Variacion**: Genera variaciones A/B para evitar repeticion
|
|
4. **Cuantizacion**: Siempre cuantiza a la escala detectada
|
|
|
|
---
|
|
|
|
## Roadmap
|
|
|
|
- [ ] T136: Integracion con chord progression avanzado
|
|
- [ ] T137: Melodias con glide/pitch bend
|
|
- [ ] T138: Melodias con arpregios rapidos
|
|
- [ ] T139: Melodias con call-and-response
|
|
|
|
---
|
|
|
|
*Maintained by: AbletonMCP-AI Team*
|
|
*Last updated: 2026-04-05* |