packages feed

music-parts 1.7.2 → 1.8

raw patch · 11 files changed

+281/−26 lines, 11 filesdep +containersdep +music-dynamicsdep −semigroupoidsdep ~data-defaultdep ~lensdep ~music-pitchPVP ok

version bump matches the API change (PVP)

Dependencies added: containers, music-dynamics

Dependencies removed: semigroupoids

Dependency ranges changed: data-default, lens, music-pitch, roman-numerals

API changes (from Hackage documentation)

+ Music.Parts.Instrument: allowedClefs :: Instrument -> Set Clef
+ Music.Parts.Instrument: comfortableRange :: Instrument -> Ambitus Pitch
+ Music.Parts.Instrument: fullName :: Instrument -> String
+ Music.Parts.Instrument: instrumentName :: Instrument -> String
+ Music.Parts.Instrument: playableDynamics :: Instrument -> Pitch -> Dynamics
+ Music.Parts.Instrument: playableRange :: Instrument -> Ambitus Pitch
+ Music.Parts.Instrument: shortName :: Instrument -> String
+ Music.Parts.Instrument: transposition :: Instrument -> Interval
+ Music.Parts.Instrument: transpositionString :: Instrument -> String
+ Music.Parts.Instrument.Brass: brassInstrument :: Prism' Instrument BrassInstrument
+ Music.Parts.Instrument.Brass: data BrassInstrument
+ Music.Parts.Instrument.Keyboard: data KeyboardInstrument
+ Music.Parts.Instrument.Keyboard: keyboardInstrument :: Prism' Instrument KeyboardInstrument
+ Music.Parts.Instrument.Percussion: data PercussionInstrument
+ Music.Parts.Instrument.Percussion: percussionInstrument :: Prism' Instrument PercussionInstrument
+ Music.Parts.Instrument.Strings: allowedTunings :: StringInstrument -> Set StringTuning
+ Music.Parts.Instrument.Strings: data StringInstrument
+ Music.Parts.Instrument.Strings: isAllowedTuning :: StringInstrument -> StringTuning -> Bool
+ Music.Parts.Instrument.Strings: isNonStandardTuning :: StringInstrument -> StringTuning -> Bool
+ Music.Parts.Instrument.Strings: isStandardTuning :: StringInstrument -> StringTuning -> Bool
+ Music.Parts.Instrument.Strings: naturalHarmonicPositions :: StringInstrument -> Set HarmonicPosition
+ Music.Parts.Instrument.Strings: standardTuning :: StringInstrument -> StringTuning
+ Music.Parts.Instrument.Strings: stringInstrument :: Prism' Instrument StringInstrument
+ Music.Parts.Instrument.Strings: type HarmonicPosition = Integer
+ Music.Parts.Instrument.Strings: type StringTuning = [Pitch]
+ Music.Parts.Instrument.Woodwind: allowedGlissandi :: Set GlissandoRange
+ Music.Parts.Instrument.Woodwind: data WoodwindInstrument
+ Music.Parts.Instrument.Woodwind: effectiveGlissandi :: Set GlissandoRange
+ Music.Parts.Instrument.Woodwind: isAllowedGlissando :: WoodwindInstrument -> Glissando -> Bool
+ Music.Parts.Instrument.Woodwind: type Glissando = Ambitus Pitch
+ Music.Parts.Instrument.Woodwind: type GlissandoRange = Ambitus Pitch
+ Music.Parts.Instrument.Woodwind: woodwindInstrument :: Prism' Instrument WoodwindInstrument
+ Music.Parts.Subpart: isProperSubpartOf :: Subpart -> Subpart -> Bool
+ Music.Parts.Subpart: isSubpartOf :: Subpart -> Subpart -> Bool
+ Music.Parts.Subpart: properlyContainsSubpart :: Subpart -> Subpart -> Bool

Files

