Distance entre camera et son ne fonctionne PAS avec un wav
Publié : mar. 10/juin/2014 18:22
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.ça fonctionne bien avec des fichiers Ogg mais apparemment pas avec mes fichiers wav.
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