FComp-1.0: src/HarmTrace/Models/Simple/Main.hs
{-# LANGUAGE DataKinds #-}
--------------------------------------------------------------------------------
-- |
-- Module : HarmTrace.Models.Simple.Main
-- Copyright : (c) 2010-2012 Universiteit Utrecht, 2012 University of Oxford
-- License : GPL3
--
-- Maintainer : bash@cs.uu.nl, jpm@cs.ox.ac.uk
-- Stability : experimental
-- Portability : non-portable
--
-- Summary: The Simple parser
--------------------------------------------------------------------------------
module HarmTrace.Models.Simple.Main (
pSimple, genPiece, getChords
, module HarmTrace.Models.Simple.Model
) where
-- Parser stuff
import Text.ParserCombinators.UU
-- Music stuff
import HarmTrace.Base.MusicRep
import HarmTrace.Models.Collect
import HarmTrace.Models.Parser
import HarmTrace.Models.Generator
import HarmTrace.Models.Simple.Model
import HarmTrace.Models.Simple.Instances ()
import HarmTrace.Models.ChordTokens ( ChordToken )
--------------------------------------------------------------------------------
-- From tokens to structured music pieces
--------------------------------------------------------------------------------
pPieceMaj, pPieceMin :: PMusic [Piece]
pPieceMaj = map Piece <$> amb (parseG :: PMusic [Phrase MajMode])
pPieceMin = map Piece <$> amb (parseG :: PMusic [Phrase MinMode])
pSimple :: Key -> PMusic [Piece]
pSimple (Key _ MajMode) = pPieceMaj
pSimple (Key _ MinMode) = pPieceMin
--------------------------------------------------------------------------------
-- From structured music pieces back to tokens
--------------------------------------------------------------------------------
getChords :: Piece -> [ChordToken]
getChords (Piece phrases) = collectG phrases
--------------------------------------------------------------------------------
-- Generating simple pieces
--------------------------------------------------------------------------------
genPiece :: Key -> Gen Piece
genPiece (Key _ MajMode) = fmap Piece (arbitrary :: Gen [Phrase MajMode])
genPiece (Key _ MinMode) = fmap Piece (arbitrary :: Gen [Phrase MinMode])