1+
2+
13//#load "../src/zmidi/datatypes.fs"
24//#load "../src/zmidi/extratypes.fs"
35//#load "../src/zmidi/internal/utils.fs"
46//#load "../src/zmidi/internal/parsermonad.fs"
57//#load "../src/zmidi/read.fs"
68#r " ../build/Debug/AnyCPU/net45/zmidi-fs-core.dll"
7-
8-
99open System.IO
1010open ZMidi.Internal .ParserMonad
1111open ZMidi
12+ //ZMidi.Internal.ParserMonad.debug <- true
13+ (*
14+
15+
16+
17+ let pp = parseMidi {
18+ return boundRepeat 10 readByte
19+ }
20+
21+
22+ let d = Seq.initInfinite (fun i -> byte (i % 255)) |> Seq.truncate 10 |> Seq.toArray
23+ let s = State.initial
24+
25+ let (Ok(ParserMonad f)) = (ZMidi.Internal.ParserMonad.runParser pp d s)
26+ f d s
27+ *)
1228
1329let folder =
1430 Path.Combine(__ SOURCE_ DIRECTORY__ , " .." , " data" , " midifiles" )
1531 |> DirectoryInfo
1632
1733for file in folder.EnumerateFiles() do
1834 let buffer = File.ReadAllBytes file.FullName
35+ printfn " ======================= %s " file.FullName
1936
2037 let parseResult =
2138 ZMidi.Internal.ParserMonad.runParser
2239 ZMidi.ReadFile.midiFile
2340 buffer
2441 State.initial
2542
26-
27- printfn " %s " file.FullName
28-
2943 match parseResult with
3044 | Ok result ->
3145
3246 printfn " %i tracks" result.tracks.Length
3347 for t in result.tracks do
34- t.Length
35- printfn " track: %A " t
36- ()
48+ printfn " track: %A events" t.Length
49+
3750 | Error something -> printfn " ERR: %s %A " file.FullName something
3851
3952
6578
6679//do printfn "hello"; let a = 1; printfn "world %i" a;
6780
81+
82+
83+
84+
85+
86+
87+
88+ let d = [| 0xff uy
89+ 0x08 uy
90+ 0x0e uy
91+ 0x41 uy
92+ 0x6D uy
93+ 0x61 uy
94+ 0x7A uy
95+ 0x69 uy
96+ 0x6e uy
97+ 0x67 uy
98+ 0x20 uy
99+ 0x47 uy
100+ 0x72 uy
101+ 0x61 uy
102+ 0x63 uy
103+ 0x65 uy
104+ 0x00 uy
105+ |]
106+
107+ let p = ZMidi.ReadFile.event
108+ let s = State.initial
109+
110+ let ( Ok ( ParserMonad f )) = ( ZMidi.Internal.ParserMonad.runParser p d s)
111+ f d s
112+
113+
68114open ZMidi.ReadFile
69115open ZMidi.DataTypes
70116let p = parseMidi {
@@ -78,14 +124,8 @@ let p = parseMidi {
78124 timeDivision = timeDiv
79125 format = format }
80126
81- let! _ = assertString " MTrk"
82- let! l = readUInt32be
83- let! t = deltaTime
84- let! e = event
85- return ( l, t, e)
86- //let! track1 = track
87- //return track1
88- }
127+ return ! track
128+ }
89129
90130
91131
@@ -105,3 +145,13 @@ for file in folder.EnumerateFiles() do
105145 | Ok result ->
106146 printfn " %A " result
107147 | Error something -> printfn " ERR: %s %A " file.FullName something
148+
149+
150+
151+ let pp = parseMidi {
152+ return boundRepeat 5 readByte
153+ }
154+
155+ let ( Ok ( ParserMonad f )) = ( ZMidi.Internal.ParserMonad.runParser pp [| 1 uy.. 5 uy|] State.initial)
156+
157+ f [| 1 uy.. 5 uy|] State.initial
0 commit comments