Accueil ⇒ Informatique ⇒ Bibliothèques ⇒ Initiation à FMOD

Initiation à FMOD

Introduction

Cet article est une brève introduction à FMOD, une alternativ simple et puissante à DirectMusic ou SDL. Cette bibliothèque gratuite vous permet de jouer simplement n'importe quel type de média audio dans vos projets.

FMOD est gratuite : vous ne pourrez cependant pas la distribuer avec des applications payantes.

Implémentation

Initialisation

L'initialisation de la bibliothèque se fait par un simple appel à la fonction FSOUND_Init. Celle-ci prend trois arguments : le taux d'échantillonnage (généralement : 44100 Hz), le nombre de canaux maximum et les effets supplémentaires.

Le nombre de canaux correspond au nombre de séquences différentes que vous pourrez jouer simultanément. Il ne dépasse généralement pas 16, si ce n'est pour des ambiances sonores très fournies. Les ressources matérielles nécessaires dépendent évidemment du nombre de canaux alloués.

Avant de passer à la suite, examinons le code suivant :

const int NB_CANAUX = 4;
 
FSOUND_STREAM *Musique;
FSOUND_SAMPLE *Clic;
FSOUND_SAMPLE *Feu;
 
void InitialiserFMOD()
{
    FSOUND_Init(44100, NB_CANAUX, 0);
 
    Clic = FSOUND_Sample_Load(FSOUND_FREE, "clic.wav", 1, 0);
    Feu = FSOUND_Sample_Load(FSOUND_FREE, "fire.midi", 0, 0);
    Musique = FSOUND_Stream_OpenFile("musique.mp3", FSOUND_LOOP_NORMAL, 0);
 
    for (int canal = 0; canal < NB_CANAUX; canal++°
        FSOUND_SetVolume(canal, 142);
}

On commence par y déclarer un stream (flux) de musique nommé Musique. Les streams sont les types de FMOD supportant le chargement d'importants fichiers musicaux. Ensuite, on déclare deux samples qui correspondent à des pistes brèves chargées en mémoire pour être répétées à volonté, comme un bruit de pas, une détonation, etc.

Dans notre fonction, nous commençons par initialiser la bibliothèque comme vu ci-dessus, puis nous chargeons les samples avec les fichiers sonores appropriés - notez que vous pouvez charger n'importe quel type de fichier audio. Pour ce faire, on utilise la fonction FSOUND_Sample_Load qui nécessite quatre paramètres : le premier est correspond au canal où l'on voudra jouer le son - FSOUND_FREE laisse à FMOD le choix de celui-ci - suivi de l'// adresse du fichier du type de lecture //et d'un dernier paramètre que nous verrons plus tard.

On charge ensuite le stream musical grâce à la fonction FSOUND_Stream_OpenFile, qui nécessite trois arguments : l'// adresse du fichier le type de lecture et toujours ce dernier paramètre énigmatique. Notez que les streams musicaux, une fois appelés, sont répétés jusqu'à ce que vous les stoppiez par un appel à la fonction dédiée, au contraire des samples qui ne sont joués qu'une fois. La qualité sonore diffère égalemment entre un sample et un stream

Pour finir on règle le volume des canaux, ce qui se fait avec la fonction FSOUND_SetVolume nécessitant comme paramètres le numéro de canal (commence à 0), ainsi que le niveau de volume (de 0 à 255).

Lecture des fichiers sonores

Désormais FMOD est initialisée, il ne reste plus qu'à jouer les sons chargés !

Pour jouer un sample, on utilisera la fonction FSOUND_PlaySound() qui prend en paramètres le canal à utiliser ainsi que l'// objet sample

Pour lire un stream, on utilise la fonction FSOUND_Stream_Play qui nécessite les mêmes paramètres que la précédente, si ce n'est le second argument qui est un fichier stream et non un sample, bien entendu. Pour stopper la lecture, on utilise FSOUND_Stream_Stop, qui ne nécessite que l'objet stream comme paramètre.

On peut proposer à titre d'exemples les quelques fonctions qui suivent :

int prochainCanal = 0;
 
void JouerSample(FSOUND_SAMPLE *sample)
{
    FSOUND_PlaySound(prochainCanal, sample);
    prochainCanal = ((prochainCanal + 1) % NB_CANAUX);
}
 
void LireStream(FSOUND_STREAM *stream)
{
    FSOUND_Stream_Play(prochainCanal, stream);
    prochainCanal = ((prochainCanal + 1) % NB_CANAUX);
}

Quitter proprement

Examinons le code de fermeture suivant :

void FermerFMOD()
{
    FSOUND_Sample_Free(Clic);
    FSOUND_Sample_Free(Feu);
    FSOUND_Stream_Close(Musique);
    FSOUND_Close();
}

On libère ici samples et streams grâce aux fonctions appropriées, soient FSOUND_Sample_Free pour libérer un sample et FSOUND_Stream_Close pour libérer un stream. Ceci fait, il ne reste plus qu'à libérer les quelques ressources restantes allouées par la bibliothèque via la fonction FSOUND_Close, sans paramètre.

Conclusion

Cet article nous a permis d'aborder les méthodes nécessaires à une utilisation courante de FMOD. Bien entendu, la bibliothèque ne se limite pas aux seules fonctions décrites ici, mais celles-ci devraient vous suffire pour gérer correctement la partie sonore de vos projets.

Pour de plus amples informations, vous pouvez aussi consulter les pages suivantes :