music-pitch 1.8 → 1.8.1
raw patch · 7 files changed
+246/−26 lines, 7 filesdep ~music-pitch-literalPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: music-pitch-literal
API changes (from Hackage documentation)
- Music.Pitch.Ambitus: Ambitus :: (Interval a) -> Ambitus a
- Music.Pitch.Ambitus: getAmbitus :: Ambitus a -> (Interval a)
- Music.Pitch.Ambitus: newtype Ambitus a
- Music.Pitch.Common.Chromatic: ChromaticSteps :: Integer -> ChromaticSteps
- Music.Pitch.Common.Chromatic: getChromaticSteps :: ChromaticSteps -> Integer
- Music.Pitch.Common.Chromatic: newtype ChromaticSteps
- Music.Pitch.Common.Diatonic: DiatonicSteps :: Integer -> DiatonicSteps
- Music.Pitch.Common.Diatonic: getDiatonicSteps :: DiatonicSteps -> Integer
- Music.Pitch.Common.Diatonic: newtype DiatonicSteps
- Music.Pitch.StaffLines: data HalfSpaces
- Music.Pitch.StaffLines: data StaffLines
- Music.Pitch.StaffLines: instance Enum HalfSpaces
- Music.Pitch.StaffLines: instance Enum StaffLines
- Music.Pitch.StaffLines: instance Eq HalfSpaces
- Music.Pitch.StaffLines: instance Eq StaffLines
- Music.Pitch.StaffLines: instance Integral HalfSpaces
- Music.Pitch.StaffLines: instance Integral StaffLines
- Music.Pitch.StaffLines: instance Num HalfSpaces
- Music.Pitch.StaffLines: instance Num StaffLines
- Music.Pitch.StaffLines: instance Ord HalfSpaces
- Music.Pitch.StaffLines: instance Ord StaffLines
- Music.Pitch.StaffLines: instance Read HalfSpaces
- Music.Pitch.StaffLines: instance Read StaffLines
- Music.Pitch.StaffLines: instance Real HalfSpaces
- Music.Pitch.StaffLines: instance Real StaffLines
- Music.Pitch.StaffLines: instance Show HalfSpaces
- Music.Pitch.StaffLines: instance Show StaffLines
- Music.Pitch.StaffLines: instance Typeable HalfSpaces
- Music.Pitch.StaffLines: instance Typeable StaffLines
+ Music.Pitch: data HalfSpaces
+ Music.Pitch: data StaffLines
+ Music.Pitch.Ambitus: ambitus' :: (Num a, Ord a) => Iso' (a, a) (Ambitus a)
+ Music.Pitch.Ambitus: ambitusHighest :: (Num a, Ord a) => Ambitus a -> a
+ Music.Pitch.Ambitus: ambitusInterval :: (Num a, Ord a, AffineSpace a) => Ambitus a -> Diff a
+ Music.Pitch.Ambitus: ambitusLowest :: (Num a, Ord a) => Ambitus a -> a
+ Music.Pitch.Ambitus: data Ambitus a
+ Music.Pitch.Ambitus: mapAmbitus :: (Ord b, Num b) => (a -> b) -> Ambitus a -> Ambitus b
+ Music.Pitch.Common.Chromatic: data ChromaticSteps
+ Music.Pitch.Common.Diatonic: data DiatonicSteps
+ Music.Pitch.Scale: _intervals :: Lens' (Function a) [Diff a]
+ Music.Pitch.Scale: _repeat :: Lens' (Function a) (Diff a)
+ Music.Pitch.Scale: _tonic :: Lens' (Chord a) a
+ Music.Pitch.Scale: aeolian :: Mode Pitch
+ Music.Pitch.Scale: augmentedChord :: Function Pitch
+ Music.Pitch.Scale: bebopScale :: Mode Pitch
+ Music.Pitch.Scale: bluesScale :: Mode Pitch
+ Music.Pitch.Scale: data Chord a
+ Music.Pitch.Scale: data Function a
+ Music.Pitch.Scale: data Mode a
+ Music.Pitch.Scale: data Scale a
+ Music.Pitch.Scale: diminishedChord :: Function Pitch
+ Music.Pitch.Scale: dorian :: Mode Pitch
+ Music.Pitch.Scale: fifthMode :: Mode Pitch
+ Music.Pitch.Scale: firstMode :: Mode Pitch
+ Music.Pitch.Scale: fourthMode :: Mode Pitch
+ Music.Pitch.Scale: halfDiminishedChord :: Function Pitch
+ Music.Pitch.Scale: harmonicMinorScale :: Mode Pitch
+ Music.Pitch.Scale: ionian :: Mode Pitch
+ Music.Pitch.Scale: locrian :: Mode Pitch
+ Music.Pitch.Scale: lydian :: Mode Pitch
+ Music.Pitch.Scale: majorPentaTonic :: Mode Pitch
+ Music.Pitch.Scale: majorScale :: Mode Pitch
+ Music.Pitch.Scale: majorSeventhChord :: Function Pitch
+ Music.Pitch.Scale: majorTriad :: Function Pitch
+ Music.Pitch.Scale: melodicMinorScale :: Mode Pitch
+ Music.Pitch.Scale: minorPentaTonic :: Mode Pitch
+ Music.Pitch.Scale: minorTriad :: Function Pitch
+ Music.Pitch.Scale: mixolydian :: Mode Pitch
+ Music.Pitch.Scale: octatonic :: Mode Pitch
+ Music.Pitch.Scale: phrygian :: Mode Pitch
+ Music.Pitch.Scale: pureMinorScale :: Mode Pitch
+ Music.Pitch.Scale: secondMode :: Mode Pitch
+ Music.Pitch.Scale: seventhMode :: Mode Pitch
+ Music.Pitch.Scale: sixthMode :: Mode Pitch
+ Music.Pitch.Scale: thirdMode :: Mode Pitch
+ Music.Pitch.Scale: wholeTone :: Mode Pitch
- Music.Pitch.Ambitus: ambitus :: (Num a, Ord a) => Iso' (a, a) (Ambitus a)
+ Music.Pitch.Ambitus: ambitus :: (Num a, Ord a) => Iso (a, a) (b, b) (Ambitus a) (Ambitus b)
Files
- music-pitch.cabal +5/−4
- src/Music/Pitch/Ambitus.hs +28/−2
- src/Music/Pitch/Common/Chromatic.hs +3/−1
- src/Music/Pitch/Common/Diatonic.hs +3/−1
- src/Music/Pitch/Common/Interval.hs +2/−2
- src/Music/Pitch/Common/Quality.hs +17/−16
- src/Music/Pitch/Scale.hs +188/−0
music-pitch.cabal view
@@ -1,6 +1,6 @@ name: music-pitch-version: 1.8+version: 1.8.1 cabal-version: >= 1.10 author: Hans Hoglund maintainer: Hans Hoglund@@ -26,7 +26,7 @@ containers, lens >= 4.6 && < 4.7, semigroups >= 0.13.0.1 && < 1,- music-pitch-literal == 1.8,+ music-pitch-literal == 1.8.1, data-interval >= 1.0.0 && < 2, vector-space >= 0.8.7 && < 0.9, vector-space-points >= 0.2 && < 0.3,@@ -48,10 +48,11 @@ Music.Pitch.Common.Harmony Music.Pitch.Common.Names Music.Pitch.Ambitus- Music.Pitch.StaffLines+ Music.Pitch.Scale Music.Pitch.Clef- Music.Pitch.Tokawa Music.Pitch.Intonation+ other-modules: Music.Pitch.StaffLines+ Music.Pitch.Tokawa hs-source-dirs: src default-language: Haskell2010 ghc-options: -fno-warn-typed-holes
src/Music/Pitch/Ambitus.hs view
@@ -16,11 +16,21 @@ -- ------------------------------------------------------------------------------------- -module Music.Pitch.Ambitus where+module Music.Pitch.Ambitus (+ Ambitus,+ ambitus,+ ambitus',+ mapAmbitus,+ ambitusHighest,+ ambitusLowest,+ ambitusInterval,+ ) where import Data.Interval hiding (Interval, interval) import qualified Data.Interval as I import Control.Lens+import Data.VectorSpace+import Data.AffineSpace -- | An ambitus is a closed interval (in the mathematical sense). -- @@ -39,11 +49,27 @@ instance (Show a, Num a, Ord a) => Show (Ambitus a) where show a = show (a^.from ambitus) ++ "^.ambitus" -ambitus :: (Num a, Ord a) => Iso' (a, a) (Ambitus a)+ambitus :: (Num a, Ord a) => Iso (a, a) (b, b) (Ambitus a) (Ambitus b) ambitus = iso toA unA . _Unwrapped where toA = (\(m, n) -> (I.<=..<=) (Finite m) (Finite n)) unA a = case (I.lowerBound a, I.upperBound a) of (Finite m, Finite n) -> (m, n) +ambitus' :: (Num a, Ord a) => Iso' (a, a) (Ambitus a)+ambitus' = ambitus++-- | Not a true functor for similar reasons as sets.+mapAmbitus :: (Ord b, Num b) => (a -> b) -> Ambitus a -> Ambitus b+mapAmbitus = over (from ambitus . both)++-- | Returns a postive interval (or _P1 for empty ambitus)+ambitusInterval :: (Num a, Ord a, AffineSpace a) => Ambitus a -> Diff a+ambitusInterval x = let (m,n) = x^.from ambitus in n .-. m++ambitusLowest :: (Num a, Ord a) => Ambitus a -> a+ambitusLowest x = let (m,n) = x^.from ambitus in m++ambitusHighest :: (Num a, Ord a) => Ambitus a -> a+ambitusHighest x = let (m,n) = x^.from ambitus in n
src/Music/Pitch/Common/Chromatic.hs view
@@ -5,7 +5,9 @@ {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TypeFamilies #-} -module Music.Pitch.Common.Chromatic where+module Music.Pitch.Common.Chromatic (+ ChromaticSteps,+ ) where newtype ChromaticSteps = ChromaticSteps { getChromaticSteps :: Integer }
src/Music/Pitch/Common/Diatonic.hs view
@@ -5,7 +5,9 @@ {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TypeFamilies #-} -module Music.Pitch.Common.Diatonic where+module Music.Pitch.Common.Diatonic (+ DiatonicSteps,+ ) where newtype DiatonicSteps = DiatonicSteps { getDiatonicSteps :: Integer } deriving (Eq, Ord, Show, Enum, Num, Real, Integral)
src/Music/Pitch/Common/Interval.hs view
@@ -427,7 +427,7 @@ -- semitones. -- isStep :: Interval -> Bool-isStep (Interval (a, d)) = (abs d) <= 2+isStep (Interval (a, d)) = (abs d) <= 1 -- | -- Returns whether the given interval is a leap (larger than a second).@@ -437,7 +437,7 @@ -- semitones. -- isLeap :: Interval -> Bool-isLeap (Interval (a, d)) = (abs d) > 2+isLeap (Interval (a, d)) = (abs d) > 1 -- |
src/Music/Pitch/Common/Quality.hs view
@@ -5,24 +5,25 @@ {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TypeFamilies #-} -module Music.Pitch.Common.Quality where-{---- * Quality-Quality(..),-HasQuality(..),-invertQuality,-isPerfect,-isMajor,-isMinor,-isAugmented,-isDiminished,+module Music.Pitch.Common.Quality (+ -- * Quality+ Quality(..),+ HasQuality(..),+ invertQuality,+ isPerfect,+ isMajor,+ isMinor,+ isAugmented,+ isDiminished, -QualityType(..),-expectedQualityType,-qualityTypes,-qualityToDiff,+ -- * Quality type+ QualityType(..),+ expectedQualityType,+ qualityTypes,+ qualityToDiff --}+) where+ import Music.Pitch.Augmentable import Music.Pitch.Common.Number import Music.Pitch.Common.Chromatic
+ src/Music/Pitch/Scale.hs view
@@ -0,0 +1,188 @@++{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TypeFamilies #-}++------------------------------------------------------------------------------------+-- |+-- Copyright : (c) Hans Hoglund, Edward Lilley 2012–2014+--+-- License : BSD-style+--+-- Maintainer : hans@hanshoglund.se+-- Stability : experimental+-- Portability : non-portable (TF,GNTD)+--+-------------------------------------------------------------------------------------++module Music.Pitch.Scale (+ Mode,+ Scale,+ majorScale,+ pureMinorScale,+ harmonicMinorScale,+ melodicMinorScale,+ aeolian,+ locrian,+ ionian,+ dorian,+ phrygian,+ lydian,+ mixolydian,+ majorPentaTonic,+ minorPentaTonic,+ bluesScale,+ bebopScale,+ wholeTone,+ octatonic,+ firstMode,+ secondMode,+ thirdMode,+ fourthMode,+ fifthMode,+ sixthMode,+ seventhMode,++ Function,+ _intervals,+ _repeat,+ Chord,+ _tonic,+ + majorTriad,+ minorTriad,+ augmentedChord,+ diminishedChord,+ halfDiminishedChord,+ majorSeventhChord,+ + ) where++import Data.VectorSpace+import Data.AffineSpace+import Music.Pitch.Literal+import Control.Lens+import Music.Pitch hiding (Mode) -- Test++data Mode a = Mode [Diff a] (Diff a) -- intervals, repeat (usually octave)+data Scale a = Scale a (Mode a) -- root, mode++data Function a = Function [Diff a] (Diff a) -- intervals, repeat, repeat (usually octave)+data Chord a = Chord a (Function a) -- root, function ++_intervals :: Lens' (Function a) [Diff a]+_intervals f (Function is r) = fmap (\is -> Function is r) $ f is++_repeat :: Lens' (Function a) (Diff a)+_repeat f (Function is r) = fmap (\r -> Function is r) $ f r++{-+_pitches :: Lens' (Chord a) [a]+_pitches f (Chord t xs) = fmap (\xs -> Chord t (fmap (.-. t) xs)) $ f (fmap (.+^ t) $ xs) . _intervals+-}++_tonic :: Lens' (Chord a) a+_tonic f (Chord t xs) = fmap (\t -> Chord t xs) $ f t++majorScale :: Mode Pitch+majorScale = Mode [_M2,_M2] _P8++pureMinorScale :: Mode Pitch+pureMinorScale = undefined++harmonicMinorScale :: Mode Pitch+harmonicMinorScale = undefined++melodicMinorScale :: Mode Pitch+melodicMinorScale = undefined++aeolian :: Mode Pitch+aeolian = Mode [_M2,_M2,m2,_M2,_M2,m2,_M2] _P8++locrian :: Mode Pitch+locrian = undefined++ionian :: Mode Pitch+ionian = undefined++dorian :: Mode Pitch+dorian = undefined++phrygian :: Mode Pitch+phrygian = undefined++lydian :: Mode Pitch+lydian = undefined++mixolydian :: Mode Pitch+mixolydian = undefined++majorPentaTonic :: Mode Pitch+majorPentaTonic = undefined++minorPentaTonic :: Mode Pitch+minorPentaTonic = undefined++bluesScale :: Mode Pitch+bluesScale = undefined++bebopScale :: Mode Pitch+bebopScale = undefined++wholeTone :: Mode Pitch+wholeTone = undefined++octatonic :: Mode Pitch+octatonic = undefined++firstMode :: Mode Pitch+firstMode = undefined++secondMode :: Mode Pitch+secondMode = undefined++thirdMode :: Mode Pitch+thirdMode = undefined++fourthMode :: Mode Pitch+fourthMode = undefined++fifthMode :: Mode Pitch+fifthMode = undefined++sixthMode :: Mode Pitch+sixthMode = undefined++seventhMode :: Mode Pitch+seventhMode = undefined+++++majorTriad :: Function Pitch+majorTriad = undefined++minorTriad :: Function Pitch+minorTriad = undefined++augmentedChord :: Function Pitch+augmentedChord = undefined++diminishedChord :: Function Pitch+diminishedChord = undefined++halfDiminishedChord :: Function Pitch+halfDiminishedChord = undefined++majorSeventhChord :: Function Pitch+majorSeventhChord = undefined++++++