# Guia de WASAPI

## Concepto

BASSWASAPI permite usar la API Windows Audio Session (WASAPI) directamente,
ofreciendo menor latencia y modo exclusivo que DirectSound.

## Listar dispositivos WASAPI

```python
import ctypes
from basskit.dlls.basswasapi import basswasapi
from basskit.estructuras.addons import BASS_WASAPI_DEVICEINFO

info = BASS_WASAPI_DEVICEINFO()
i = 0
while basswasapi.BASS_WASAPI_GetDeviceInfo(i, ctypes.byref(info)):
    nombre = info.name.decode("utf-8", errors="replace") if info.name else "?"
    print(f"  [{i}] {nombre} (tipo={info.type}, flags=0x{info.flags:X})")
    print(f"      Freq: {info.mixfreq} Hz, Canales: {info.mixchans}")
    i += 1
```

## Modo compartido

```python
from basskit.dlls.basswasapi import basswasapi
from basskit.dlls.bass import bass
from basskit.callbacks.addons import WASAPIPROC
from basskit.callbacks.bass import mantener_callback

bass.BASS_Init(0, 44100, 0, 0, None)  # Sin sonido (WASAPI maneja salida)

@WASAPIPROC
def wasapi_proc(buffer, length, user):
    # Mezclar audio de BASS al buffer WASAPI
    return bass.BASS_ChannelGetData(canal_decode, buffer, length)

mantener_callback(wasapi_proc)

basswasapi.BASS_WASAPI_Init(-1, 0, 0, 0, 0.0, 0.0, wasapi_proc, None)
basswasapi.BASS_WASAPI_Start()

# ... reproducir ...

basswasapi.BASS_WASAPI_Stop(1)
basswasapi.BASS_WASAPI_Free()
bass.BASS_Free()
```

## Modo exclusivo

```python
from basskit.constantes.addons import BASS_WASAPI_EXCLUSIVE

basswasapi.BASS_WASAPI_Init(
    -1,           # Dispositivo por defecto
    44100,        # Frecuencia
    2,            # Canales
    BASS_WASAPI_EXCLUSIVE,  # Modo exclusivo
    0.0,          # Buffer (auto)
    0.0,          # Periodo (auto)
    wasapi_proc,
    None,
)
```

## Control de volumen WASAPI

```python
from basskit.constantes.addons import BASS_WASAPI_CURVE_LINEAR

# Obtener volumen actual
vol = basswasapi.BASS_WASAPI_GetVolume(BASS_WASAPI_CURVE_LINEAR)
print(f"Volumen: {vol:.0%}")

# Establecer volumen
basswasapi.BASS_WASAPI_SetVolume(BASS_WASAPI_CURVE_LINEAR, 0.5)

# Mute
basswasapi.BASS_WASAPI_SetMute(1)  # Silenciar
basswasapi.BASS_WASAPI_SetMute(0)  # Restaurar
```
