# Arquitectura de basskit

## Estructura del proyecto

```
basskit/
├── pyproject.toml          # Configuración de empaquetado
├── build_wheel.bat         # Script de generación de wheel
├── README.md               # Documentación principal
├── CHANGELOG.md            # Historial de cambios
├── src/
│   └── basskit/
│       ├── __init__.py     # Punto de entrada del paquete
│       ├── __main__.py     # CLI: python -m basskit
│       ├── _version.py     # Versión del paquete
│       ├── excepciones.py  # Jerarquía de excepciones
│       ├── tipos.py        # Tipos ctypes comunes
│       ├── rutas.py        # Resolución de rutas de DLL
│       ├── cargador.py     # Cargador dinámico de DLL
│       ├── constantes/     # Constantes por módulo
│       │   ├── bass.py     # Constantes de bass.dll
│       │   └── ...
│       ├── estructuras/    # Estructuras ctypes
│       │   ├── bass.py     # Estructuras de bass.dll
│       │   └── ...
│       ├── callbacks/      # Tipos callback
│       │   ├── bass.py     # Callbacks de bass.dll
│       │   └── ...
│       ├── dlls/           # Bindings de bajo nivel
│       │   ├── bass.py     # Funciones de bass.dll
│       │   └── ...
│       ├── alto_nivel/     # API Pythonica
│       │   ├── reproductor.py
│       │   └── ...
│       ├── herramientas/   # Utilidades
│       │   └── diagnostico.py
│       └── data/
│           └── dlls/x64/   # DLL incluidas
├── tests/                  # Tests
├── examples/               # Ejemplos
├── docs/                   # Documentación
└── planing/                # Estado del desarrollo
```

## Capas de la arquitectura

### 1. Infraestructura (cargador, rutas, tipos)
Gestiona la carga de DLL, resolución de rutas y definición de tipos base.

### 2. Definiciones (constantes, estructuras, callbacks)
Define todo lo necesario para interactuar con la API C de BASS.

### 3. Bindings de bajo nivel (dlls/)
Wrappers directos de las funciones exportadas por cada DLL.

### 4. API de alto nivel (alto_nivel/)
Clases y funciones Pythonicas para uso cómodo.

### 5. Herramientas (herramientas/)
Diagnóstico, verificación y utilidades.

## Principios de diseño

1. **Modularidad**: Cada DLL/add-on tiene sus propios módulos.
2. **Dos niveles de API**: Bajo nivel (fiel a BASS) y alto nivel (Pythónico).
3. **Carga perezosa**: Las DLL se cargan solo cuando se necesitan.
4. **Caché**: Las DLL cargadas se almacenan en caché.
5. **Validación temprana**: Plataforma y Python se validan al cargar.
6. **Errores claros**: Excepciones descriptivas en español.
7. **Solo 64 bits**: Sin soporte x86 para mantener la simplicidad.
