Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Résolu]La musique se joue, mais les sons ne se lancent pas  (Lu 3597 fois)

0 Membres et 3 Invités sur ce sujet

Elfayer

  • Newbie
  • *
  • Messages: 42
    • Voir le profil
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 ?
« Modifié: Juin 03, 2013, 03:06:09 pm par Elfayer »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : La musique se joue, mais les sons ne se lancent pas
« Réponse #1 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... ;)
Laurent Gomila - SFML developer

Elfayer

  • Newbie
  • *
  • Messages: 42
    • Voir le profil
Re : La musique se joue, mais les sons ne se lancent pas
« Réponse #2 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
« Modifié: Juin 03, 2013, 02:39:25 pm par Elfayer »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : La musique se joue, mais les sons ne se lancent pas
« Réponse #3 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.
Laurent Gomila - SFML developer

Elfayer

  • Newbie
  • *
  • Messages: 42
    • Voir le profil
Re : La musique se joue, mais les sons ne se lancent pas
« Réponse #4 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();
}