Differences between revisions 3 and 4
Revision 3 as of 2009-01-06 23:06:04
Size: 2996
Comment: en cours ... résolution du SetOutput
Revision 4 as of 2009-01-06 23:11:19
Size: 5224
Comment: en cours
Deletions are marked like this. Additions are marked like this.
Line 25: Line 25:
'''inc/*.h :''' Les fichiers d'entête permettant à votre compilateur de connaitre les ''prototype des fonctions de FMOD. '''inc/*.h :''' Les fichiers d'entête permettant à votre compilateur de connaitre les ''prototype des fonctions de FMOD.''
Line 47: Line 47:
Exemple:
{{{
gcc -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/local/include -L/usr/lib -lSDL -lSDL_image -L/usr/local/lib -lfmod-3.75 libtest.c -o libtest
}}}
Line 59: Line 62:
{{{
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <fmod.h>

int main(int argc, char *argv[])
{
  SDL_Surface *ecran = NULL, *viseur = NULL;
  SDL_Event event;
  SDL_Rect position;
  int continuer = 1;
  FSOUND_SAMPLE *tir = NULL;
  int test1 = 0;
  FSOUND_SetOutput(FSOUND_OUTPUT_ALSA);

  /* Initialisation de FMOD */
  test1 = FSOUND_Init(44100, 32, 0);
  if (test1)
  {
    fprintf(stderr, "FSOUND initialisé\n");
  }
  else
  {
    fprintf(stderr, "FSOUND par en sucette?\n");
  }

  /* Chargement du son et vérification du chargement */
  tir = FSOUND_Sample_Load(FSOUND_FREE, "pan.wav", 0, 0, 0);
  if (tir == NULL)
  {
    fprintf(stderr, "Impossible de lire pan.wav\n");
    //exit(EXIT_FAILURE);
  }

  /* Initialisation de la SDL */
  SDL_Init(SDL_INIT_VIDEO);

  SDL_ShowCursor(SDL_DISABLE);
  ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
  SDL_WM_SetCaption("Gestion du son avec FMOD", NULL);

  viseur = IMG_Load("viseur.png");


  while (continuer)
  {
    SDL_WaitEvent(&event);


    switch(event.type)
    {
      case SDL_QUIT:
        continuer = 0;
        break;
      case SDL_MOUSEBUTTONDOWN:
        /* Lorqu'on clique, on joue le son */
        FSOUND_PlaySound(FSOUND_FREE, tir);
        break;
      case SDL_MOUSEMOTION:
                /* Lorsqu'on déplace la souris, on place le centre du viseur à la position de la souris
        ... D'où notamment le "viseur->w / 2" pour réussir à faire cela */
        position.x = event.motion.x - (viseur->w / 2);
        position.y = event.motion.y - (viseur->h / 2);
        break;
    }

    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
    SDL_BlitSurface(viseur, NULL, ecran, &position);
    SDL_Flip(ecran);
  }

  /* On ferme la SDL */
  SDL_FreeSurface(viseur);
  SDL_Quit();

  /* On libère le son et on ferme FMOD */
  FSOUND_Sample_Free(tir);
  FSOUND_Close();

  return EXIT_SUCCESS;
}}}

