]> gitweb.factorcode.org Git - factor.git/commitdiff
audio.loader vocab that reads audio file with reader appropriate to file extension
authorJoe Groff <arcata@gmail.com>
Tue, 19 Jan 2010 20:46:06 +0000 (12:46 -0800)
committerJoe Groff <arcata@gmail.com>
Tue, 19 Jan 2010 20:46:06 +0000 (12:46 -0800)
extra/audio/aiff/aiff.factor
extra/audio/chunked-file/chunked-file.factor
extra/audio/engine/engine.factor
extra/audio/engine/test/loop.aiff [new file with mode: 0644]
extra/audio/engine/test/loop.wav [deleted file]
extra/audio/engine/test/test.factor
extra/audio/loader/loader.factor [new file with mode: 0644]
extra/audio/wav/wav.factor

index 82db3d993c81bbe6b20798bc9f6e790d1eddced2..549134003b628425087304faa368c20868bd0240 100644 (file)
@@ -1,7 +1,9 @@
+! (c)2009 Joe Groff bsd license
 USING: accessors alien alien.c-types alien.data audio
 audio.chunked-file classes.struct combinators
 combinators.short-circuit endian io io.binary
-io.encodings.binary io.files kernel locals math sequences ;
+io.encodings.binary io.files kernel locals math sequences
+audio.loader ;
 IN: audio.aiff
 
 CONSTANT: FORM-MAGIC "FORM"
@@ -79,3 +81,6 @@ STRUCT: sound-data-chunk
             read-form-chunk verify-aiff (read-aiff)
         ] with-file-reader
     ] with-endianness ;
+
+"aif"  [ read-aiff ] register-audio-extension
+"aiff" [ read-aiff ] register-audio-extension
index f54aae56121eeb98f2d502324cb0bddb7ac1bc13..a450790ec625119d90379172d9346511ef4941b3 100644 (file)
@@ -1,3 +1,4 @@
+! (c)2009 Joe Groff bsd license
 USING: accessors alien.c-types combinators endian io kernel
 math sequences ;
 IN: audio.chunked-file
index 7d1afe2ddfd429c432001d73e7a0e6a26f2856bf..bd9a3408ff6c20cff84911126fc42510f295c13f 100644 (file)
@@ -1,3 +1,4 @@
+! (c)2009 Joe Groff bsd license
 USING: accessors alien audio classes.struct fry calendar alarms
 combinators combinators.short-circuit destructors generalizations
 kernel literals locals math openal sequences specialized-arrays strings ;
diff --git a/extra/audio/engine/test/loop.aiff b/extra/audio/engine/test/loop.aiff
new file mode 100644 (file)
index 0000000..d745e5d
Binary files /dev/null and b/extra/audio/engine/test/loop.aiff differ
diff --git a/extra/audio/engine/test/loop.wav b/extra/audio/engine/test/loop.wav
deleted file mode 100644 (file)
index a626b63..0000000
Binary files a/extra/audio/engine/test/loop.wav and /dev/null differ
index bc57f1ceab86b99356f7058330ee9a35c1ae3f50..59834a9fb240501d10dabe740659d8ee70cd0885 100644 (file)
@@ -1,14 +1,14 @@
-USING: accessors alarms audio audio.engine audio.wav calendar
+! (c)2009 Joe Groff bsd license
+USING: accessors alarms audio audio.engine audio.loader calendar
 destructors io kernel locals math math.functions ;
 IN: audio.engine.test
 
-USE: prettyprint
 :: audio-engine-test ( -- )
-    "vocab:audio/engine/test/loop.wav" read-wav :> loop-sound
-    "vocab:audio/engine/test/once.wav" read-wav :> once-sound
+    "vocab:audio/engine/test/loop.aiff" read-audio :> loop-sound
+    "vocab:audio/engine/test/once.wav" read-audio :> once-sound
     0 :> i!
     <standard-audio-engine> :> engine
-    engine dup . start-audio*
+    engine start-audio*
     engine loop-sound T{ audio-source f { 1.0 0.0 0.0 } 1.0 { 0.0 0.0 0.0 } f } t <audio-clip>
         :> loop-clip
 
diff --git a/extra/audio/loader/loader.factor b/extra/audio/loader/loader.factor
new file mode 100644 (file)
index 0000000..fb2c6a0
--- /dev/null
@@ -0,0 +1,20 @@
+! (c)2009 Joe Groff bsd license
+USING: ascii assocs io.pathnames kernel namespaces
+vocabs.loader ;
+IN: audio.loader
+
+ERROR: unknown-audio-extension extension ;
+
+SYMBOL: audio-types
+audio-types [ H{ } clone ] initialize
+
+: register-audio-extension ( extension quot -- )
+    swap audio-types get set-at ;
+
+: read-audio ( path -- audio )
+    dup file-extension >lower audio-types get ?at
+    [ call( path -- audio ) ]
+    [ unknown-audio-extension ] if ;
+
+"audio.wav" require
+"audio.aiff" require
index 0558674a5a0c8bc85d1193ea5d70cb5f9507d9f6..0a5c242db8c36b31939b51998671caf60e4df0a6 100644 (file)
@@ -1,8 +1,9 @@
+! (c)2009 Joe Groff bsd license
 USING: alien.c-types alien.syntax audio combinators endian
 combinators.short-circuit io io.binary io.encodings.binary
 io.files io.streams.byte-array kernel locals math
 sequences alien alien.data classes.struct accessors
-audio.chunked-file ;
+audio.chunked-file audio.loader ;
 IN: audio.wav
 
 CONSTANT: RIFF-MAGIC "RIFF"
@@ -40,6 +41,7 @@ STRUCT: wav-data-chunk
     [ {
         { [ dup FMT-MAGIC  wav-fmt-chunk  check-chunk ] [ wav-fmt-chunk  memory>struct fmt!  ] }
         { [ dup DATA-MAGIC wav-data-chunk check-chunk ] [ wav-data-chunk memory>struct data! ] }
+        [ drop ]
     } cond ] while drop
     fmt data 2dup and [ invalid-audio-file ] unless ;
 
@@ -68,3 +70,5 @@ STRUCT: wav-data-chunk
             read-riff-chunk verify-wav (read-wav)
         ] with-file-reader
     ] with-endianness ;
+
+"wav" [ read-wav ] register-audio-extension