@@ -11,7 +11,7 @@ module ReadFile =
1111 /// Apply parse then apply the check, if the check fails report
1212 /// the error message.
1313 let postCheck parser isOutputValid errorMessage =
14- monad {
14+ parseMidi {
1515 let! answer = parser
1616 if isOutputValid answer then
1717 return answer
@@ -29,43 +29,43 @@ module ReadFile =
2929
3030 let getVarlen : ParserMonad < word32 > =
3131 let rec loop acc =
32- monad {
32+ parseMidi {
3333 let! b = readByte
3434 let acc = acc <<< 7
3535 if msbHigh b then
3636 let result = uint64 ( b &&& 0b01111111 uy)
3737 return ! loop ( acc + result)
3838 else
3939 return ( acc + ( uint64 b)) }
40- monad {
40+ parseMidi {
4141 let! result = loop 0 UL
4242 return ( uint32 result) }
4343
4444 let getVarlenText = gencount getVarlen readChar ( fun _ b -> System.String b)
4545 let getVarlenBytes = gencount getVarlen readByte ( fun _ b -> b)
4646
4747 let deltaTime =
48- monad {
48+ parseMidi {
4949 let! v = getVarlen
5050 return DeltaTime( v)
5151 } <??> ( fun p -> " delta time" )
5252
5353 let fileFormat =
54- monad {
54+ parseMidi {
5555 match ! readUInt16be with
5656 | 0 us -> return MidiFormat0
5757 | 1 us -> return MidiFormat1
5858 | 2 us -> return MidiFormat2
5959 | x -> return ! ( fatalError ( Other ( sprintf " fileFormat: Unrecognized file format %i " x)))
6060 }
6161 let timeDivision =
62- monad {
62+ parseMidi {
6363 match ! readUInt16be with
6464 | TestBit 15 as x -> return FramePerSecond ( clearBit 15 x)
6565 | x -> return TicksPerBeat x
6666 }
6767 let header =
68- monad {
68+ parseMidi {
6969 let! _ = assertString " MThd"
7070 let! _ = assertWord32 6 u
7171 let! format = fileFormat
@@ -76,59 +76,59 @@ module ReadFile =
7676 format = format }
7777 }
7878 let trackHeader =
79- monad {
79+ parseMidi {
8080 let! _ = assertString " MTrk"
8181 return ! readUInt32be
8282 }
8383
8484 let textEvent textType =
85- monad {
85+ parseMidi {
8686 let! text = getVarlenText
8787 return TextEvent( textType, text)
8888 }
8989
9090 let scale =
91- monad {
91+ parseMidi {
9292 match ! readByte with
9393 | 0 uy -> return MidiScaleType.Major
9494 | 1 uy -> return MidiScaleType.Minor
9595 | other -> return MidiScaleType.OtherScale other
9696 }
9797
9898 let metaEventSequenceNumber =
99- monad {
99+ parseMidi {
100100 let! a = assertWord8 2 uy
101101 let! b = peek
102102 return SequenceNumber( word16be a b)
103103 }
104104
105105 let metaEventChannelPrefix =
106- monad {
106+ parseMidi {
107107 let! _ = assertWord8 0x01 uy
108108 let! b = readByte
109109 return ChannelPrefix b
110110 }
111111
112112 let metaEventMidiPort =
113- monad {
113+ parseMidi {
114114 let! _ = assertWord8 0x01 uy
115115 let! b = readByte
116116 return MidiPort b
117117 }
118118 let metaEventEndOfTrack =
119- monad {
119+ parseMidi {
120120 let! _ = assertWord8 0 uy
121121 return EndOfTrack
122122 }
123123 let metaEventSetTempo =
124- monad {
124+ parseMidi {
125125 let! _ = assertWord8 3 uy
126126 let! a = readWord24be
127127 return SetTempo a
128128 }
129129
130130 let metaEventSmpteOffset =
131- monad {
131+ parseMidi {
132132 let! _ = assertWord8 5 uy
133133 let! a = readByte
134134 let! b = readByte
@@ -138,7 +138,7 @@ module ReadFile =
138138 return SMPTEOffset( a, b, c, d, e)
139139 }
140140 let metaEventTimeSignature =
141- monad {
141+ parseMidi {
142142 let! _ = assertWord8 4 uy
143143 let! a = readByte
144144 let! b = readByte
@@ -148,7 +148,7 @@ module ReadFile =
148148 }
149149
150150 let metaEventKeySignature =
151- monad {
151+ parseMidi {
152152 let! _ = assertWord8 2 uy
153153 let! a = readByte
154154 let a = int8 a
@@ -158,7 +158,7 @@ module ReadFile =
158158
159159 let metaEvent i =
160160 let konst k _ = k
161- monad {
161+ parseMidi {
162162 match i with
163163 | 0x00 uy -> return ! metaEventSequenceNumber <??> ( konst " sequence number" )
164164 | 0x01 uy -> return ! textEvent GenericText <??> ( konst " generic text" )
@@ -188,7 +188,7 @@ module ReadFile =
188188 | None -> false
189189
190190 let rec sysExContPackets =
191- monad {
191+ parseMidi {
192192 let! d = deltaTime
193193 let! b = getVarlenBytes
194194 let answer = MidiSysExContPacket ( d, b)
@@ -198,7 +198,7 @@ module ReadFile =
198198 return ( answer :: answer2)
199199 }
200200 let sysExEvent =
201- monad {
201+ parseMidi {
202202 let! b = getVarlenBytes
203203 if isTerminated b then
204204 return SysExSingle b
@@ -207,7 +207,7 @@ module ReadFile =
207207 return SysExCont( b, cont)
208208 } <??> ( fun _ -> " sysExEvent" )
209209 let sysExEscape =
210- monad {
210+ parseMidi {
211211 let! bytes = getVarlenBytes
212212 return SysExEscape bytes
213213 } <??> ( fun _ -> " sysExEscape" )
@@ -218,7 +218,7 @@ module ReadFile =
218218 match n with
219219 | 0xf1 uy -> readByte >>= ( QuarterFrame >> mreturn) <??> ( fun p -> " quarter frame" )
220220 | 0xf2 uy ->
221- monad {
221+ parseMidi {
222222 let! a = readByte
223223 let! b = readByte
224224 return SongPosPointer( a, b)
@@ -246,53 +246,53 @@ module ReadFile =
246246 b &&& 0xf0 uy, b &&& 0x0f uy
247247
248248 let noteOff ch =
249- monad {
249+ parseMidi {
250250 let! a = readByte
251251 let! b = readByte
252252 return MidiVoiceEvent.NoteOff( ch, a, b)
253253 } <??> ( fun p -> " note-off" )
254254
255255 let noteOn ch =
256- monad {
256+ parseMidi {
257257 let! a = readByte
258258 let! b = readByte
259259 return MidiVoiceEvent.NoteOn( ch, a, b)
260260 } <??> ( fun p -> " note-on" )
261261
262262 let noteAftertouch ch =
263- monad {
263+ parseMidi {
264264 let! a = readByte
265265 let! b = readByte
266266 return MidiVoiceEvent.NoteAfterTouch( ch, a, b)
267267 } <??> ( fun p -> " noteAftertouch" )
268268
269269 let controller ch =
270- monad {
270+ parseMidi {
271271 let! a = readByte
272272 let! b = readByte
273273 return MidiVoiceEvent.Controller( ch, a, b)
274274 } <??> ( fun p -> " controller" )
275275
276276 let programChange ch =
277- monad {
277+ parseMidi {
278278 let! a = readByte
279279 return MidiVoiceEvent.ProgramChange( ch, a)
280280 } <??> ( fun p -> " controller" )
281281
282282 let channelAftertouch ch =
283- monad {
283+ parseMidi {
284284 let! a = readByte
285285 return MidiVoiceEvent.ChannelAftertouch( ch, a)
286286 } <??> ( fun p -> " channelAftertouch" )
287287 let pitchBend ch =
288- monad {
288+ parseMidi {
289289 let! a = readWord14be
290290 return MidiVoiceEvent.PitchBend( ch, a)
291291 } <??> ( fun p -> " pitchBend" )
292292
293293
294294 let voiceEvent n =
295- monad {
295+ parseMidi {
296296 match n with
297297 | SB( 0x80 uy, ch) -> do ! setRunningEvent ( NoteOff ch);
298298 return ! noteOff ch
@@ -331,7 +331,7 @@ module ReadFile =
331331 /// can cause fatal parse errors.
332332
333333 let event : ParserMonad < MidiEvent > =
334- monad {
334+ parseMidi {
335335 match ! peek with
336336 | 0xff uy ->
337337 do ! dropByte
@@ -362,26 +362,26 @@ module ReadFile =
362362 }
363363
364364 let message =
365- monad {
365+ parseMidi {
366366 let! deltaTime = deltaTime
367367 let! event = event
368368 return { timestamp = deltaTime; event = event }
369369 }
370370 let messages i =
371- monad {
371+ parseMidi {
372372
373373 let! lastPos = getPos
374374 let maxPos = lastPos + int i
375375 return ! repeatTillPosition maxPos message
376376 }
377377 let track : ParserMonad < MidiTrack > =
378- monad {
378+ parseMidi {
379379 let! length = trackHeader
380380 return ! messages length
381381 }
382382
383383 let midiFile =
384- monad {
384+ parseMidi {
385385 let! header = header
386386 let! tracks = count ( header.trackCount) track
387387 return { header = header; tracks = tracks }
0 commit comments