-! (c)2009 Joe Groff bsd license
-USING: accessors alien alien.data audio classes.struct fry
-calendar timers combinators combinators.short-circuit
-destructors generalizations kernel literals locals math openal
-sequences sequences.generalizations specialized-arrays strings ;
+! Copyright (C) 2009 Joe Groff.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors alien alien.data audio calendar
+combinators combinators.short-circuit destructors kernel
+literals math openal sequences sequences.generalizations
+specialized-arrays timers ;
QUALIFIED-WITH: alien.c-types c
SPECIALIZED-ARRAYS: c:float c:uchar c:uint ;
IN: audio.engine
{ distance float initial: 1.0 }
{ rolloff float initial: 1.0 } ;
-TUPLE: audio-orientation
+TUPLE: audio-orientation-state
{ forward initial: { 0.0 0.0 -1.0 } }
{ up initial: { 0.0 1.0 0.0 } } ;
-C: <audio-orientation> audio-orientation
+C: <audio-orientation-state> audio-orientation-state
: orientation>float-array ( orientation -- float-array )
[ forward>> first3 ]
{ position initial: { 0.0 0.0 0.0 } }
{ gain float initial: 1.0 }
{ velocity initial: { 0.0 0.0 0.0 } }
- { orientation initial: T{ audio-orientation } } ;
+ { orientation initial: T{ audio-orientation-state } } ;
GENERIC: audio-position ( source/listener -- position )
GENERIC: audio-gain ( source/listener -- gain )
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-state } ; inline
M: audio-source audio-position position>> ; inline
M: audio-source audio-gain gain>> ; inline
al-context>> alcMakeContextCurrent drop ; inline
: allocate-sources ( audio-engine -- sources )
- voice-count>> dup (uint-array) [ alGenSources ] keep ; inline
+ voice-count>> dup c:uint (c-array) [ alGenSources ] keep ; inline
:: flush-source ( al-source -- )
al-source alSourceStop
: update-audio-clip ( audio-clip -- )
[ update-source ] [
- dup al-source>> AL_SOURCE_STATE get-source-param AL_STOPPED =
+ dup al-source>> AL_SOURCE_STATE get-source-param AL_STOPPED =
[ dispose ] [ (update-audio-clip) ] if
] bi ;
audio-engine get-available-source :> al-source
al-source [
- buffer-count dup (uint-array) [ alGenBuffers ] keep :> al-buffers
+ buffer-count dup c:uint (c-array) [ alGenBuffers ] keep :> al-buffers
generator generator-audio-format :> ( channels sample-bits sample-rate )
streaming-audio-clip new-disposable
: play-static-audio-clip ( audio-engine source audio loop? -- audio-clip/f )
<static-audio-clip> dup [ play-clip ] when* ;
-: play-streaming-audio-clip ( audio-engine source generator buffer-count -- audio-clip/f )
+: play-streaming-audio-clip ( audio-engine source generator buffer-count -- audio-clip/f )
<streaming-audio-clip> dup [ play-clip ] when* ;
: pause-clip ( audio-clip -- )
[ update-listener ]
[ clips>> clone [ update-audio-clip ] each ]
} cleave ;
-