[bb] 3D Doppler Effect by BlitzSupport [ 1+ years ago ]

Started by BlitzBot, June 29, 2017, 00:28:42

Previous topic - Next topic

BlitzBot

Title : 3D Doppler Effect
Author : BlitzSupport
Posted : 1+ years ago

Description : A re-creation of the classic train-going-by-crossing effect, complete with Doppler (where the pitch rises as the train gets nearer and falls as it goes away).

**** IMPORTANT!!!! ****

You will need this sample, as the demo has been specifically coded with the timing of this sample in mind!

<a href="http://www.railroadxing.com/sounds/amtrak/amtrak 290 train horn for public crossing at grade.wav" target="_blank">http://www.railroadxing.com/sounds/amtrak/amtrak%20290%20train%20horn%20for%20public%20crossing%20at%20grade.wav</a> (69.4k)

Save the code somewhere, and copy this sample into the same folder.
 


Code :
Code (blitzbasic) Select
; -----------------------------------------------------------------------------
; 3D sound -- Doppler and stereo effects (crank the volume UP!)
; -----------------------------------------------------------------------------

; -----------------------------------------------------------------------------
; IMPORTANT: Download this sample BEFORE RUNNING! This code's positioning is
; hard-coded for this sample!
; -----------------------------------------------------------------------------
;
; http://www.railroadxing.com/sounds/amtrak/amtrak%20290%20train%20horn%20for%20public%20crossing%20at%20grade.wav
;
; -----------------------------------------------------------------------------

Global gameFPS = 50

Graphics3D 640, 480
SetBuffer BackBuffer ()

cam = CreateCamera ()
CameraViewport cam, 0, 0, GraphicsWidth (), GraphicsHeight ()

; -----------------------------------------------------------------------------
; Hack up a really bad train (yes, those carriages ARE meant to be blank!)
; -----------------------------------------------------------------------------

box = CreateCube ()
carriage = CopyEntity (box, box)
carriage2 = CopyEntity (box, box)
carriage3 = CopyEntity (box, box)
carriage4 = CopyEntity (box, box)
ScaleEntity box, 1, 1, 4
PositionEntity carriage, 0, 0, 2.5
PositionEntity carriage2, 0, 0, 5
PositionEntity carriage3, 0, 0, 7.5
PositionEntity carriage4, 0, 0, 10
PositionEntity box, 50, 0, 50
TurnEntity box, 0, -48, 0

SetBuffer FrontBuffer ()
doppler = Input ("Enter 0 for normal sound or 1 for 3D Doppler: ")
SetBuffer BackBuffer ()

; -----------------------------------------------------------------------------
; Sample from 'RailRoadXing.com' -- URL at top of source!
; -----------------------------------------------------------------------------

sample$ = "amtrak%20290%20train%20horn%20for%20public%20crossing%20at%20grade.wav"

If doppler
; 3D version
horn = Load3DSound (sample$)
CreateListener (cam, 0.5, 15, 2) ; Listener is attached to camera (trial-and-error parameters ;)
EmitSound horn, box ; Play the sound from the front of the train
Else
; Normal version
horn = LoadSound (sample$)
PlaySound horn
EndIf

; Frame-timing stuff...
framePeriod = 1000 / gameFPS
frameTime = MilliSecs () - framePeriod

Repeat

; Frame-timing stuff...
Repeat
frameElapsed = MilliSecs () - frameTime
Until frameElapsed
frameTicks = frameElapsed / framePeriod
frameTween# = Float (frameElapsed Mod framePeriod) / Float (framePeriod)
For frameLimit = 1 To frameTicks
If frameLimit = frameTicks Then CaptureWorld
frameTime = frameTime + framePeriod
MoveEntity box, 0, 0, -0.5
UpdateWorld
Next

RenderWorld frameTween

Text 20, 20, "Crap train comin' through!"
Flip

Until EntityZ (box) < -110 Or KeyHit (1)

End


Comments : none...