Sound3D - Issue

Probleme beim Erstellen von 3D-Modellen und Texturen, keine Ahnung womit man Musik macht? Dies ist dein Forum.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3857
Registriert: 13.09.2004 17:48
Kontaktdaten:

Sound3D - Issue

Beitrag von bobobo »

ich bin ja mal froh dass das 3d- Zeugs nun mittlerweile (510B6 win32) auch mal wieder auf schlappen
Grafikkarten (intel) unterstützt wird.

Aaaber

irgendwas ist da verdreht beim 3D-Sound

im ff Code schiebt man mit a den node (würfel nebst sound) nach links mit d nach rechts
Der Sound geht aber in die falsche Richtung.
oben und unten (w /S) ist wohl ok
Vorne und hinten (Up/down) wohl auch, immerhin wird es leiser

Ist das nur hier so (komische direct-3d treiberei auf dem ollen Laptopf) oder ist das allgemein so und eher 'ne Art Bug

(hier ist es egal ob "normal" oder "opengl")

Code: Alles auswählen

InitEngine3D()
InitSprite()
InitKeyboard()
InitMouse()

OpenWindow(0,0,0,1000,1000,"k",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0),0,0,1000,1000,1,0,0)
Add3DArchive("D:/PureBasic/510/Examples/3D/Data", #PB_3DArchive_FileSystem)            ;change to appr. dir
Add3DArchive("D:\PureBasic\510\Examples\3D\Data/Packs/skybox.zip", #PB_3DArchive_Zip) ;change to appr. dir
Add3DArchive("D:\PureBasic\510\Examples\3D\Data/Textures", #PB_3DArchive_FileSystem) ;change to appr. dir

SkyBox("stevecube.jpg")

cam=CreateCamera(#PB_Any, 0, 0, 1000, 1000)
cube=CreateCube(#PB_Any,10)
tex_cloud=LoadTexture(#PB_Any, "clouds.jpg")
material=CreateMaterial(#PB_Any,TextureID(tex_cloud))
Debug material

cubee=CreateEntity(#PB_Any,MeshID(cube),MaterialID(material))
If IsMesh(cubee)
  MoveEntity(cubee,0,0,0)
EndIf


sir= LoadSound3D(#PB_Any,"schwurbel.wav",#PB_Sound3D_Loop) ;change to a mono-sound-file

SoundVolume3D(sir, 100)
SoundRange3D(sir, 1, 100)
PlaySound3D(sir, #PB_Sound3D_Loop)
SoundListenerLocate(CameraX(cam),CameraY(cam),CameraZ(cam))
node=CreateNode(#PB_Any, 0, 0, -75)
AttachNodeObject(node, SoundID3D(sir))
AttachNodeObject(node, EntityID(cubee))

Repeat
  ExamineKeyboard()
  ExamineMouse()
  If KeyboardPushed(#PB_Key_Escape)
    quit+1
  EndIf
  RotateNode(node,0.3,0.4,0.5,#PB_Relative)  ;aber nur weil 3*3+4*4=5*5 ist
  If KeyboardPushed(#PB_Key_D)
    MoveNode(node,0.5,0,0)
  EndIf
  If KeyboardPushed(#PB_Key_A)
    MoveNode(node,-0.5,0,0)
  EndIf
  If KeyboardPushed(#PB_Key_W)
    MoveNode(node,0,0.5,0)
  EndIf
  If KeyboardPushed(#PB_Key_S)
    MoveNode(node,0,-0.5,0)
  EndIf
  If KeyboardPushed(#PB_Key_Up)
    MoveNode(node,0,0,5)
  EndIf
  If KeyboardPushed(#PB_Key_Down)
    MoveNode(node,0,0,-5)
  EndIf
  StartDrawing(WindowOutput(0))
  DrawText(0,0,Str(NodeX(node))+" "+Str(NodeY(node))+" "+Str(NodeZ(node)))
  StopDrawing()
  
  RenderWorld()
  
  FlipBuffers()
  
Until quit

End
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Sound3D - Issue

Beitrag von STARGÅTE »

Ich glaube das ist ein Bug, denn es gibt keine Richtungsangabe bei SoundListenerLocate().
Und da der Zuhöher nicht die Camera ist, sonden nur über diese Position definiert wird, kann auch nicht bestimmt werden, in welche "Richtung" der Zuhöher guckt, deswegen ist unklar, ob der Sound von Rechts oder Links kommt, je nachdem wohin der Zuhöher guckt.

Diesen Wunsch habe ich auch schon gepostet: Sound3D - MultiChannel, Frequency and Direction for Listener

Leider noch keine Antwort.

Deswegen hab ich mit der Sound-Lib meine eigene Sound3D geschrieben, wo Volumen und Balance über die Camera gesteuert werden.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Sound3D - Issue

Beitrag von PMV »

Ohne jetzt direkt auf das Problem ein zu gehen ...
hab ich auch inzwischen die Sound3D-Lib in meinem
Projekt eingebunden und das Ergebnis .... die Anzahl
der Sound-Quellen ist (stark) begrenzt, das man
zudem alle Sounds von der Platte laden muss zur
Laufzeit ist auch nicht gerade toll ... die Begrenzung
mit dem Mono-Sound ist dagegen zumindest
nachvollziehbar ... wirklich nutzbar ist das aber so
auch für mich nicht. Ich weis aber noch nicht ob ich das
irgend wann mal erwähne bzw. mal Zeit hab mit
Beispielcode das vorzeigen kann... so weit ich das gesehen
hab ist die genutzte Engine aber auch wirklich stark
eingeschränkt bzw. noch nicht final. Ob die aber
weiter Entwickelt wird sah mir auf den ersten Blick nicht
danach aus. Leider hab ich aber wieder vergessen
welche das war, sorry. Sollte allerdings jeder durch die
Log selber raus finden können. :D

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3857
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Sound3D - Issue

Beitrag von bobobo »

ok
also eher bug oder unvollständig.
da hoffe ich mal auf kommende Updates.

hab den o.a. wunsch mal gepusht
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Sound3D - Issue

Beitrag von NicTheQuick »

FMOD bietet 3D-Sound an und kann meine Kurzrecherche zu folge auch mit OpenGL verbunden werden und auf die Geometrie des Raumes angewandt werden.
FMOD Tutorial 14 - Working with 3D Sound Properties
Bild
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Sound3D - Issue

Beitrag von PMV »

FMOD kann so einiges ... ist dafür aber leider auch nicht
ganz billig. :lol: Ich hab aktuell die bass.dll im Auge, ist
zumindest bei meinem Budget zumindest bezahlbar. :D
(ich rede von Kommerziellen gebrauch :wink: )

Aber wer weis, vielleicht gibs für OGRE ja noch nen Update
für die Sound3D-Lib ... die hoffnung stirbt zu letzt.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
nodiss
Beiträge: 4
Registriert: 03.01.2016 14:55

Re: Sound3D - Issue

Beitrag von nodiss »

:?

Code: Alles auswählen

Procedure Update_Sound_Pos(Sound_Pos.i, Cam.i, Sound.i, MaxVol.i, DistanceFactor.f) ; Sound_Pos = a Node or an Entity
  
  Protected.f Distance_Vol, Distance, Sound_Direction_LR, Sound_Direction_FR
  
  Static Sound_Direction_Node
  
  If IsNode(Sound_Direction_Node)
    
    If IsNode(Sound_Pos)
      Distance = Sqr(Pow(CameraX(Cam) - NodeX(Sound_Pos),2) + Pow(CameraY(Cam) - NodeY(Sound_Pos),2) + Pow(CameraZ(Cam) - NodeZ(Sound_Pos),2))
    ElseIf IsEntity(Sound_Pos)
      Distance = Sqr(Pow(CameraX(Cam) - EntityX(Sound_Pos),2) + Pow(CameraY(Cam) - EntityY(Sound_Pos),2) + Pow(CameraZ(Cam) - EntityZ(Sound_Pos),2))
    EndIf
    
    Distance_Vol = MaxVol - Distance * DistanceFactor
    If Distance_Vol < 0
      Distance_Vol = 0
      SoundVolume(Sound, Distance_Vol)
    Else
      MoveNode(Sound_Direction_Node, CameraX(Cam), CameraY(Cam), CameraZ(Cam), #PB_Absolute)
      
      If IsNode(Sound_Pos)
        NodeLookAt(Sound_Direction_Node, NodeX(Sound_Pos) ,CameraY(Cam), NodeZ(Sound_Pos))
      ElseIf IsEntity(Sound_Pos)
        NodeLookAt(Sound_Direction_Node, EntityX(Sound_Pos) ,CameraY(Cam), EntityZ(Sound_Pos))
      EndIf
      
      Sound_Direction_LR = Sin(Radian(EntityYaw(#PlayerEntity) - NodeYaw(Sound_Direction_Node))) * 80
      ;Sound_Direction_FR = Sin(Radian(EntityYaw(#PlayerEntity) - NodeYaw(Sound_Direction_Node) + 90))
      SoundPan(Sound, Sound_Direction_LR)
      SoundVolume(Sound, Distance_Vol)
    EndIf
  Else
    Sound_Direction_Node = CreateNode(#PB_Any)
    Update_Sound_Pos(Sound_Pos, Cam, Sound, MaxVol, DistanceFactor)
  EndIf
  
EndProcedure
Antworten