====== FMOD ======
Para utilizarla debemos incluir en el código ''fmod.h'' y vincular ''fmodvc.lib'' (si usamos Visual Studio).
===== Inicializar =====
Antes de utilizar fmod debemos inicializar el sistema de sonido, para ello utilizamos **FSOUND_Init**.
FSOUND_Init(44100, 32, 0);
- El primer parámetro es el ratio de salida, entre 4000hz y 65535hz.
- El segundo el número máximo de canales gestionados por software, el máximo gestionado por hardware lo podemos hacer haciendo una llamada a **FSOUND_GetMaxChannels**.
- El último son las flags, opciones que queramos pasarle.
===== Reproducir sonidos =====
Cuando queramos reproducir sonidos pequeños mediante ficheros (mp3, wav, ogg...) que se vayan a reproducir varias veces y que queramos cargar en memoria, utilizaremos la función **FSOUND_Sample_Load** para cargar el fichero en memoria y **FSOUND_PlaySound** (o **FSOUND_PlaySoundEx**) para reproducirlo. \\
**FSOUND_Sample_Load** devuelve un puntero a un **FSOUND_SAMPLE** y recibe como parámetros:
- El indice de sonido, un int de valor 0 o mayor. Cada sonido debe tener un indice, si un indice vuelve a ser asignado el sonido se reemplaza.
- Ruta del archivo o puntero a los datos ya cargados en memoria.
- El modo, uno de los FSOUND_MODES, el más general es ''FSOUND_NORMAL''.
- Los dos siguientes pueden ser asignados a 0.
**FSOUND_PlaySound** únicamente recibe como parámetros el canal y el puntero al FSOUND_SAMPLE deseado. Si dos sonidos están en el mismo canal, cuando uno se reproduzca el otro quedará en silencio. Para reproducirlos a la vez han de estar en distintos canales. Aunque como canal podemos pasarle ''FSOUND_FREE'' que eligirá automáticamente uno libre. Retorna el número de canal asignado. \\ \\
===== Reproducir streams =====
Primero deberemos abrir el stream mediante **FSOUND_Stream_Open** la cual recibe el nombre y el modo, el cual puede ser FSOUND_NORMAL, los otros dos argumentos pueden ser asignados a 0. \\
Para reproducir un stream utilizaremos **FSOUND_Stream_Play** que recibe el canal y el FSOUND_STREAM creado por la anterior función, devuelve un int correspondiente al canal.
===== General =====
==== Asignar volumen ====
Podemos asignar el volumen de un canal mediate **FSOUND_SetVolume**, esta función acepta un int, el número de canal, y un valor entre 0 y 255 correspondiente al volumen. \\
Como canal podemos pasarle FSOUND_ALL y afectará a todos los canales. \\
Si el canal no está en uso el volumen no se asignará.
==== Crear un bucle ====
Para ello utilizaremos FSOUND_SetLoopMode, indicando el canal y tipo de bucle (generalmente usaremos FSOUND_LOOP_NORMAL).
FSOUND_SetLoopMode(ch, FSOUND_LOOP_NORMAL);
Para quitar el bucle lo llamaremos con FSOUND_LOOP_OFF. \\
Si el canal no está en uso el bucle no se asignará.
==== Pausar ====
**FSOUND_SetPaused** recibe un canal y un bool, si es true el canal será pausado, si es false se reproducirá.
==== Otros ====
* Coger el ''FSOUND_SAMPLE'' de un canal mediante **FSOUND_GetCurrentSample**.
* **FSOUND_IsPlaying** retorna si un canal está sonando o no.