1
Audio / sf::SoundBuffer dans un std::vector
« le: Novembre 30, 2018, 02:11:43 am »
Salut,
J'ai une classe qui englobe les ressources sonores de mon programme.
je stocke des SoundBuffer dans un vector pour charger les sons en mémoire une seule fois.
Puis j'instancie un sf::Sound quand je veux jouer un son, comme ça je peux jouer en même temps plusieurs fois le même fichier audio.
voici ce que j'ai fait:
Pour que ça marche je suis obligé de faire ça:
Je précise que j'ai essayé d'utiliser des pointeurs sur sf::SoundBuffer ça n'a rien changé.
Je souhaite comprendre pourquoi la première version de mon code ne fonctionne pas, et savoir si la version deux est viable, j'ai l'impression que c'est pas une solution intelligente parce-que m_sound je comprends pas quel est son rôle, il "retient" le fichier dans SoundBuffer ?...
Merci pour votre attention.
J'ai une classe qui englobe les ressources sonores de mon programme.
je stocke des SoundBuffer dans un vector pour charger les sons en mémoire une seule fois.
Puis j'instancie un sf::Sound quand je veux jouer un son, comme ça je peux jouer en même temps plusieurs fois le même fichier audio.
voici ce que j'ai fait:
class Sounds{
public:
static void loadBuffers()
{
for(int i : nbfiles){
m_buffer.push_back(sf::SoundBuffer());
m_buffer.back().loadFromFile("directory/"+to_string(i)+".ogg")) //j'ai créé mon vector de buffer
}
static void playSound(int n)
{
sf::Sound sound(m_buffer.at(n)); //je pioche dedans quand j'en ai besoin
m_copy.push_back(sound);
m_copy.back().play();
}
private:
static std::vector<sf::SoundBuffer> m_buffer;
static std::vector<sf::Sound> m_copy;
};
Sounds::loadBuffers();
Sounds::playSound(0); // mais la aucun son
public:
static void loadBuffers()
{
for(int i : nbfiles){
m_buffer.push_back(sf::SoundBuffer());
m_buffer.back().loadFromFile("directory/"+to_string(i)+".ogg")) //j'ai créé mon vector de buffer
}
static void playSound(int n)
{
sf::Sound sound(m_buffer.at(n)); //je pioche dedans quand j'en ai besoin
m_copy.push_back(sound);
m_copy.back().play();
}
private:
static std::vector<sf::SoundBuffer> m_buffer;
static std::vector<sf::Sound> m_copy;
};
Sounds::loadBuffers();
Sounds::playSound(0); // mais la aucun son
Pour que ça marche je suis obligé de faire ça:
class Sounds{
public:
static void loadBuffers()
{
for(int i : nbfiles){
m_buffer.push_back(sf::SoundBuffer());
m_buffer.back().loadFromFile("directory/"+to_string(i)+".ogg"))
m_sound.push_back(sf::Sound(m_buffer.back())); //j'associe le SoundBuffer à un sf::Sound dès sa création.
}
static void playSound(int n)
{
sf::Sound sound(m_buffer.at(n)); //ici rien ne change
m_copy.push_back(sound);
m_copy.back().play();
}
private:
static std::vector<sf::SoundBuffer> m_buffer;
static std::vector<sf::Sound> m_copy;
static std::vector<sf::Sound> m_sound; //mais ça à l'air superflu
};
Sounds::loadBuffers();
Sounds::playSound(0); //ça marche!
public:
static void loadBuffers()
{
for(int i : nbfiles){
m_buffer.push_back(sf::SoundBuffer());
m_buffer.back().loadFromFile("directory/"+to_string(i)+".ogg"))
m_sound.push_back(sf::Sound(m_buffer.back())); //j'associe le SoundBuffer à un sf::Sound dès sa création.
}
static void playSound(int n)
{
sf::Sound sound(m_buffer.at(n)); //ici rien ne change
m_copy.push_back(sound);
m_copy.back().play();
}
private:
static std::vector<sf::SoundBuffer> m_buffer;
static std::vector<sf::Sound> m_copy;
static std::vector<sf::Sound> m_sound; //mais ça à l'air superflu
};
Sounds::loadBuffers();
Sounds::playSound(0); //ça marche!
Je précise que j'ai essayé d'utiliser des pointeurs sur sf::SoundBuffer ça n'a rien changé.
Je souhaite comprendre pourquoi la première version de mon code ne fonctionne pas, et savoir si la version deux est viable, j'ai l'impression que c'est pas une solution intelligente parce-que m_sound je comprends pas quel est son rôle, il "retient" le fichier dans SoundBuffer ?...
Merci pour votre attention.