M: audio-listener audio-velocity velocity>> ; inline
M: audio-listener audio-orientation orientation>> ; inline
-GENERIC# generate-audio 1 ( generator buffer-size -- c-ptr size )
+GENERIC: generate-audio ( generator -- c-ptr size )
GENERIC: generator-audio-format ( generator -- channels sample-bits sample-rate )
TUPLE: audio-engine < disposable
TUPLE: streaming-audio-clip < audio-clip
generator
- { buffer-size integer }
{ channels integer }
{ sample-bits integer }
{ sample-rate integer }
:: queue-clip-buffer ( audio-clip al-buffer -- )
audio-clip al-source>> :> al-source
audio-clip generator>> :> generator
- audio-clip buffer-size>> :> buffer-size
- generator buffer-size generate-audio :> ( data size )
+ generator generate-audio :> ( data size )
data [
al-buffer audio-clip openal-format data size audio-clip sample-rate>> alBufferData
clip
] [ f ] if ;
-:: <streaming-audio-clip> ( audio-engine source generator buffer-size buffer-count -- audio-clip/f )
+:: <streaming-audio-clip> ( audio-engine source generator buffer-count -- audio-clip/f )
audio-engine get-available-source :> al-source
al-source [
source >>source
al-source >>al-source
generator >>generator
- buffer-size >>buffer-size
channels >>channels
sample-bits >>sample-bits
sample-rate >>sample-rate
: 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-size 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 -- )
M: noise-generator generator-audio-format
drop 1 16 8000 ;
M: noise-generator generate-audio
- nip [ -1 shift [ -4096 4096 [a,b] random ] short-array{ } replicate-as ] keep ;
+ drop
+ 4096 [ -4096 4096 [a,b] random ] short-array{ } replicate-as
+ 8192 ;
:: audio-engine-test ( -- )
"vocab:audio/engine/test/loop.aiff" read-audio :> loop-sound
engine T{ audio-source f { 1.0 0.0 0.0 } 1.0 { 0.0 0.0 0.0 } f } loop-sound t
play-static-audio-clip :> loop-clip
- engine T{ audio-source f { -1.0 0.0 0.0 } 1.0 { 0.0 0.0 0.0 } f } noise-generator new 8192 2
+ engine T{ audio-source f { -1.0 0.0 0.0 } 1.0 { 0.0 0.0 0.0 } f } noise-generator new 2
play-streaming-audio-clip :> noise-clip
[