nom_midi/parser/
mod.rs

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}