music-parts.cabal view
@@ -1,6 +1,6 @@  name:                   music-parts-version:                1.7.2+version:                1.8 author:                 Hans Hoglund maintainer:             Hans Hoglund license:                BSD3@@ -21,20 +21,22 @@   location:             git://github.com/music-suite/music-parts.git    library                    -    build-depends:      base                    >= 4 &&   < 5,-                        aeson                   >= 0.7.0.6 && < 1,-                        lens				            >= 4.3.3 && < 4.4,+    build-depends:      base                    >= 4 &&        < 5,+                        containers              >= 0.5.5.1  && < 1,+                        aeson                   >= 0.7.0.6  && < 1,+                        lens                    >= 4.6      && < 4.7,                         semigroups              >= 0.13.0.1 && < 1,-                        semigroupoids,-                        data-default,-                        adjunctions             >= 4.1 && < 5,-                        roman-numerals,-                        music-pitch             == 1.7.2+                        data-default            >= 0.5.3    && < 1,+                        adjunctions             >= 4.1      && < 5,+                        roman-numerals          >= 0.5.1.4  && < 1,+                        music-pitch             == 1.8,+                        music-dynamics          == 1.8     exposed-modules:    Data.Semigroup.Option.Instances                                                  Music.Parts                                                  Music.Parts.Basic+                        Music.Parts.Voices                                                  -- -- TODO choral voicings etc                         -- -- TODO use single type or many? How to do "subtyping"@@ -53,14 +55,16 @@                         -- Music.Parts.Woodwind                         -- Music.Parts.Brass                         -- Music.Parts.Percussion+                        -- Music.Parts.Instrument.Keyboard                         -- Music.Parts.Rhythm                         -- Music.Parts.Other                                                  Music.Parts.Instrument-                        -- Music.Parts.Instrument.Strings-                        -- Music.Parts.Instrument.Woodwind-                        -- Music.Parts.Instrument.Brass-                        -- Music.Parts.Instrument.Percussion+                        Music.Parts.Instrument.Strings+                        Music.Parts.Instrument.Woodwind+                        Music.Parts.Instrument.Brass+                        Music.Parts.Instrument.Percussion+                        Music.Parts.Instrument.Keyboard                         -- Music.Parts.Instrument.Rhythm                         -- Music.Parts.Instrument.Other                         
src/Data/Semigroup/Option/Instances.hs view
@@ -13,6 +13,7 @@ import           Text.Numeral.Roman      (toRoman)  -- TODO move+-- TODO toInteger/toRational/fromEnum are unsafe  instance Num a => Num (Option a) where   (+)       = liftA2 (+)@@ -44,6 +45,3 @@   toInteger = toInteger . get where get = (head.toListOf traverse) instance Real a => Real (First a) where   toRational = toRational . get where get = (head.toListOf traverse)--- instance Enum a => Enum (First a) where-  -- toEnum = toEnum . get where get = (head.toListOf traverse)-  -- fromEnum = pure . fromEnum
src/Music/Parts.hs view
@@ -592,11 +592,11 @@         isMonophonic :: Score a -> Bool          -- | Fails for polyphonic scores.-        scoreToVoice :: Score a -> Voice (Maybe a)+        s_oreToVoice :: Score a -> Voice (Maybe a)      A polyphonic score contains several voices, i.e. -        scoreToVoices :: Score a -> [Voice (Maybe a)]+        s_oreToVoices :: Score a -> [Voice (Maybe a)]       A part is any type a that satisfies (Ord a, Show a).
src/Music/Parts/Instrument.hs view
@@ -15,13 +15,22 @@ -- ------------------------------------------------------------------------------------- -module Music.Parts.Instrument -(-Instrument(..),--- TODO hide impl-)-where+module Music.Parts.Instrument (+        Instrument(..),+        -- TODO hide impl+        allowedClefs,+        playableRange,+        comfortableRange,+        playableDynamics, +        -- * Name etc+        instrumentName,+        fullName,+        shortName,+        transposition,+        transpositionString+  ) where+ import           Control.Applicative import           Control.Lens                    (toListOf) import           Data.Default@@ -30,8 +39,12 @@ import           Data.Maybe import           Data.Semigroup import           Data.Semigroup.Option.Instances+import           Data.Set                        (Set) import           Data.Traversable                (traverse) import           Data.Typeable+import           Music.Dynamics                  (Dynamics)+import           Music.Pitch                     (Ambitus, Clef)+import           Music.Pitch.Common              (Interval, Pitch) import           Text.Numeral.Roman              (toRoman)  -- | An 'Instrument' represents the set of all instruments of a given type.@@ -290,4 +303,34 @@     (80, "Mute Triangle"),     (81, "Open Triangle")     ]-             ++++allowedClefs      :: Instrument -> Set Clef+allowedClefs = error "No allowedClefs"++playableRange     :: Instrument -> Ambitus Pitch+playableRange = error "No playableRange"++comfortableRange  :: Instrument -> Ambitus Pitch+comfortableRange = error "No comfortableRange"++playableDynamics :: Instrument -> Pitch -> Dynamics+playableDynamics = error "No playableDynamics"++instrumentName              :: Instrument -> String+instrumentName = error "No name"++fullName          :: Instrument -> String+fullName = error "No fullName"++shortName         :: Instrument -> String+shortName = error "No shortName"++-- sounding .-. written, i.e. -P5 for clarinet+transposition     :: Instrument -> Interval+transposition = error "No transposition"++transpositionString :: Instrument -> String+transpositionString = error "No transpositionString"+
+ src/Music/Parts/Instrument/Brass.hs view
@@ -0,0 +1,17 @@++module Music.Parts.Instrument.Brass (+        BrassInstrument,+        brassInstrument,+  ) where++import Control.Lens+import Music.Parts.Instrument+import Data.Set (Set)+import Music.Pitch.Common (Pitch, Interval)+import Music.Pitch (Ambitus, Clef)++newtype BrassInstrument = BrassInstrument Instrument++brassInstrument :: Prism' Instrument BrassInstrument+brassInstrument = undefined+-- TODO
+ src/Music/Parts/Instrument/Keyboard.hs view
@@ -0,0 +1,17 @@++module Music.Parts.Instrument.Keyboard (+        KeyboardInstrument,+        keyboardInstrument,+  ) where++import Control.Lens+import Music.Parts.Instrument+import Data.Set (Set)+import Music.Pitch.Common (Pitch, Interval)+import Music.Pitch (Ambitus, Clef)++newtype KeyboardInstrument = KeyboardInstrument Instrument++keyboardInstrument :: Prism' Instrument KeyboardInstrument+keyboardInstrument = undefined+-- TODO
+ src/Music/Parts/Instrument/Percussion.hs view
@@ -0,0 +1,17 @@++module Music.Parts.Instrument.Percussion (+        PercussionInstrument,+        percussionInstrument,+  ) where++import Control.Lens+import Music.Parts.Instrument+import Data.Set (Set)+import Music.Pitch.Common (Pitch, Interval)+import Music.Pitch (Ambitus, Clef)++newtype PercussionInstrument = PercussionInstrument Instrument++percussionInstrument :: Prism' Instrument PercussionInstrument+percussionInstrument = undefined+-- TODO
+ src/Music/Parts/Instrument/Strings.hs view
@@ -0,0 +1,55 @@++module Music.Parts.Instrument.Strings (+        StringInstrument,+        stringInstrument,+        +        StringTuning,+        standardTuning,+        allowedTunings,+        +        isAllowedTuning,+        isStandardTuning,+        isNonStandardTuning,+        +        HarmonicPosition,+        +        naturalHarmonicPositions,        +  ) where++import Control.Lens+import Music.Parts.Instrument+import Data.Set (Set)+import Music.Pitch.Common (Pitch, Interval)+import Music.Pitch (Ambitus, Clef)++newtype StringInstrument = StringInstrument Instrument++stringInstrument :: Prism' Instrument StringInstrument+stringInstrument = undefined+-- TODO++type StringTuning = [Pitch]++standardTuning :: StringInstrument -> StringTuning+standardTuning = error "No standardTuning"++-- TODO various tunings+allowedTunings :: StringInstrument -> Set StringTuning+allowedTunings = error "No allowedTunings"+++isAllowedTuning :: StringInstrument -> StringTuning -> Bool+isAllowedTuning = error "No isAllowedTuning"++isStandardTuning :: StringInstrument -> StringTuning -> Bool+isStandardTuning = error "No isStandardTuning"++isNonStandardTuning :: StringInstrument -> StringTuning -> Bool+isNonStandardTuning = error "No isNonStandardTuning"+++type HarmonicPosition = Integer++naturalHarmonicPositions :: StringInstrument -> Set HarmonicPosition+naturalHarmonicPositions = error "No naturalHarmonicPositions"+
+ src/Music/Parts/Instrument/Woodwind.hs view
@@ -0,0 +1,38 @@++module Music.Parts.Instrument.Woodwind (+        WoodwindInstrument,+        woodwindInstrument,+        +        GlissandoRange,+        Glissando,+        allowedGlissandi,+        effectiveGlissandi,+        isAllowedGlissando,        +  ) where++import Control.Lens+import Music.Parts.Instrument+import Data.Set (Set)+import Music.Pitch.Common (Pitch, Interval)+import Music.Pitch (Ambitus, Clef)++newtype WoodwindInstrument = WoodwindInstrument Instrument++woodwindInstrument :: Prism' Instrument WoodwindInstrument+woodwindInstrument = undefined+-- TODO++type GlissandoRange = Ambitus Pitch+type Glissando      = Ambitus Pitch++allowedGlissandi   :: Set GlissandoRange+allowedGlissandi = error "No allowedGlissandi"++effectiveGlissandi :: Set GlissandoRange+effectiveGlissandi = error "No effectiveGlissandi"+++isAllowedGlissando :: WoodwindInstrument -> Glissando -> Bool+isAllowedGlissando = error "No isAllowedGlissandi"++-- TODO correspondance of range/sound/dynamic
src/Music/Parts/Subpart.hs view
@@ -18,6 +18,9 @@ module Music.Parts.Subpart (           Subpart(..),           containsSubpart,+          properlyContainsSubpart,+          isSubpartOf,+          isProperSubpartOf,   ) where  import           Control.Applicative@@ -51,5 +54,18 @@             mapFR f g (x:xs) = f x : fmap g xs  containsSubpart :: Subpart -> Subpart -> Bool-Subpart x `containsSubpart` Subpart y = y `Data.List.isPrefixOf` x+containsSubpart = flip isSubpartOf++properlyContainsSubpart :: Subpart -> Subpart -> Bool+properlyContainsSubpart = flip isProperSubpartOf++isSubpartOf :: Subpart -> Subpart -> Bool+Subpart x `isSubpartOf` Subpart y = y `Data.List.isPrefixOf` x++x `isProperSubpartOf` y =+  x `isSubpartOf` y && x /= y++++ 
+ src/Music/Parts/Voices.hs view
@@ -0,0 +1,50 @@++{-# LANGUAGE DeriveDataTypeable         #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE TypeFamilies               #-}++------------------------------------------------------------------------------------+-- |+-- Copyright   : (c) Hans Hoglund 2012-2015+--+-- License     : BSD-style+--+-- Maintainer  : hans@hanshoglund.se+-- Stability   : experimental+-- Portability : non-portable (TF,GNTD)+--+-- Provides basic voice types. Useful for vocal music but also for abstract+-- voice leading etc.+--+-------------------------------------------------------------------------------------++module Music.Parts.Voices (+  ) where++import           Control.Applicative+import           Control.Lens            (toListOf)+import           Data.Default+import           Data.Functor.Adjunction (unzipR)+import qualified Data.List+import           Data.Maybe+import           Data.Semigroup+import           Data.Traversable        (traverse)+import           Data.Typeable+import           Text.Numeral.Roman      (toRoman)+import           Data.Semigroup.Option.Instances++-- TODO newtype...+-- Related to "bounded" and "sized" integers (i.e. Pitch.Equal)+type SATB       = Int+type SSAATTBB   = Int+type SMezATBarB = Int++-- newtype BasicPart = BasicPart { getBasicPart :: Option (First Integer) }+--     deriving (Eq, Ord, Num, Integral, Real, Enum, Typeable, Semigroup, Monoid)+-- +-- instance Default BasicPart where+--   def = mempty+-- +-- instance Show BasicPart where+--     show _ = ""+--