Forum de la communauté SFML

Aide => Audio => Discussion démarrée par: Elfayer le Juin 03, 2013, 02:13:20 pm

Titre: [Résolu]La musique se joue, mais les sons ne se lancent pas
Posté par: Elfayer le Juin 03, 2013, 02:13:20 pm
Bonjour,

voici le code de ma classe Sound :

#include "Sound.hpp"

Sound::Sound()
{
  sf::SoundBuffer       buffer;

  music_.OpenFromFile("./ressources/music.ogg");
  music_.SetLoop(true);
  buffer.LoadFromFile("./ressources/explosion.wav");
  explosionSound_.SetBuffer(buffer);
}

Sound::~Sound()
{
}

void    Sound::playMusic()
{
  music_.Play();
}

void    Sound::playExplosion()
{
  explosionSound_.Play();
}
 

Lorsque j'appel playMusic(), sa fonctionne, mais les appels à playExplosion() ou playPowerUp() ne joue aucun sons ou alors je ne les entends pas.

Est-ce que je fais quelque chose de mal ?
Titre: Re : La musique se joue, mais les sons ne se lancent pas
Posté par: Laurent le Juin 03, 2013, 02:20:06 pm
Ton SoundBuffer est local au constructeur, du coup quand tu joues tes sons il n'existe plus. Or c'est lui qui contient les données audio à jouer... ;)
Titre: Re : La musique se joue, mais les sons ne se lancent pas
Posté par: Elfayer le Juin 03, 2013, 02:36:15 pm
J'ai essayé ca, toujours rien. Les fonctions LoadFromFile() retournent true.

Sound.cpp
Sound::Sound()
{
  music_.OpenFromFile("./ressources/music.ogg");
  music_.SetLoop(true);
  explosionBuffer_.LoadFromFile("./ressources/explosion.wav");
}

Sound::~Sound()
{
}

void    Sound::playMusic()
{
  music_.Play();
}

void    Sound::playExplosion()
{
  sf::Sound     sound(explosionBuffer_);

  sound.Play();
}
 

Sound.hpp
#include <SFML/Audio.hpp>

#ifndef SOUND_HPP_
#define SOUND_HPP_

class   Sound
{
public:
  Sound();
  ~Sound();
  void                  playMusic();
  void                  playExplosion();
private:
  sf::Music             music_;
  sf::SoundBuffer       explosionBuffer_;
};

#endif
Titre: Re : La musique se joue, mais les sons ne se lancent pas
Posté par: Laurent le Juin 03, 2013, 02:51:32 pm
Là c'est ton son qui est local et détruit immédiatement. Le buffer et le son doivent rester tous les deux en vie aussi longtemps qu'ils sont utilisés.
Titre: Re : La musique se joue, mais les sons ne se lancent pas
Posté par: Elfayer le Juin 03, 2013, 03:05:55 pm
Ok, sa marche ! =)

#include <SFML/Audio.hpp>

#ifndef SOUND_HPP_
#define SOUND_HPP_

typedef struct  sound
{
  sf::SoundBuffer       buffer;
  sf::Sound             sound;
}               t_sound;

class   Sound
{
public:
  Sound();
  ~Sound();
  void          playMusic();
  void          playExplosion();
private:
  sf::Music     music_;
  t_sound       explosion_;
};

#endif

#include "Sound.hpp"

Sound::Sound()
{
  music_.OpenFromFile("./ressources/music.ogg");
  music_.SetLoop(true);
  explosion_.buffer.LoadFromFile("./ressources/explosion.wav");
  explosion_.sound.SetBuffer(explosion_.buffer);
}

Sound::~Sound()
{
}

void    Sound::playMusic()
{
  music_.Play();
}

void    Sound::playExplosion()
{
  explosion_.sound.Play();
}