]> gitweb.factorcode.org Git - factor.git/commitdiff
tweak queue-clip-buffer to stop bothering the audio generator after generate-audio...
authorJoe Groff <arcata@gmail.com>
Mon, 25 Jan 2010 22:52:21 +0000 (14:52 -0800)
committerJoe Groff <arcata@gmail.com>
Mon, 25 Jan 2010 22:52:21 +0000 (14:52 -0800)
extra/audio/engine/engine.factor

index 16efe8e56a3b9ef7dbe20825e0f5f43916b006c4..ae94f5bb42f798f1383a7e2d43d99ebb69dfea43 100644 (file)
@@ -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 )
-
-    data [
-        al-buffer audio-clip openal-format data size audio-clip sample-rate>> alBufferData
-        al-source 1 al-buffer c:<uint> alSourceQueueBuffers
-    ] when ;
+    audio-clip done?>> [
+        audio-clip al-source>> :> al-source
+        audio-clip generator>> :> generator
+        generator generate-audio :> ( data size )
+
+        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:<uint> alSourceQueueBuffers
+        ] if
+    ] unless ;
 
 : update-listener ( audio-engine -- )
     listener>> {