{-# LANGUAGE GeneralizedNewtypeDeriving #-}

-------------------------------------------------------------------------------------
-- |
-- Copyright   : (c) Hans Hoglund 2012
--
-- License     : BSD-style
--
-- Maintainer  : hans@hanshoglund.se
-- Stability   : experimental
-- Portability : portable
--
-------------------------------------------------------------------------------------

module Music.MusicXml.Dynamics (

    Dynamics(..)

  ) where

import Music.Dynamics.Literal

data Dynamics 
    = PPPPPP | PPPPP | PPPP | PPP | PP | P 
    | MP | MF 
    | F | FF | FFF | FFFF | FFFFF | FFFFFF
    | SF | SFP | SFPP
    | FP | RF 
    | RFZ 
    | SFZ | SFFZ | FZ
    deriving (Eq, Ord, Show, Enum, Bounded)

instance IsDynamics Dynamics where
    fromDynamics (DynamicsL (Just x, Nothing)) = case x of
        (-6.5) -> PPPPPP
        (-5.5) -> PPPPP
        (-4.5) -> PPPP
        (-3.5) -> PPP
        (-2.5) -> PP
        (-1.5) -> P
        (-0.5) -> MP
        0.5    -> MF
        1.5    -> F
        2.5    -> FF
        3.5    -> FFF
        4.5    -> FFFF
        5.5    -> FFFFF
        6.5    -> FFFFFF
    fromDynamics _ = error "fromDynamics: Unsupported literal for MusicXml.Dynamics"