tweak queue-clip-buffer to stop bothering the audio generator after generate-audio returns a size of 0 or f

release
Joe Groff 2010-01-25 14:52:21 -08:00
parent bc14a7392b
commit 3487f3a5c5
1 changed files with 13 additions and 8 deletions

View File

@ -84,7 +84,8 @@ TUPLE: streaming-audio-clip < audio-clip
{ channels integer } { channels integer }
{ sample-bits integer } { sample-bits integer }
{ sample-rate integer } { sample-rate integer }
{ al-buffers uint-array } ; { al-buffers uint-array }
{ done? boolean } ;
ERROR: audio-device-not-found device-name ; ERROR: audio-device-not-found device-name ;
ERROR: audio-context-not-available device-name ; ERROR: audio-context-not-available device-name ;
@ -150,14 +151,18 @@ ERROR: audio-context-not-available device-name ;
al-source ; al-source ;
:: queue-clip-buffer ( audio-clip al-buffer -- ) :: queue-clip-buffer ( audio-clip al-buffer -- )
audio-clip al-source>> :> al-source audio-clip done?>> [
audio-clip generator>> :> generator audio-clip al-source>> :> al-source
generator generate-audio :> ( data size ) audio-clip generator>> :> generator
generator generate-audio :> ( data size )
data [ size { [ not ] [ zero? ] } 1|| [
al-buffer audio-clip openal-format data size audio-clip sample-rate>> alBufferData audio-clip t >>done? drop
al-source 1 al-buffer c:<uint> alSourceQueueBuffers ] [
] when ; al-buffer audio-clip openal-format data size audio-clip sample-rate>> alBufferData
al-source 1 al-buffer c:<uint> alSourceQueueBuffers
] if
] unless ;
: update-listener ( audio-engine -- ) : update-listener ( audio-engine -- )
listener>> { listener>> {