Files
musica-ia/als_gen/README.md
renato97 85db177636 feat: Complete music project templates and generation system
🎵 Major Additions:

📁 2000s Pop Project Templates:
- Chords & melody patterns
- Drum patterns and rhythms
- Synth bass configurations
- Effects and mixing guides
- Complete project structure documentation

🧬 ALS Generation System:
- Fixed ALS generator with enhanced capabilities
- Setup scripts for easy deployment
- Comprehensive README and documentation
- Quick start guide for users
- Utility commands reference

🎼 Musical Projects:
- Salsa project (Hector Lavoe inspired) with full documentation
- 2000s Pop project with complete production guide

🔧 Utility Scripts:
- generate_salsa_project.py: Salsa-specific generator
- generate_versioned_als.py: Versioned project generation
- register_project.py: Project registration system

This significantly expands MusiaIA's capabilities with pre-built project templates and production-ready examples for multiple genres!

Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 01:14:03 +00:00

8.7 KiB

Generador de Archivos .als (Ableton Live Set)

Descripción

Este proyecto implementa un generador y analizador de archivos .als (Ableton Live Set) usando Python. Permite hacer ingeniería inversa del formato XML comprimido utilizado por Ableton Live para generar nuevos proyectos de música electrónica o modificar proyectos existentes.

Características

🎵 Generación de Archivos .als

  • Crear proyectos completamente nuevos desde cero
  • Generar múltiples tracks (MIDI, Group, Return)
  • Añadir clips MIDI con patrones de notas personalizables
  • Configurar mixer, routing y efectos
  • Compatible con Ableton Live 12 Suite

🔍 Análisis de Proyectos

  • Examinar estructura completa del proyecto
  • Listar tracks, clips y dispositivos
  • Analizar notas MIDI y patrones
  • Exportar información a archivos de texto

✏️ Modificación de Proyectos Existentes

  • Randomizar velocidades de notas MIDI
  • Transponer notas por semitonos
  • Duplicar clips en diferentes tracks
  • Generar variaciones automáticas
  • Preservar toda la información original

Archivos Incluidos

/mnt/c/als_gen/
├── als_generator.py      # Generador principal de archivos .als
├── als_analyzer.py       # Analizador y modificador
├── ejemplo_uso.py        # Script con ejemplos completos
├── README.md             # Esta documentación
├── generated_project.als # Proyecto de ejemplo generado
└── jukeblocks - Pop.als  # Proyecto original para análisis

Requisitos

  • Python 3.6 o superior
  • Librerías estándar de Python (no requiere instalación adicional)

Uso Básico

1. Generar un nuevo proyecto

python3 als_generator.py

Esto genera un archivo generated_project.als con:

  • 1 GroupTrack (Drums)
  • 5 tracks MIDI (Kick, Snare, HiHat, Bass, Lead)
  • 8 clips MIDI con patrones de 16 notas cada uno
  • Configuración completa de mixer y routing

2. Analizar un proyecto existente

python3 als_analyzer.py mi_proyecto.als

Mostrará información detallada:

  • Versión de Ableton Live
  • Lista de tracks y sus propiedades
  • Clips MIDI y número de notas
  • Tiempo de inicio de cada clip

3. Modificar un proyecto

Randomizar velocidades

python3 als_analyzer.py mi_proyecto.als randomize-vel 70 127

Crea mi_proyecto_modified.als con velocidades aleatorias entre 70-127.

Transponer notas

python3 als_analyzer.py mi_proyecto.als transpose 5

Transpone todas las notas +5 semitonos.

Duplicar clips

python3 als_analyzer.py mi_proyecto.als duplicate 2 4

Duplica clips del track 2, creando 4 copias.

Exportar información

python3 als_analyzer.py mi_proyecto.als export proyecto_info.txt

Guarda un reporte completo en archivo de texto.

4. Ejecutar ejemplos completos

python3 ejemplo_uso.py

Ejecuta una demostración completa que incluye:

  • Generación de nuevos proyectos
  • Análisis de proyectos existentes
  • Múltiples modificaciones
  • Creación de variaciones
  • Resumen final con todos los archivos creados

Programación API

Clase ALSGenerator

from als_generator import ALSGenerator

# Crear generador
generator = ALSGenerator()

# Generar proyecto completo
als_tree = generator.create_full_als(
    project_name="Mi Proyecto",
    num_tracks=5,      # Número de tracks MIDI
    num_clips=8        # Número de clips por track
)

# Guardar archivo
generator.save_als(als_tree, "mi_proyecto.als")

Métodos principales:

  • create_ableton_root() - Crear elemento raíz Ableton
  • create_liveset_root() - Crear LiveSet base
  • create_track(name, type, color) - Crear track (MidiTrack/GroupTrack)
  • create_midi_clip(name, start_time, num_notes, midi_key) - Crear clip MIDI
  • create_full_als(project_name, num_tracks, num_clips) - Proyecto completo
  • save_als(element_tree, filename) - Guardar archivo comprimido

Clase ALSModificator

from als_analyzer import ALSModificator

# Cargar proyecto
modificator = ALSModificator("mi_proyecto.als")
modificator.load_als()

