prev (25) slide 26 / 33 next (27)

performance

perform :: MidiDb.LookupMidiInstrument
    → Instrument.Config → [Event] → ([Midi.WriteMessage], [Warning.Warning])
perform lookup_inst config events = (post_process msgs, warns)
    where
    inst_addrs = config_to_inst_addrs config lookup_inst
    (msgs, warns) = (perform_notes . allot inst_addrs
        . channelize inst_addrs) events

channelize :: InstAddrs → [Event] → [(Event, Channel)]

allot :: InstAddrs → [(Event, Channel)] → [(Event, Instrument.Addr)]

perform_notes :: [(Event, Instrument.Addr)]
    → ([Midi.WriteMessage], [Warning.Warning])

post_process :: [Midi.WriteMessage] → [Midi.WriteMessage]
post_process = reorder_control_messages . drop_duplicates
prev (25) slide 26 / 33 next (27)