-
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 ?
-
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... ;)
-
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
-
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.
-
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();
}