Forum de la communauté SFML

Aide => Général => Discussion démarrée par: Milerius le Mai 17, 2017, 11:41:40 pm

Titre: Problèmes avec SFML la spatialisation du son en 3D dans un contexte comme ogre3d
Posté par: Milerius le Mai 17, 2017, 11:41:40 pm
[EDIT] : je viens de voir qu'il y avait une section Audio pour l'aide , si il est possible de déplacer ma demande dans la bonne section.

Bonjour,

Je suis actuellement en train de faire un projet pour mon école en deuxième année sous ogre3d,
il s'agit d'un jeux vidéo 3d, un mix entre un Bomberman et un Gauntlet

J'aimerais pouvoir jouer du son en fonction de mon placement sur mon environnement 3d, ma scène, j'ai hélas un fort problème, mon son s'entends que je sois de loin ou de prêt

Voici comment je procède selon la documentation SFML audio, tous d'abord mon endroit de départ :
(https://img15.hostingpics.net/pics/812995ArrogantStudio05162017214517495.png) (https://www.hostingpics.net/viewer.php?id=812995ArrogantStudio05162017214517495.png),

Ensuite l'endroit où le son est censé être émis :

(https://img15.hostingpics.net/pics/279706ArrogantStudio05162017200539628.png) (https://www.hostingpics.net/viewer.php?id=279706ArrogantStudio05162017200539628.png)

Le Squelette qui se frappe le torse est censé émettre un son quand il effectue cette action,

Voici un bout du code en exemple :
là où je set la position du squelette
_cesar->setPosition(710.6, 30, 557.64);
 

Ensuite là ou je set le Listener qui est ma caméra
       
sf::Listener::setGlobalVolume(50);
sf::Listener::setPosition(_cameraMan->getCamera()->getPosition().x,
_cameraMan->getCamera()->getPosition().y, _cameraMan->getCamera()->getPosition().z);
evt::EventManager::getSingletonPtr()->emit<evt::SoundEffectSpatialization>(effect::ImpactBoom, _cesar->getPosition(), true);
 

(_cameraman) est donc ma position actuelle de ma camera, moi , et mon Listener,
le Event Manager emit un type d’évent, qui prends en paramètre ce qui me permet de construire mon objet, l'enumeration relative au son, la position du son , ici c'est celle du Squelette dans l'arene, et si je veut faire loop le son, en effet je veut qu'on puisse entendre le Squelette ce frappé le torse en boucle alors j'envoie true)

Maintenant là où j'update mon Listener a chaque frame :
     
_soundMgr->update(evt.timeSinceLastFrame,
TestScene::getSingletonPtr()->_cameraMan->getCamera()->getPosition(),
TestScene::getSingletonPtr()->_cameraMan->getCamera()->getDirection());
 
void SoundEffectsManager::update(float timeSinceLastFrame, const Ogre::Vector3& position,
const Ogre::Vector3& direction)
        {
            sf::Listener::setPosition(static_cast<float> (position.x),
                static_cast<float> (position.y),
                static_cast<float> (position.z));
            //sf::Listener::setDirection(direction.x, direction.y, direction.z);
        }
 

là où le son est joué :
  void SoundEffectsManager::playSound(const effect& effectId, const Ogre::Vector3& position, bool loop)
        {
            if (!_effects.isLoaded(effectId))
                _effects.loadResource(effectId, _effectsPath[effectId]);
            _sndBuffer = _effects.getResource(effectId);
            _snd.setBuffer(_sndBuffer);
            _snd.setVolume(100);
            _snd.setPosition(position.x, position.y, position.z);
            _snd.setRelativeToListener(true);

            //test
            _snd.setAttenuation(10.f);
            _snd.setMinDistance(5.f);
            //Volume factor = MinDistance / (MinDistance + Attenuation * (max(Distance, MinDistance) - MinDistance))



            _snd.setLoop(loop);

            _snd.play();
      }
 


Donc voilà peut importe ma position sur ma scene , j'entends le son de partout et au même volume, l'atténuation/la min distance n'as pas l'air d'être pris en compte !

Merci d'avance!

Cordialement
Titre: Re: Problèmes avec SFML la spatialisation du son en 3D dans un contexte comme ogre3d
Posté par: Cpl.Bator le Mai 18, 2017, 01:39:58 am
Bonjour, j'ai déjà eu un soucis de conception du même genre, mais en 2D, dès lors que j'utilisait plusieurs caméra 2D , je merdoyais avec le listener.

une piste , mon topic :

https://fr.sfml-dev.org/forums/index.php?topic=18505.0 (https://fr.sfml-dev.org/forums/index.php?topic=18505.0)

Titre: Re: Problèmes avec SFML la spatialisation du son en 3D dans un contexte comme ogre3d
Posté par: Milerius le Mai 18, 2017, 09:23:00 am
à l'heure actuelle je n'ai que un seul Listener, et c'est ma caméra ! mon problèmes c'est que au départ je suis très loin du son émis qui est relatif a mon listener et je l'entends quand même et au maximum !
Titre: Re: Problèmes avec SFML la spatialisation du son en 3D dans un contexte comme ogre3d
Posté par: Cpl.Bator le Mai 18, 2017, 05:49:24 pm
Question bête ? ton son est bien en mono ?
Titre: Re: Problèmes avec SFML la spatialisation du son en 3D dans un contexte comme ogre3d
Posté par: Cpl.Bator le Mai 18, 2017, 05:52:10 pm
& j'aurais mis : _snd.setRelativeToListener(false);
la doc du son :

https://www.sfml-dev.org/tutorials/2.4/audio-spatialization.php