musicology-pitch-0.1.0.0
CopyrightChristoph Finkensiep 2021
LicenseBSD
Maintainerchfin@chfin.de
Stabilityexperimental
Safe HaskellSafe-Inferred
LanguageHaskell2010
Extensions
  • MonoLocalBinds
  • TypeFamilies
  • DeriveGeneric
  • DefaultSignatures
  • FlexibleContexts
  • KindSignatures
  • GeneralizedNewtypeDeriving
  • ExplicitNamespaces

Musicology.Pitch.Class

Description

This module defines a generic interface for pitch and interval types.

It provides three basic blocks of functionality:

Synopsis

Intervals

Every interval implements the Interval class. Since intervals form vector spaces (or rather [modules]()), Interval inherits from VectorSpace and the associated arithmetic operations ^+^, ^-^, *^, and ^*. Each Interval type is associated with an IntervalClass type that implements octave equivalence. In addition, the classes Diatonic and Chromatic provide extra functionality for intervals that have diatonic and chromatic interpretations.

class VectorSpace i => Interval i where Source #

Minimal complete definition

ic, octave

Associated Types

type ICOf i Source #

Methods

ic :: i -> ICOf i Source #

octave :: i Source #

direction :: i -> Ordering Source #

default direction :: Ord i => i -> Ordering Source #

iabs :: i -> i Source #

Instances

Instances details
Interval MidiIC Source # 
Instance details

Defined in Musicology.Pitch.Midi

Associated Types

type ICOf MidiIC Source #

Interval SIC Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Associated Types

type ICOf SIC Source #

Interval SInterval Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Associated Types

type ICOf SInterval Source #

Interval Int Source # 
Instance details

Defined in Musicology.Pitch.Midi

Associated Types

type ICOf Int Source #

class (Interval i, Interval (IOf i), VectorSpace i, ICOf (IOf i) ~ i) => IntervalClass i where Source #

Associated Types

type IOf i Source #

Methods

emb :: i -> IOf i Source #

Instances

Instances details
IntervalClass MidiIC Source # 
Instance details

Defined in Musicology.Pitch.Midi

Associated Types

type IOf MidiIC Source #

Methods

emb :: MidiIC -> IOf MidiIC Source #

IntervalClass SIC Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Associated Types

type IOf SIC Source #

Methods

emb :: SIC -> IOf SIC Source #

oct :: (IntervalClass i, s ~ Scalar (IOf i)) => s -> i -> IOf i Source #

class Interval i => Diatonic i where Source #

Methods

isStep :: i -> Bool Source #

Instances

Instances details
Diatonic MidiIC Source # 
Instance details

Defined in Musicology.Pitch.Midi

Methods

isStep :: MidiIC -> Bool Source #

Diatonic SIC Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Methods

isStep :: SIC -> Bool Source #

Diatonic SInterval Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Diatonic Int Source # 
Instance details

Defined in Musicology.Pitch.Midi

Methods

isStep :: Int -> Bool Source #

class Interval i => Chromatic i where Source #

Instances

Instances details
Chromatic MidiIC Source # 
Instance details

Defined in Musicology.Pitch.Midi

Chromatic SIC Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Chromatic SInterval Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Chromatic Int Source # 
Instance details

Defined in Musicology.Pitch.Midi

aug :: Chromatic i => i -> i Source #

dim :: Chromatic i => i -> i Source #

down :: Interval i => i -> i Source #

newtype ImperfectInterval i Source #

Constructors

Impf (i -> i) 

Pitches

Pitches are derived from intervals by interpreting an interval relative to a conventional reference point, which is specific to the interval type at hand. A pitch is represented as a Pitch value, which is a newtype wrapper around an interval type. Calculating with pitches and intervals is done with

  • pto, pfrom between pitches,
  • +^, ^+, -^ between pitches and intervals (the ^ is on the interval side)
  • pc for turning a pitch into a pitch class.

newtype Pitch a Source #

Constructors

Pitch a 

Instances

Instances details
Functor Pitch Source # 
Instance details

Defined in Musicology.Pitch.Class

Methods

fmap :: (a -> b) -> Pitch a -> Pitch b #

(<$) :: a -> Pitch b -> Pitch a #

Show MidiPC Source # 
Instance details

Defined in Musicology.Pitch.Midi

Show MidiPitch Source # 
Instance details

Defined in Musicology.Pitch.Midi

Show SPC Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Methods

showsPrec :: Int -> SPC -> ShowS #

show :: SPC -> String #

showList :: [SPC] -> ShowS #

Show SPitch Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Notation MidiPC Source # 
Instance details

Defined in Musicology.Pitch.Midi

Notation MidiPitch Source # 
Instance details

Defined in Musicology.Pitch.Midi

Notation SPC Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Notation SPitch Source # 
Instance details

Defined in Musicology.Pitch.Spelled

ToMidi MidiPC Source # 
Instance details

Defined in Musicology.Pitch.Midi

Methods

toMidi :: MidiPC -> Int Source #

ToMidi MidiPitch Source # 
Instance details

Defined in Musicology.Pitch.Midi

Methods

toMidi :: MidiPitch -> Int Source #

ToMidi SPC Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Methods

toMidi :: SPC -> Int Source #

ToMidi SPitch Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Methods

toMidi :: SPitch -> Int Source #

