# Guia de Audio 3D

## Resumen

BASS soporta posicionamiento 3D de fuentes de audio.
El sonido se mueve en el espacio dependiendo de la posicion relativa
de la fuente respecto al oyente.

Requisitos:
- Inicializar con `BASS_DEVICE_3D`
- Los streams deben ser mono (`BASS_SAMPLE_MONO`) y 3D (`BASS_SAMPLE_3D`)

## Ejemplo Basico

```python
import ctypes, math
from basskit.dlls.bass import bass
from basskit.constantes.bass import BASS_UNICODE, BASS_SAMPLE_MONO, BASS_SAMPLE_3D, BASS_DEVICE_3D
from basskit.estructuras.bass import BASS_3DVECTOR

# Inicializar con 3D
bass.BASS_Init(-1, 44100, BASS_DEVICE_3D, 0, None)

# Crear stream 3D (debe ser mono)
stream = bass.BASS_StreamCreateFile(0, ruta, 0, 0, BASS_UNICODE | BASS_SAMPLE_MONO | BASS_SAMPLE_3D)

# Posicionar fuente a la derecha
pos = BASS_3DVECTOR(5.0, 0.0, 0.0)  # x=derecha
bass.BASS_ChannelSet3DPosition(stream, ctypes.byref(pos), None, None)
bass.BASS_Apply3D()  # Aplicar cambios

bass.BASS_ChannelPlay(stream, 0)

# Mover fuente en circulo
for angulo in range(360):
    rad = math.radians(angulo)
    pos.x = math.sin(rad) * 5.0
    pos.z = math.cos(rad) * 5.0
    bass.BASS_ChannelSet3DPosition(stream, ctypes.byref(pos), None, None)
    bass.BASS_Apply3D()
```

## BASS_3DVECTOR

```
x: positivo=derecha,  negativo=izquierda
y: positivo=arriba,   negativo=abajo
z: positivo=adelante, negativo=atras
```

## Funciones 3D Disponibles

| Funcion | Descripcion |
|---------|-------------|
| BASS_ChannelSet3DPosition | Posicion de la fuente |
| BASS_ChannelGet3DPosition | Obtener posicion |
| BASS_ChannelSet3DAttributes | Modo 3D, distancias |
| BASS_ChannelGet3DAttributes | Obtener atributos |
| BASS_Set3DPosition | Posicion del oyente |
| BASS_Get3DPosition | Obtener posicion oyente |
| BASS_Set3DFactors | Factores de distancia/rolloff |
| BASS_Get3DFactors | Obtener factores |
| BASS_Apply3D | Aplicar todos los cambios |
