Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Faith Gamer

Pages: [1]
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:

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
 

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!
 

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.

2
Système / Re: Problème à l'Usage des mutexs
« le: Février 15, 2018, 12:56:30 pm »
C'est bon j'ai fini par trouver. Merci pour ton aide, lol.

3
Système / Re: Problème à l'Usage des mutexs
« le: Février 14, 2018, 09:21:23 pm »
Merci pour ta réponse rapide,
Je n'ai pas été renseigné dans mes cours de C++ sur l'usage des variables globales. Donc la je cherche sur google variables globale c++ mais je trouve pas grand chose, tu saurais me diriger ?

Par ailleurs en écrivant mon problème je me suis rendu compte que j'incluais deux fois objet.h, mais dans mon programme original les inclusions des .h ne se répètent pas. (Bon je vais quand même vérifier mais c'est un truc sur lequel j'ai été attentif.)

4
Système / Problème à l'Usage des mutexs
« le: Février 14, 2018, 08:57:38 pm »
Salut,

Alors voilà je ne sais pas trop comment utiliser un mutex afin qu'il puisse lock un boût de code à l'intérieur d'une méthode qui est elle même utilisée par un thread.

Voici  un code minimal qui montre ce que je fais dans mon programme et qui ne fonctionne pas (ça compile mais l'usage du mutex n'est pas fonctionnel)

main.cpp:
#include "objet.h"

int main()
{
    Maclasse obt;
    sf::Thread t(&Maclasse::func, &obt);

    t.launch();

    mutex.lock();

    for(int i=0;i<500;i++)
        std::cout << "aurevoir" << std::endl;

    mutex.unlock();

    return 0;
}
 
objet.h
#include "header.h"

class Maclasse
{
public:
    void func();
private:
};
 
objet.cpp
#include "objet.h"

void Maclasse::func()
{

    mutex.lock();

    for(int i=0;i<500;i++)
        std::cout << "bonjour" << std::endl;

    mutex.unlock();
}
 
header.h
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <math.h>

#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include <SFML/Network.hpp>

static sf::Mutex mutex;
 

Avec ce code, bonjour et aurevoir s'affichent mélangés dans la console, ce que je souhaiterai éviter.

Merci pour votre lecture et votre temps, j'attends vos conseils :).

Pages: [1]