1mod event;
2mod header;
3mod track;
4mod util;
5
6pub use event::*;
7pub use header::*;
8pub use track::*;
9
10use crate::types::SimpleMidiFile;
11use nom::IResult;
12
13pub fn parse_smf(i: &[u8]) -> IResult<&[u8], SimpleMidiFile> {
14 let (mut i, header) = parse_header_chunk(i)?;
15 let mut tracks = vec![];
16 for _ in 0..(header.format.count()) {
17 let (i_after, track) = parse_track_chunk(i)?;
18 i = i_after;
19 tracks.push(track);
20 }
21 Ok((
22 i,
23 SimpleMidiFile {
24 header: header,
25 tracks: tracks,
26 },
27 ))
28}