audio.engine: let audio generators determine their own buffer size

db4
Joe Groff 2010-01-24 10:07:14 -08:00
parent 6ec4f4ef8b
commit a751ecd8b7
2 changed files with 8 additions and 9 deletions

View File

@ -56,7 +56,7 @@ M: audio-listener audio-gain gain>> ; inline
M: audio-listener audio-velocity velocity>> ; inline M: audio-listener audio-velocity velocity>> ; inline
M: audio-listener audio-orientation orientation>> ; 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 ) GENERIC: generator-audio-format ( generator -- channels sample-bits sample-rate )
TUPLE: audio-engine < disposable TUPLE: audio-engine < disposable
@ -79,7 +79,6 @@ TUPLE: static-audio-clip < audio-clip
TUPLE: streaming-audio-clip < audio-clip TUPLE: streaming-audio-clip < audio-clip
generator generator
{ buffer-size integer }
{ channels integer } { channels integer }
{ sample-bits integer } { sample-bits integer }
{ sample-rate integer } { sample-rate integer }
@ -151,8 +150,7 @@ ERROR: audio-context-not-available device-name ;
:: queue-clip-buffer ( audio-clip al-buffer -- ) :: queue-clip-buffer ( audio-clip al-buffer -- )
audio-clip al-source>> :> al-source audio-clip al-source>> :> al-source
audio-clip generator>> :> generator audio-clip generator>> :> generator
audio-clip buffer-size>> :> buffer-size generator generate-audio :> ( data size )
generator buffer-size generate-audio :> ( data size )
data [ data [
al-buffer audio-clip openal-format data size audio-clip sample-rate>> alBufferData al-buffer audio-clip openal-format data size audio-clip sample-rate>> alBufferData
@ -267,7 +265,7 @@ M: audio-engine dispose*
clip clip
] [ f ] if ; ] [ 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 audio-engine get-available-source :> al-source
al-source [ al-source [
@ -279,7 +277,6 @@ M: audio-engine dispose*
source >>source source >>source
al-source >>al-source al-source >>al-source
generator >>generator generator >>generator
buffer-size >>buffer-size
channels >>channels channels >>channels
sample-bits >>sample-bits sample-bits >>sample-bits
sample-rate >>sample-rate sample-rate >>sample-rate
@ -313,7 +310,7 @@ M: streaming-audio-clip dispose*
: play-static-audio-clip ( audio-engine source audio loop? -- audio-clip/f ) : play-static-audio-clip ( audio-engine source audio loop? -- audio-clip/f )
<static-audio-clip> dup [ play-clip ] when* ; <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* ; <streaming-audio-clip> dup [ play-clip ] when* ;
: pause-clip ( audio-clip -- ) : pause-clip ( audio-clip -- )

View File

@ -11,7 +11,9 @@ TUPLE: noise-generator ;
M: noise-generator generator-audio-format M: noise-generator generator-audio-format
drop 1 16 8000 ; drop 1 16 8000 ;
M: noise-generator generate-audio 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 ( -- ) :: audio-engine-test ( -- )
"vocab:audio/engine/test/loop.aiff" read-audio :> loop-sound "vocab:audio/engine/test/loop.aiff" read-audio :> loop-sound
@ -22,7 +24,7 @@ M: noise-generator generate-audio
engine T{ audio-source f { 1.0 0.0 0.0 } 1.0 { 0.0 0.0 0.0 } f } loop-sound t 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 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 play-streaming-audio-clip :> noise-clip
[ [