From 3487f3a5c503c170b33d9bb801b9146108ee15c5 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 25 Jan 2010 14:52:21 -0800 Subject: [PATCH] tweak queue-clip-buffer to stop bothering the audio generator after generate-audio returns a size of 0 or f --- extra/audio/engine/engine.factor | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/extra/audio/engine/engine.factor b/extra/audio/engine/engine.factor index 16efe8e56a..ae94f5bb42 100644 --- a/extra/audio/engine/engine.factor +++ b/extra/audio/engine/engine.factor @@ -84,7 +84,8 @@ TUPLE: streaming-audio-clip < audio-clip { channels integer } { sample-bits integer } { sample-rate integer } - { al-buffers uint-array } ; + { al-buffers uint-array } + { done? boolean } ; ERROR: audio-device-not-found device-name ; ERROR: audio-context-not-available device-name ; @@ -150,14 +151,18 @@ ERROR: audio-context-not-available device-name ; al-source ; :: queue-clip-buffer ( audio-clip al-buffer -- ) - audio-clip al-source>> :> al-source - audio-clip generator>> :> generator - generator generate-audio :> ( data size ) + audio-clip done?>> [ + audio-clip al-source>> :> al-source + audio-clip generator>> :> generator + generator generate-audio :> ( data size ) - data [ - al-buffer audio-clip openal-format data size audio-clip sample-rate>> alBufferData - al-source 1 al-buffer c: alSourceQueueBuffers - ] when ; + size { [ not ] [ zero? ] } 1|| [ + audio-clip t >>done? drop + ] [ + al-buffer audio-clip openal-format data size audio-clip sample-rate>> alBufferData + al-source 1 al-buffer c: alSourceQueueBuffers + ] if + ] unless ; : update-listener ( audio-engine -- ) listener>> {