Page 1 sur 1

Distance entre camera et son ne fonctionne PAS avec un wav

Publié : mar. 10/juin/2014 18:22
par falsam
L'utilisation conjointe de SoundRange3D() et SoundListenerLocate() permet de régler l'atténuation d'un son en fonction de la distance par exemple d'un joueur par rapport à l’émetteur d'un son.

L'exemple qui suit place un émetteur de son (une alarme) suffisamment loin de la caméra pour l'entendre faiblement.

Pour que ça fonctionne, il faut que le son soit ancré sur un node afin de définir les coordonnées d'émission.
Ensuite il faut modifier le champ d'émission d'un son avec la fonction SoundRange3D() en indiquant la distance minimum et maximum à partir de laquelle le son sera entendu. Le son est atténué entre ces deux valeurs

Rapprochez la caméra prés du cube, ce son sera plus fort. Allez suffisamment à gauche ou à droite pour entendre le son respectivement à droite ou à gauche.

Code : Tout sélectionner

EnableExplicit

Enumeration
  #Mainform
EndEnumeration

Global Event, Camera, Entity, Node, Sound

InitEngine3D()
InitKeyboard()
InitSprite()
InitSound()
UseOGGSoundDecoder()

Add3DArchive(#PB_Compiler_Home+"Examples\3D\Data\", #PB_3DArchive_FileSystem)

OpenWindow(#Mainform, 0, 0, 1024, 768, "", #PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(#Mainform), 0, 0, 1024, 768)

AmbientColor(RGB(127, 127, 127))
CreateLight(#PB_Any,RGB(151, 251, 151), -1.8, 10, 5)

Camera = CreateCamera(#PB_Any,0,0,100,100)
CameraBackColor(Camera, RGB(145, 182, 201))

MoveCamera(Camera, 0, 2, 25, #PB_Absolute)  
CameraLookAt(Camera, 0,0,0)   

Sound = LoadSound3D(#PB_Any, "Siren.ogg")
If Sound
  SoundVolume3D(Sound, 50)
  SoundRange3D(Sound, 0, 50)
  PlaySound3D(Sound, #PB_Sound3D_Loop)
EndIf

CreateEntity(#PB_Any, MeshID(CreatePlane(#PB_Any, 40, 60, 1, 1, 1, 1)), #PB_Material_None)

Node = CreateNode(#PB_Any, 0, 0, -20)
Entity = CreateEntity(#PB_Any, MeshID(CreateCube(#PB_Any, 2)), #PB_Material_None, 0, 1, 0)
AttachNodeObject(Node, EntityID(Entity))
AttachNodeObject(Node, SoundID3D(Sound))

Repeat
  Repeat
    Event  = WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        End        
    EndSelect
  Until Event = 0
  
  If ExamineKeyboard()
    If KeyboardPushed (#PB_Key_Up)
      MoveCamera(Camera, 0, 0, -0.1, #PB_Relative)
    EndIf
    
    If KeyboardPushed (#PB_Key_Down)
      MoveCamera(Camera, 0, 0, 0.1, #PB_Relative)
    EndIf
    
    If KeyboardPushed (#PB_Key_Left)
      MoveCamera(Camera, -0.1, 0, 0, #PB_Relative)
    EndIf
    
    If KeyboardPushed (#PB_Key_Right)
      MoveCamera(Camera, 0.1, 0, 0, #PB_Relative)
    EndIf
    
    If KeyboardPushed (#PB_Key_Escape)
      Break
    EndIf
  EndIf
  
  SoundListenerLocate(-CameraX(Camera), CameraY(Camera), CameraZ(Camera))
  
  RenderWorld(80)
  FlipBuffers()  
ForEver
ça fonctionne bien avec des fichiers Ogg mais apparemment pas avec mes fichiers wav.

Re: Distance entre camera et son ne fonctionne PAS avec un w

Publié : mar. 10/juin/2014 18:50
par falsam
Après avoir converti mes fichiers Wav en Ogg, ça ne fonctionnait toujours pas !!!

En fait la réponse est dans l'aide :
Loads a WAV or an OGG sound file. The sound has to be mono, as stereo sounds doesn't allow space positioning.
il n'est pas possible de positionner dans l'espace un son stéréo.

Allez ..... je transforme mes sons en mono :)

Re: Distance entre camera et son ne fonctionne PAS avec un w

Publié : ven. 13/juin/2014 21:28
par venom
Fonctionne bien chez moi, merci du partage.







@++