# Guia del Analizador de Audio

## Resumen

El modulo `Analizador` proporciona analisis de audio en tiempo real:
- Niveles de volumen (pico y RMS)
- Espectro FFT
- Deteccion de BPM
- Medicion de loudness EBU R128 (via BASSloud)

## Uso Basico

```python
from basskit.alto_nivel.analizador import Analizador

analizador = Analizador(stream)

# Niveles (0.0 - 1.0)
izq, der = analizador.nivel()

# Niveles RMS
izq_rms, der_rms = analizador.nivel_rms()

# Espectro FFT
espectro = analizador.fft(512)  # 512 bandas
```

## FFT

Tamanos disponibles: 128, 256, 512, 1024, 2048, 4096

```python
espectro = analizador.fft(1024)
# Retorna lista de 1024 floats con la magnitud de cada banda
```

## Loudness EBU R128

Requiere BASSloud (bassloud.dll).

```python
# Iniciar medicion
analizador.iniciar_loudness()

# Leer valores (actualizados en tiempo real)
lufs_actual = analizador.loudness_actual()       # LUFS momentaneo
lufs_total = analizador.loudness_integrada()      # LUFS integrada
rango = analizador.loudness_range()               # LRA (Loudness Range)
peak = analizador.true_peak()                     # True Peak dBFS

# Detener medicion
analizador.detener_loudness()
```

## Deteccion de BPM

Requiere BASS_FX (bass_fx.dll). El stream debe ser DECODE.

```python
bpm = analizador.detectar_bpm()
print(f"BPM: {bpm:.1f}")
```

## Bajo Nivel

```python
import ctypes
from basskit.dlls.bass import bass
from basskit.constantes.bass import BASS_DATA_FFT1024, BASS_LEVEL_STEREO, BASS_LEVEL_RMS

# FFT
buf = (ctypes.c_float * 512)()
bass.BASS_ChannelGetData(stream, ctypes.byref(buf), BASS_DATA_FFT1024)

# Nivel RMS
levels = (ctypes.c_float * 2)()
bass.BASS_ChannelGetLevelEx(stream, levels, 0.02, BASS_LEVEL_STEREO | BASS_LEVEL_RMS)
```