# Modificar
modificator.randomize_velocities(60, 127)
modificator.transpose_notes(3)
modificator.duplicate_clips(1, 2)

# Guardar modificado
modificator.save_als("mi_proyecto_modificado.als")

Métodos principales:

  • load_als() - Cargar archivo .als
  • print_project_info() - Mostrar información completa
  • get_tracks_info() - Obtener lista de tracks
  • get_clips_info() - Obtener lista de clips
  • randomize_velocities(min, max) - Randomizar velocidades
  • transpose_notes(semitones) - Transponer notas
  • duplicate_clips(track_index, num_duplicates) - Duplicar clips
  • save_als(output_filename) - Guardar archivo modificado
  • export_info(output_file) - Exportar información a texto

Estructura Técnica

Formato .als

Los archivos .als son archivos gzip que contienen un documento XML con:

<Ableton MajorVersion="4" MinorVersion="9.5_327" ...>
  <LiveSet>
    <Tracks>
      <GroupTrack> ... </GroupTrack>
      <MidiTrack> ... </MidiTrack>
      ...
    </Tracks>
    <Scenes> ... </Scenes>
    <MasterTrack> ... </MasterTrack>
    ...
  </LiveSet>
</Ableton>

Elementos Principales

  1. LiveSet - Contenedor principal del proyecto
  2. Tracks - Lista de tracks (GroupTrack, MidiTrack, ReturnTrack)
  3. DeviceChain - Cadena de dispositivos y mixer
  4. Clips - Clips MIDI con notas y eventos
  5. MidiNoteEvent - Eventos individuales de notas MIDI
  6. KeyTrack - Pistas por tecla MIDI
  7. Scenes - Escenas para Session View

Atributos Importantes

  • LomId - Live Object Model ID (identificador único)
  • LomIdView - ID de vista
  • Value - Valores numéricos (volumen, pan, etc.)
  • Manual - Valores manuales vs automatizados
  • Id - IDs específicos de elementos

Ejemplos de Uso Avanzado

Ejemplo 1: Crear un proyecto con patrón personalizado

from als_generator import ALSGenerator

generator = ALSGenerator()
als_tree = generator.create_full_als("Mi Proyecto", 3, 12)

# El proyecto incluye automáticamente:
# - GroupTrack "Drums" (176)
# - 3 tracks MIDI individuales
# - 12 clips con 16 notas cada uno
# - Mixer completo con sends
# - Escenas y Master track

generator.save_als(als_tree, "mi_proyecto_personalizado.als")

Ejemplo 2: Modificar proyecto existente

from als_analyzer import ALSModificator

modificator = ALSModificator("jukeblocks - Pop.als")

if modificator.load_als():
    # Mostrar información
    modificator.print_project_info()

    # Randomizar con rango específico
    modificator.randomize_velocities(80, 120)

    # Transponer hacia abajo
    modificator.transpose_notes(-2)

    # Duplicar en varios tracks
    for track_idx in [1, 2, 3]:
        modificator.duplicate_clips(track_idx, 2)

    # Guardar
    modificator.save_als("jukeblocks_variacion.als")

Ejemplo 3: Generar múltiples variaciones

import random
from als_analyzer import ALSModificator

base_project = "proyecto_base.als"

for i in range(5):
    modificator = ALSModificator(base_project)
    modificator.load_als()

    # Variación aleatoria
    transposicion = random.choice([-5, -2, 0, 2, 5])
    modificator.transpose_notes(transposicion)

    # Randomizar con diferentes rangos
    min_vel = random.randint(60, 90)
    max_vel = random.randint(100, 127)
    modificator.randomize_velocities(min_vel, max_vel)

    # Duplicar clips
    modificator.duplicate_clips(1, random.randint(1, 3))

    output = f"variacion_{i+1}.als"
    modificator.save_als(output)

Limitaciones Conocidas

  1. Tempo - El cambio de tempo requiere análisis más profundo del XML
  2. Audio Clips - Solo maneja clips MIDI (no audio)
  3. Dispositivos - No modifica dispositivos VST o built-in
  4. Samples - No incluye o modifica samples
  5. Automation - No maneja automatización de parámetros
  6. Compression - Solo compression gzip (no ZIP)

Desarrollo y Extensión

Para añadir nuevas funcionalidades:

  1. Nuevos tipos de track - Modificar create_track()
  2. Nuevos dispositivos - Añadir en _create_mixer_section()
  3. Nuevos eventos MIDI - Modificar create_midi_clip()
  4. Nuevas modificaciones - Añadir métodos en ALSModificator

Compatibilidad

  • Ableton Live 9.7.7
  • Ableton Live 12.0.5
  • Python 3.6+
  • Linux, macOS, Windows

Pruebas

Todos los archivos generados han sido probados y pueden abrirse directamente en Ableton Live 12 Suite.

Para verificar un archivo:

python3 als_analyzer.py archivo_generado.als info

Licencia

Este proyecto es de código abierto y está disponible bajo licencia MIT.

Soporte

Para reportar bugs o solicitar funcionalidades, crear un issue en el repositorio del proyecto.

Créditos

Desarrollado como ejemplo de ingeniería inversa del formato .als de Ableton Live.