module MIDI (readFromMidi, writeToMidi) where

import Euterpea.IO.MIDI.ToMidi (writeMidi)
import Euterpea.IO.MIDI.FromMidi2 (fromMidi2)
import qualified Codec.Midi as MIDI

import Types
import EuterpeaUtils (patternToMusic, musicToPattern)

writeToMidi :: FilePath -> Pattern -> IO ()
writeToMidi fn = writeMidi fn . patternToMusic

readFromMidi :: FilePath -> IO Pattern
readFromMidi = fmap (musicToPattern . fromMidi2) . importFile
  where
    importFile :: FilePath -> IO MIDI.Midi
    importFile fn = do
      r <- MIDI.importFile fn
      case r of
        Left err -> error err
        Right m  -> return m