]> gitweb.factorcode.org Git - factor.git/commitdiff
add words to audio.engine for synchronized play/pause/stop of multiple clips
authorJoe Groff <arcata@gmail.com>
Tue, 19 Jan 2010 21:16:45 +0000 (13:16 -0800)
committerJoe Groff <arcata@gmail.com>
Tue, 19 Jan 2010 21:16:45 +0000 (13:16 -0800)
extra/audio/engine/engine.factor

index bd9a3408ff6c20cff84911126fc42510f295c13f..6caff51ee32b7fabe52294fb5303a75c35c41a62 100644 (file)
@@ -179,6 +179,9 @@ ERROR: audio-context-not-available device-name ;
         ] times
     ] if ;
 
+: clip-sources ( clips -- length sources )
+    [ length ] [ [ source>> ] uint-array{ } map-as ] bi ;
+
 PRIVATE>
 
 DEFER: update-audio
@@ -258,15 +261,26 @@ M: audio-clip dispose*
     [ update-source ]
     [ al-source>> alSourcePlay ] bi ;
 
+: play-clips ( audio-clips -- )
+    [ [ update-source ] each ]
+    [ clip-sources alSourcePlayv ] bi ;
+
 : <audio-clip> ( audio-engine audio source loop? -- audio-clip/f )
     (audio-clip) dup play-clip ;
 
 : pause-clip ( audio-clip -- )
     al-source>> alSourcePause ;
 
+: pause-clips ( audio-clip -- )
+    clip-sources alSourcePausev ;
+
 : stop-clip ( audio-clip -- )
     dispose ;
 
+: stop-clips ( audio-clip -- )
+    [ clip-sources alSourceStopv ]
+    [ [ dispose ] each ] bi ;
+
 : update-audio ( audio-engine -- )
     {
         [ make-engine-current ]