]> gitweb.factorcode.org Git - factor.git/commitdiff
midi: make write-chunk generic.
authorJohn Benediktsson <mrjbq7@gmail.com>
Tue, 28 Apr 2015 21:13:42 +0000 (14:13 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Tue, 28 Apr 2015 21:13:42 +0000 (14:13 -0700)
extra/midi/midi.factor

index fdc86241c67631562d72d4fc9c44ac09a254f75d..3f8ccf4e5a4f3c1545234e714ce6371606866933 100644 (file)
@@ -379,33 +379,29 @@ M: midi-event write-event
         { "reset" [ 2drop 0xff dup write1 ] }
     } case ;
 
-: write-header ( header -- )
+GENERIC: write-chunk ( chunk -- )
+
+M: midi-header write-chunk
     $[ "MThd" >byte-array ] write
     $[ 6 4 >be ] write
     [ format>> ] [ #chunks>> ] [ division>> ] tri
     [ 2 >be write ] tri@ ;
 
-: write-track ( track -- )
+M: midi-track write-chunk
     $[ "MTrk" >byte-array ] write
     binary [
         events>> f swap [ write-event ] each drop
     ] with-byte-writer
     [ length 4 >be write ] [ write ] bi ;
 
-: write-chunk ( chunks -- )
-    {
-        { [ dup midi-header? ] [ write-header ] }
-        { [ dup midi-track? ] [ write-track ] }
-        [
-            [ type>> write ]
-            [ bytes>> [ length 4 >be write ] [ write ] bi ] bi
-        ]
-    } cond ;
+M: midi-chunk write-chunk
+    [ type>> write ]
+    [ bytes>> [ length 4 >be write ] [ write ] bi ] bi ;
 
 PRIVATE>
 
 : write-midi ( midi -- )
-    [ header>> write-header ]
+    [ header>> write-chunk ]
     [ chunks>> [ write-chunk ] each ] bi ;
 
 : midi> ( midi -- byte-array )