Sound3D Funktion

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Puccini

Betreff: Sound3D Funktion

BeitragDi, Jul 17, 2007 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi! Ich hab mal ne kleine Funktion für alle 3D Nutzer geschrieben!

Ich hab hier im Forum irgendwo mal gelesen das viele Probleme mit der eingebauten Load3DSound und EmitSound Funktion probleme haben.

Sie ist vielleciht nicht so umfangreich, aber wer will kann ja vorschläge machen damti diese Funktionen erweitert werden Wink

~EDIT:~
Wenn updates am code auftretten poste ich die gleich hier!
18.07.2007 Update - Pan# verbessert, FreeSound3D Funktion

Code: [AUSKLAPPEN]

Type MusikDaten
Field Platz
Field Emiter
Field Lied
Field Channel
Field Loop
Field Weite
Field Vol#
End Type
Function LoadSound3D(soundpfad$,loop=0,soundweite=100)
   Musik.MusikDaten = New MusikDaten
      Musik\Lied = LoadSound(soundpfad$)
      Musik\Platz = CreatePivot()
      Musik\Loop=loop
      Musik\Weite = soundweite
      Musik\Vol = 0
   Return Musik\Lied
End Function
Function EmitSound3D(soundentity,soundindex)
   For Musik.MusikDaten= Each MusikDaten
      If Musik\Lied=soundindex
         Musik\Emiter=soundentity
         If Not Musik\Loop=0 LoopSound(Musik\Lied)
         Musik\Channel = PlaySound(Musik\Lied)
         Exit
      End If
   Next
End Function
Function UpdateMusik()
   For Musik.MusikDaten = Each MusikDaten
         PositionEntity Musik\Platz,EntityX(Musik\Emiter),EntityY(Musik\Emiter),EntityZ(Musik\Emiter)
         Dis# = EntityDistance(cam,Musik\Platz)
         If Dis<>0.0 Then
            Vol# = 1.0 - (Dis#/(Musik\Weite))
            ChannelVolume Musik\Channel,Vol#
            pan# = -Sin(DeltaYaw(cam,Musik\platz))*0.99
            ChannelPan Musik\Channel,Pan#
         EndIf
   Next
End Function
Function FreeSound3D(soundindex)
   For Musik.MusikDaten = Each MusikDaten
      If Musik\Lied=soundindex FreeSound Musik\Lied:Delete Musik:Exit
   Next
End Function


Als Erklärung:

Mit LoadSound3D wird ein neuer Sound geladen, angegeben werden kann hier bisher nur der Pfad und die Reichweite des Sounds (Standardwert=100 Einheiten). Rückgabewert ist der Soundindex

Mit EmitSound3D wird ein Sound an einer bestimmten Position abgespielt!
Dazu muss das Objekt welches den Sound ausgibt sowie der Soundindex mit übergeben werden.

Mit UpdateMusik wird dann der Sound korrekt auf Distance und Ausrichtung überprüft und Eingestellt.

Mit FreeSound3D kann Speicher wieder freigegeben werden. Hierzu muss nur der Index des Sounds der mit LoadSound3D ermittelt wurde mit übergeben werden.


Dank an Krümel für die Hilfestellung Wink und an Markus2 von dem das Grundkonzept stammt!

MfG Puccini
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM
www.ragesoft.de
Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39
  • Zuletzt bearbeitet von Puccini am Mi, Jul 18, 2007 11:34, insgesamt 2-mal bearbeitet
 

Krümel

BeitragMi, Jul 18, 2007 0:36
Antworten mit Zitat
Benutzer-Profile anzeigen
hi, Puccini,

ein kleiner Schönheitsfehler lässt sich folgendermassen beseitigen:

pan# = -Sin(DeltaYaw(cam,Musik\platz)) * 0.99

das bewirkt, dass der pan-Wert nie 1, bzw -1 annimmt.
Ansonsten hast du einen sehr unrealistischen Effekt, weil der linke, bzw rechte Kanal abrupt abbgehackt wird.

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group