[:fr/DebianWiki/EditorGuide#traduction:Traduction(s)] : aucune

(!) [:/Discussion:Discussion]


[http://fr.wikipedia.org/wiki/FMOD FMOD] est une libraire commerciale non distribuée par Debian. Elle permet de géréer les sons et la musique dans le développement d'un projet C/C++.

  • Ici nous traitons de la manière de l'installer sur notre système préféré.

  • ?TableOfContents(2)

FMOD version 3

Récupération de la librairie de développement

  • Aller sur le site officel http://www.fmod.org

  • Aller dans la section Download et télécharger la version FMOD 3 Programmers API pour Linux

Vous devriez télécharger un fichier nommé fmodapi375linux.tar.gz (ou similaire)

  • Décompresser cette archives dans votre répertoire personnel ~/

Installation de la Librairie dans le système

Ce qu'il faut installer

  • ~/fmodapi375linux/fmodapi375linux/api/libfmod-3.75.so
  • ~/fmodapi375linux/fmodapi375linux/api/inc/*.h

libfmod-3.75.so : C'est la librairie en tant que telle. inc/*.h : Les fichiers d'entête permettant à votre compilateur de connaitre les prototype des fonctions de FMOD.

La librairie

En principe, vos librairies maintenues par les dépôts Debian sont installés dans /usr/lib. Nous sommes dans un cas particulier car nous installons une librairie non maintenue. L'installation s'effectue dans /usr/local/lib.

sudo cp ~/fmodapi375linux/api/libfmod-3.75.so /usr/local/lib/

Les entêtes

Même problématique. Les entêtes sont à installer dans /usr/local/include au lien de /usr/include.

sudo cp ~/fmodapi375linux/api/include/*.h /usr/local/include/

Compilation

gcc

En ligne de commande, ajouter la librairie FMOD:

gcc [OPTIONS] /usr/local/lib/libfmod-3.75.so -o [EXE]

Exemple:

gcc -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/local/include -L/usr/lib -lSDL -lSDL_image -L/usr/local/lib -lfmod-3.75 libtest.c -o libtest

KDevelop

  • Ouvrir votre projet C++
  • Aller dans {{{Projet > Options du projet > Options de "configure" > C++ > Drapeaux du compilateur (CXXFLAGS)

  • Ajouter l'argument suivant aux arguments déjà présent:

/usr/local/lib/libfmod-3.75.so

Test

A rédiger ...

#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <fmod.h>

int main(int argc, char *argv[])
{
  SDL_Surface *ecran = NULL, *viseur = NULL;
  SDL_Event event;
  SDL_Rect position;
  int continuer = 1;
  FSOUND_SAMPLE *tir = NULL;
  int test1 = 0;
  FSOUND_SetOutput(FSOUND_OUTPUT_ALSA);

  /* Initialisation de FMOD */
  test1 = FSOUND_Init(44100, 32, 0);
  if (test1)
  {
    fprintf(stderr, "FSOUND initialisé\n");
  }
  else
  {
    fprintf(stderr, "FSOUND par en sucette?\n");
  }

  /* Chargement du son et vérification du chargement */
  tir = FSOUND_Sample_Load(FSOUND_FREE, "pan.wav", 0, 0, 0);
  if (tir == NULL)
  {
    fprintf(stderr, "Impossible de lire pan.wav\n");
    //exit(EXIT_FAILURE);
  }

  /* Initialisation de la SDL */
  SDL_Init(SDL_INIT_VIDEO);

  SDL_ShowCursor(SDL_DISABLE);
  ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
  SDL_WM_SetCaption("Gestion du son avec FMOD", NULL);

  viseur = IMG_Load("viseur.png");


  while (continuer)
  {
    SDL_WaitEvent(&event);


    switch(event.type)
    {
      case SDL_QUIT:
        continuer = 0;
        break;
      case SDL_MOUSEBUTTONDOWN:
        /* Lorqu'on clique, on joue le son */
        FSOUND_PlaySound(FSOUND_FREE, tir);
        break;
      case SDL_MOUSEMOTION:
                /* Lorsqu'on déplace la souris, on place le centre du viseur à la position de la souris
        ... D'où notamment le "viseur->w / 2" pour réussir à faire cela */
        position.x = event.motion.x - (viseur->w / 2);
        position.y = event.motion.y - (viseur->h / 2);
        break;
    }

    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
    SDL_BlitSurface(viseur, NULL, ecran, &position);
    SDL_Flip(ecran);
  }

  /* On ferme la SDL */
  SDL_FreeSurface(viseur);
  SDL_Quit();

  /* On libère le son et on ferme FMOD */
  FSOUND_Sample_Free(tir);
  FSOUND_Close();

  return EXIT_SUCCESS;

Dépannage

Liens externes