Skip to content

Commit 60755d0

Browse files
one step closer to actually parse stuff
1 parent 5bec185 commit 60755d0

File tree

6 files changed

+328
-168
lines changed

6 files changed

+328
-168
lines changed

demo/scratch.fsx

Lines changed: 54 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
1-
#load "../src/zmidi/datatypes.fs"
2-
#load "../src/zmidi/extratypes.fs"
3-
#load "../src/zmidi/internal/utils.fs"
4-
#load "../src/zmidi/internal/parsermonad.fs"
5-
#load "../src/zmidi/read.fs"
6-
//#r "../build/Debug/AnyCPU/net45/zmidi-fs-core.dll"
1+
//#load "../src/zmidi/datatypes.fs"
2+
//#load "../src/zmidi/extratypes.fs"
3+
//#load "../src/zmidi/internal/utils.fs"
4+
//#load "../src/zmidi/internal/parsermonad.fs"
5+
//#load "../src/zmidi/read.fs"
6+
#r "../build/Debug/AnyCPU/net45/zmidi-fs-core.dll"
7+
8+
79
open System.IO
810
open ZMidi.Internal.ParserMonad
9-
(*
11+
open ZMidi
12+
1013
let folder =
1114
Path.Combine(__SOURCE_DIRECTORY__ , ".." , "data", "midifiles")
1215
|> DirectoryInfo
@@ -33,7 +36,7 @@ for file in folder.EnumerateFiles() do
3336
()
3437
| Error something -> printfn "ERR: %s %A" file.FullName something
3538

36-
*)
39+
3740
let cases =
3841
[|
3942
{| expected = 0x00000000u; input = [|0x00uy|] |}
@@ -55,18 +58,50 @@ for case in cases do
5558
let result = runParser ZMidi.ReadFile.getVarlen case.input state
5659
printfn "%A" result
5760

61+
do
62+
printfn "hello";
63+
let a = 1;
64+
printfn "world %i" a;
5865

66+
//do printfn "hello"; let a = 1; printfn "world %i" a;
5967

60-
let inline (|TestBit|_|) (bit: int) (i: ^T) =
61-
let mask = LanguagePrimitives.GenericOne <<< bit
62-
if mask &&& i = mask then Some () else None
68+
open ZMidi.ReadFile
69+
open ZMidi.DataTypes
70+
let p = parseMidi {
71+
let! _ = assertString "MThd"
72+
let! _ = assertWord32 6u
73+
let! format = fileFormat
74+
let! trackCount = readUInt16be
75+
let! timeDiv = timeDivision
76+
let header =
77+
{ trackCount = trackCount
78+
timeDivision = timeDiv
79+
format = format }
80+
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+
}
89+
90+
6391

64-
let inline clearBit (bit: int) (i: ^T) =
65-
let mask = ~~~ (LanguagePrimitives.GenericOne <<< bit)
66-
i &&& mask
67-
let inline msbHigh i =
68-
match i with
69-
| TestBit 7 -> true
70-
| _ -> false
92+
for file in folder.EnumerateFiles() do
93+
let buffer = File.ReadAllBytes file.FullName
7194

72-
msbHigh 0x80uy &&& 0x7fuy
95+
let parseResult =
96+
ZMidi.Internal.ParserMonad.runParser
97+
p
98+
buffer
99+
State.initial
100+
101+
102+
printfn "%s" file.FullName
103+
104+
match parseResult with
105+
| Ok result ->
106+
printfn "%A" result
107+
| Error something -> printfn "ERR: %s %A" file.FullName something

src/ZMidi/DataTypes.fs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
type midiportnumber = byte
44
type word8 = byte
55
type word16 = uint16
6+
type word24 = uint32
67
type word32 = uint32
78
type bits7 = byte
89
type midichannel = byte

0 commit comments

Comments
 (0)