module Euterpea.IO.MIDI
  (
    fromMidi            -- :: Midi -> (Music1, Context (Pitch, [NoteAttribute]), UserPatchMap)

  , module Euterpea.IO.MIDI.GeneralMidi
--  , fromGM              -- :: Int -> InstrumentName

--  , toGM                -- :: InstrumentName -> Int

  , defaultOutput         -- :: (OutputDeviceID -> a -> IO b) -> a -> IO b

  , defaultInput          -- :: (InputDeviceID -> a -> IO b) -> a -> IO b

  , playMidi              -- :: OutputDeviceID -> Midi -> IO ()

  , MidiMessage(..)       -- data MidiMessage = ANote { .. } | Std Message

  , Message(..)           -- data Message           (from Codec.Midi)

  , DeviceInfo(..)        -- data DeviceInfo        (from Sound.PortMidi)

  , OutputDeviceID        -- newtype OutputDeviceID

  , InputDeviceID         -- newtype InputDeviceID

  , module Euterpea.IO.MIDI.ToMidi
  , module Euterpea.IO.MIDI.ExportMidiFile
  , module Euterpea.IO.MIDI.Play
  , module Euterpea.IO.MIDI.MEvent
  ) where

import Euterpea.IO.MIDI.FromMidi
import Euterpea.IO.MIDI.GeneralMidi
import Euterpea.IO.MIDI.MidiIO
import Euterpea.IO.MIDI.ToMidi
import Euterpea.IO.MIDI.ExportMidiFile
import Euterpea.IO.MIDI.Play
import Euterpea.IO.MIDI.MEvent