Code archives/Audio/3D Doppler Effect

This code has been declared by its author to be Public Domain code.

Download source code

3D Doppler Effect by BlitzSupport2001
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!

http://www.railroadxing.com/sounds/amtrak/amtrak%20290%20train%20horn%20for%20public%20crossing%20at%20grade.wav (69.4k)

Save the code somewhere, and copy this sample into the same folder.
; -----------------------------------------------------------------------------
; 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.

Code Archives Forum