# Functions
use case:
we want to read bytes that are MIDI data and come from a custom midi.Reader
with each read there should come the data of a single MIDI message.
use case:
we want to write bytes that are MIDI data and want to translate them to
midi.Messages that are passed to a custom midi.Writer
NewWriter allows us to pass our custom midi.Writer and returns an io.Writer
that we can write the bytes to.