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