allow audio-sources to control reference distance and rolloff factor

db4
Joe Groff 2010-01-19 17:54:55 -08:00
parent 7a14b4ce61
commit 2f8180faa6
2 changed files with 11 additions and 2 deletions

View File

@ -10,7 +10,9 @@ TUPLE: audio-source
{ position initial: { 0.0 0.0 0.0 } } { position initial: { 0.0 0.0 0.0 } }
{ gain float initial: 1.0 } { gain float initial: 1.0 }
{ velocity initial: { 0.0 0.0 0.0 } } { velocity initial: { 0.0 0.0 0.0 } }
{ relative? boolean initial: f } ; { relative? boolean initial: f }
{ distance float initial: 1.0 }
{ rolloff float initial: 1.0 } ;
TUPLE: audio-orientation TUPLE: audio-orientation
{ forward initial: { 0.0 0.0 -1.0 } } { forward initial: { 0.0 0.0 -1.0 } }
@ -32,12 +34,16 @@ GENERIC: audio-position ( source/listener -- position )
GENERIC: audio-gain ( source/listener -- gain ) GENERIC: audio-gain ( source/listener -- gain )
GENERIC: audio-velocity ( source/listener -- velocity ) GENERIC: audio-velocity ( source/listener -- velocity )
GENERIC: audio-relative? ( source -- relative? ) GENERIC: audio-relative? ( source -- relative? )
GENERIC: audio-distance ( source -- distance )
GENERIC: audio-rolloff ( source -- rolloff )
GENERIC: audio-orientation ( listener -- orientation ) GENERIC: audio-orientation ( listener -- orientation )
M: object audio-position drop { 0.0 0.0 0.0 } ; inline M: object audio-position drop { 0.0 0.0 0.0 } ; inline
M: object audio-gain drop 1.0 ; inline M: object audio-gain drop 1.0 ; inline
M: object audio-velocity drop { 0.0 0.0 0.0 } ; inline M: object audio-velocity drop { 0.0 0.0 0.0 } ; inline
M: object audio-relative? drop f ; inline M: object audio-relative? drop f ; inline
M: object audio-distance drop 1.0 ; inline
M: object audio-rolloff drop 1.0 ; inline
M: object audio-orientation drop T{ audio-orientation } ; inline M: object audio-orientation drop T{ audio-orientation } ; inline
M: audio-source audio-position position>> ; inline M: audio-source audio-position position>> ; inline
@ -188,6 +194,8 @@ ERROR: audio-context-not-available device-name ;
[ AL_GAIN swap audio-gain alSourcef ] [ AL_GAIN swap audio-gain alSourcef ]
[ AL_VELOCITY swap audio-velocity first3 alSource3f ] [ AL_VELOCITY swap audio-velocity first3 alSource3f ]
[ AL_SOURCE_RELATIVE swap audio-relative? c:>c-bool alSourcei ] [ AL_SOURCE_RELATIVE swap audio-relative? c:>c-bool alSourcei ]
[ AL_REFERENCE_DISTANCE swap audio-distance alSourcef ]
[ AL_ROLLOFF_FACTOR swap audio-rolloff alSourcef ]
} 2cleave ; } 2cleave ;
:: update-audio-clip ( audio-clip -- ) :: update-audio-clip ( audio-clip -- )

View File

@ -1,7 +1,7 @@
! (c)2009 Joe Groff bsd license ! (c)2009 Joe Groff bsd license
USING: accessors arrays combinators.tuple game.loop game.worlds USING: accessors arrays combinators.tuple game.loop game.worlds
generalizations gpu gpu.render gpu.shaders gpu.util gpu.util.wasd generalizations gpu gpu.render gpu.shaders gpu.util gpu.util.wasd
kernel literals math math.matrices math.order math.vectors kernel literals math math.libm math.matrices math.order math.vectors
method-chains sequences ui ui.gadgets ui.gadgets.worlds method-chains sequences ui ui.gadgets ui.gadgets.worlds
ui.pixel-formats audio.engine audio.loader locals ; ui.pixel-formats audio.engine audio.loader locals ;
IN: gpu.demos.raytrace IN: gpu.demos.raytrace
@ -50,6 +50,7 @@ TUPLE: raytrace-world < wasd-world
[ home>> ] bi m.v ; [ home>> ] bi m.v ;
M: sphere audio-position sphere-center ; inline M: sphere audio-position sphere-center ; inline
M: sphere audio-distance radius>> fsqrt 2.0 * ; inline
: <sphere-uniforms> ( world -- uniforms ) : <sphere-uniforms> ( world -- uniforms )
[ wasd-mv-inv-matrix ] [ wasd-mv-inv-matrix ]