saturn-examples/midi/parse.hpp
Zack Buhman 86d12c37ed midi: add generator
This adds both a midi generator and a midi type 1 simulator.

While I would have preferred to use an existing tool for this, I found
that timidity++ does not emit pitch wheel events correctly, and I
don't know of another widely-distributed tool that does midi-to-midi
format conversion.

The c++ and python versions were co-developed. I wrote one to test the
other. There is more cleanup to do, but `roundtrip.cpp` produces a
valid type 0 midi file given a type 1 or type 0 midi file as input.
2023-07-01 00:15:53 +00:00

25 lines
384 B
C++

#pragma once
#include <optional>
#include <tuple>
#include <cstdint>
#include "midi.hpp"
namespace midi {
namespace parse {
using buf_t = uint8_t const *;
std::optional<std::tuple<buf_t, header_t>>
header(buf_t buf);
std::optional<std::tuple<buf_t, track_t>>
track(buf_t buf);
std::optional<std::tuple<buf_t, mtrk_event_t>>
mtrk_event(buf_t buf, uint8_t& running_status);
}
}