FromJSON a => FromJSON (Pitch a) Source # 
Instance details

Defined in Musicology.Pitch.Class

ToJSON a => ToJSON (Pitch a) Source # 
Instance details

Defined in Musicology.Pitch.Class

Generic (Pitch a) Source # 
Instance details

Defined in Musicology.Pitch.Class

Associated Types

type Rep (Pitch a) :: Type -> Type #

Methods

from :: Pitch a -> Rep (Pitch a) x #

to :: Rep (Pitch a) x -> Pitch a #

Num (Pitch MidiIC) Source # 
Instance details

Defined in Musicology.MidiNumInstances

Num (Pitch MidiInterval) Source # 
Instance details

Defined in Musicology.MidiNumInstances

NFData a => NFData (Pitch a) Source # 
Instance details

Defined in Musicology.Pitch.Class

Methods

rnf :: Pitch a -> () #

Eq a => Eq (Pitch a) Source # 
Instance details

Defined in Musicology.Pitch.Class

Methods

(==) :: Pitch a -> Pitch a -> Bool #

(/=) :: Pitch a -> Pitch a -> Bool #

Ord a => Ord (Pitch a) Source # 
Instance details

Defined in Musicology.Pitch.Class

Methods

compare :: Pitch a -> Pitch a -> Ordering #

(<) :: Pitch a -> Pitch a -> Bool #

(<=) :: Pitch a -> Pitch a -> Bool #

(>) :: Pitch a -> Pitch a -> Bool #

(>=) :: Pitch a -> Pitch a -> Bool #

max :: Pitch a -> Pitch a -> Pitch a #

min :: Pitch a -> Pitch a -> Pitch a #

Hashable a => Hashable (Pitch a) Source # 
Instance details

Defined in Musicology.Pitch.Class

Methods

hashWithSalt :: Int -> Pitch a -> Int #

hash :: Pitch a -> Int #

(Spelled i, Interval i, Spelled (ICOf i)) => Spelled (Pitch i) Source # 
Instance details

Defined in Musicology.Pitch.Spelled

type Rep (Pitch a) Source # 
Instance details

Defined in Musicology.Pitch.Class

type Rep (Pitch a) = D1 ('MetaData "Pitch" "Musicology.Pitch.Class" "musicology-pitch-0.1.0.0-2ecZDh3I239EsXSbHoAISx" 'True) (C1 ('MetaCons "Pitch" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

toPitch :: a -> Pitch a Source #

pto :: AdditiveGroup v => Pitch v -> Pitch v -> v Source #

pfrom :: AdditiveGroup v => Pitch v -> Pitch v -> v Source #

(+^) :: AdditiveGroup a => Pitch a -> a -> Pitch a Source #

(^+) :: AdditiveGroup a => a -> Pitch a -> Pitch a Source #

(-^) :: AdditiveGroup a => Pitch a -> a -> Pitch a Source #

pc :: Interval p => Pitch p -> Pitch (ICOf p) Source #

Notation

The Notation class implements showing and reading a standard notation that is compatible with other implementations of this library (for standard interval and pitch types).

class Notation i where Source #

Minimal complete definition

showNotation, parseNotation

Instances

Instances details
Notation MidiIC Source # 
Instance details

Defined in Musicology.Pitch.Midi

Notation MidiInterval Source # 
Instance details

Defined in Musicology.Pitch.Midi

Notation MidiPC Source # 
Instance details

Defined in Musicology.Pitch.Midi

Notation MidiPitch Source # 
Instance details

Defined in Musicology.Pitch.Midi

Notation SIC Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Notation SInterval Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Notation SPC Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Notation SPitch Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Other Functions

transpose :: (Functor f, Interval i) => i -> f i -> f i Source #

embedI :: IntervalClass b => b -> IOf b -> b -> IOf b Source #

embedP :: IntervalClass a => a -> IOf a -> Pitch a -> Pitch (IOf a) Source #

embed :: (Functor f, IntervalClass a) => a -> IOf a -> f a -> f (IOf a) Source #

embed' :: (IOf (ICOf v) ~ v, Functor f, IntervalClass (ICOf v), Interval v) => v -> Pitch v -> f (ICOf v) -> f (IOf (ICOf v)) Source #

Conversion Classes

class ToMidi i where Source #

Methods

toMidi :: i -> Int Source #

Instances

Instances details
ToMidi MidiIC Source # 
Instance details

Defined in Musicology.Pitch.Midi

Methods

toMidi :: MidiIC -> Int Source #

ToMidi MidiInterval Source # 
Instance details

Defined in Musicology.Pitch.Midi

ToMidi MidiPC Source # 
Instance details

Defined in Musicology.Pitch.Midi

Methods

toMidi :: MidiPC -> Int Source #

ToMidi MidiPitch Source # 
Instance details

Defined in Musicology.Pitch.Midi

Methods

toMidi :: MidiPitch -> Int Source #

ToMidi SIC Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Methods

toMidi :: SIC -> Int Source #

ToMidi SInterval Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Methods

toMidi :: SInterval -> Int Source #

ToMidi SPC Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Methods

toMidi :: SPC -> Int Source #

ToMidi SPitch Source # 
Instance details

Defined in Musicology.Pitch.Spelled

Methods

toMidi :: SPitch -> Int Source #

class ToFreq i where Source #

Methods

toFreq :: i -> Double Source #