fadno-1.1.9.1: Minimal library for music generation and notation
Safe HaskellNone
LanguageHaskell2010

Fadno.Note

Synopsis

Documentation

data Note p d Source #

Note = pitch and duration.

Constructors

Note 

Fields

Instances

Instances details
Bifunctor Note Source # 
Instance details

Defined in Fadno.Note

Methods

bimap :: (a -> b) -> (c -> d) -> Note a c -> Note b d

first :: (a -> b) -> Note a c -> Note b c

second :: (b -> c) -> Note a b -> Note a c

(Integral p, Traversable c, Integral d, Traversable t) => MidiNotes (t (Note (c p) d)) Source # 
Instance details

Defined in Fadno.Midi

Methods

toMidiNotes :: t (Note (c p) d) -> [([IPitch], IDur)] Source #

(Integral p, Integral d, Traversable t) => MidiNotes (t (Note p d)) Source # 
Instance details

Defined in Fadno.Midi

Methods

toMidiNotes :: t (Note p d) -> [([IPitch], IDur)] Source #

Functor (Note p) Source # 
Instance details

Defined in Fadno.Note

Methods

fmap :: (a -> b) -> Note p a -> Note p b

(<$) :: a -> Note p b -> Note p a

HasTie (Note p d) Source # 
Instance details

Defined in Fadno.Notation

Methods

tie :: Lens' (Note p d) (Maybe Tie) Source #

Generic (Note p d) Source # 
Instance details

Defined in Fadno.Note

Associated Types

type Rep (Note p d) 
Instance details

Defined in Fadno.Note

type Rep (Note p d) = D1 ('MetaData "Note" "Fadno.Note" "fadno-1.1.9.1-E4BcGDnYPDI9waeClDSGX6" 'False) (C1 ('MetaCons "Note" 'PrefixI 'True) (S1 ('MetaSel ('Just "_pitch") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 p) :*: S1 ('MetaSel ('Just "_dur") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 d)))

Methods

from :: Note p d -> Rep (Note p d) x

to :: Rep (Note p d) x -> Note p d

(Show p, Show d) => Show (Note p d) Source # 
Instance details

Defined in Fadno.Note

Methods

showsPrec :: Int -> Note p d -> ShowS

show :: Note p d -> String

showList :: [Note p d] -> ShowS

(Eq p, Eq d) => Eq (Note p d) Source # 
Instance details

Defined in Fadno.Note

Methods

(==) :: Note p d -> Note p d -> Bool

(/=) :: Note p d -> Note p d -> Bool

HasNote (Note' p d) p d Source # 
Instance details

Defined in Fadno.Notation

Methods

note :: Lens' (Note' p d) (Note p d) Source #

fromNote :: HasNote n p d => n -> Note' p d Source #

notePitch :: Lens' (Note' p d) p Source #

noteDur :: Lens' (Note' p d) d Source #

HasNote (Note p d) p d Source # 
Instance details

Defined in Fadno.Note

Methods

note :: Lens' (Note p d) (Note p d) Source #

fromNote :: HasNote n p d => n -> Note p d Source #

notePitch :: Lens' (Note p d) p Source #

noteDur :: Lens' (Note p d) d Source #

Field1 (Note a b) (Note a' b) a a' Source # 
Instance details

Defined in Fadno.Note

Methods

_1 :: Lens (Note a b) (Note a' b) a a'

Field2 (Note a b) (Note a b') b b' Source # 
Instance details

Defined in Fadno.Note

Methods

_2 :: Lens (Note a b) (Note a b') b b'

type Rep (Note p d) Source # 
Instance details

Defined in Fadno.Note

type Rep (Note p d) = D1 ('MetaData "Note" "Fadno.Note" "fadno-1.1.9.1-E4BcGDnYPDI9waeClDSGX6" 'False) (C1 ('MetaCons "Note" 'PrefixI 'True) (S1 ('MetaSel ('Just "_pitch") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 p) :*: S1 ('MetaSel ('Just "_dur") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 d)))

pitch :: forall p1 d p2 f. Functor f => (p1 -> f p2) -> Note p1 d -> f (Note p2 d) Source #

dur :: forall p d1 d2 f. Functor f => (d1 -> f d2) -> Note p d1 -> f (Note p d2) Source #

class HasNote s p d | s -> p d where Source #

Hand-rolled class providing monomorphic lenses.

Minimal complete definition

note, fromNote

Methods

note :: Lens' s (Note p d) Source #

fromNote :: HasNote n p d => n -> s Source #

notePitch :: Lens' s p Source #

noteDur :: Lens' s d Source #

Instances

Instances details
HasNote (Note' p d) p d Source # 
Instance details

Defined in Fadno.Notation

Methods

note :: Lens' (Note' p d) (Note p d) Source #

fromNote :: HasNote n p d => n -> Note' p d Source #

notePitch :: Lens' (Note' p d) p Source #

noteDur :: Lens' (Note' p d) d Source #

HasNote (Note p d) p d Source # 
Instance details

Defined in Fadno.Note

Methods

note :: Lens' (Note p d) (Note p d) Source #

fromNote :: HasNote n p d => n -> Note p d Source #

notePitch :: Lens' (Note p d) p Source #

noteDur :: Lens' (Note p d) d Source #

toPair :: forall p1 d p2 f. (Profunctor p2, Functor f) => p2 (p1, d) (f (p1, d)) -> p2 (Note p1 d) (f (Note p1 d)) Source #

(|:) :: p -> d -> Note p d infixl 5 Source #

Note smart constructor.

data Mono p Source #

Monophonic pitch functor, i.e. Maybe with a sum monoid.

Constructors

Rest 
M 

Fields

Instances

Instances details
Functor Mono Source # 
Instance details

Defined in Fadno.Note

Methods

fmap :: (a -> b) -> Mono a -> Mono b

(<$) :: a -> Mono b -> Mono a

Num p => Monoid (Mono p) Source # 
Instance details

Defined in Fadno.Note

Methods

mempty :: Mono p

mappend :: Mono p -> Mono p -> Mono p

mconcat :: [Mono p] -> Mono p

Num p => Semigroup (Mono p) Source # 
Instance details

Defined in Fadno.Note

Methods

(<>) :: Mono p -> Mono p -> Mono p

sconcat :: NonEmpty (Mono p) -> Mono p

stimes :: Integral b => b -> Mono p -> Mono p

Show p => Show (Mono p) Source # 
Instance details

Defined in Fadno.Note

Methods

showsPrec :: Int -> Mono p -> ShowS

show :: Mono p -> String

showList :: [Mono p] -> ShowS

Eq p => Eq (Mono p) Source # 
Instance details

Defined in Fadno.Note

Methods

(==) :: Mono p -> Mono p -> Bool

(/=) :: Mono p -> Mono p -> Bool

Ord p => Ord (Mono p) Source # 
Instance details

Defined in Fadno.Note

Methods

compare :: Mono p -> Mono p -> Ordering

(<) :: Mono p -> Mono p -> Bool

(<=) :: Mono p -> Mono p -> Bool

(>) :: Mono p -> Mono p -> Bool

(>=) :: Mono p -> Mono p -> Bool

max :: Mono p -> Mono p -> Mono p

min :: Mono p -> Mono p -> Mono p

maybeMono :: forall a p f. (Profunctor p, Functor f) => p (Mono a) (f (Mono a)) -> p (Maybe a) (f (Maybe a)) Source #

Mono/Maybe isomorphism.

mono :: HasNote n (Mono p) d => p -> d -> n Source #

Mono HasNote

mono' :: p -> d -> Note (Mono p) d Source #

Mono Note.

mPitch :: forall p1 p2 f. Applicative f => (p1 -> f p2) -> Mono p1 -> f (Mono p2) Source #

unMono :: b -> (a -> b) -> Mono a -> b Source #

Mono eliminator

catMonos :: Foldable f => f (Mono a) -> [a] Source #

cf catMaybe. Grab all non-rest values.

_M :: forall p1 p2 p3 f. (Choice p3, Applicative f) => p3 p1 (f p2) -> p3 (Mono p1) (f (Mono p2)) Source #

rest :: (HasNote n p d, Monoid p) => d -> n Source #

Note from duration, given Monoid pitch. Interoperates with chord and mono. Useful for batch duration conversion.

isRest :: (Monoid p, Eq p, HasNote n p d) => n -> Bool Source #

data Spelling Source #

Chroma as enharmonic names.

Constructors

C 
Cs 
Db 
D 
Ds 
Eb 
E 
Fb 
Es 
F 
Fs 
Gb 
G 
Gs 
Ab 
A 
As 
Bb 
B 
Cb 
Bs 

Instances

Instances details
Bounded Spelling Source # 
Instance details

Defined in Fadno.Note

Enum Spelling Source # 
Instance details

Defined in Fadno.Note

Generic Spelling Source # 
Instance details

Defined in Fadno.Note

Associated Types

type Rep Spelling 
Instance details

Defined in Fadno.Note

type Rep Spelling = D1 ('MetaData "Spelling" "Fadno.Note" "fadno-1.1.9.1-E4BcGDnYPDI9waeClDSGX6" 'False) ((((C1 ('MetaCons "C" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Cs" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Db" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "D" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Ds" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "Eb" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "E" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Fb" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Es" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "F" 'PrefixI 'False) (U1 :: Type -> Type))))) :+: (((C1 ('MetaCons "Fs" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Gb" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "G" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Gs" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Ab" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "A" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "As" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Bb" 'PrefixI 'False) (U1 :: Type -> Type))) :+: (C1 ('MetaCons "B" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Cb" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Bs" 'PrefixI 'False) (U1 :: Type -> Type))))))

Methods

from :: Spelling -> Rep Spelling x

to :: Rep Spelling x -> Spelling

Read Spelling Source # 
Instance details

Defined in Fadno.Note

Methods

readsPrec :: Int -> ReadS Spelling

readList :: ReadS [Spelling]

readPrec :: ReadPrec Spelling

readListPrec :: ReadPrec [Spelling]

Show Spelling Source # 
Instance details

Defined in Fadno.Note

Methods

showsPrec :: Int -> Spelling -> ShowS

show :: Spelling -> String

showList :: [Spelling] -> ShowS

Eq Spelling Source # 
Instance details

Defined in Fadno.Note

Methods

(==) :: Spelling -> Spelling -> Bool

(/=) :: Spelling -> Spelling -> Bool

Ord Spelling Source # 
Instance details

Defined in Fadno.Note

Methods

compare :: Spelling -> Spelling -> Ordering

(<) :: Spelling -> Spelling -> Bool

(<=) :: Spelling -> Spelling -> Bool

(>) :: Spelling -> Spelling -> Bool

(>=) :: Spelling -> Spelling -> Bool

max :: Spelling -> Spelling -> Spelling

min :: Spelling -> Spelling -> Spelling

type Rep Spelling Source # 
Instance details

Defined in Fadno.Note

type Rep Spelling = D1 ('MetaData "Spelling" "Fadno.Note" "fadno-1.1.9.1-E4BcGDnYPDI9waeClDSGX6" 'False) ((((C1 ('MetaCons "C" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Cs" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Db" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "D" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Ds" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "Eb" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "E" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Fb" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Es" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "F" 'PrefixI 'False) (U1 :: Type -> Type))))) :+: (((C1 ('MetaCons "Fs" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Gb" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "G" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Gs" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Ab" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "A" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "As" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Bb" 'PrefixI 'False) (U1 :: Type -> Type))) :+: (C1 ('MetaCons "B" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Cb" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Bs" 'PrefixI 'False) (U1 :: Type -> Type))))))

fromChroma :: Integral a => a -> Spelling Source #

Convert to Spelling with 0==C, using Cs,Eb,Fs,Gs,Bb enharmonics.

toChroma :: Integral a => Spelling -> a Source #

Spelling to 0-11.

spelling :: Integral a => Iso' a Spelling Source #

Spelling-to-chroma degenerate Iso.

data PitchRep Source #

Represent pitch as chroma and octave. It's a full Num, Integral instance, so negative octave values OK. Instances use C4 == 60.

Constructors

PitchRep 

Fields

Instances

Instances details
Bounded PitchRep Source # 
Instance details

Defined in Fadno.Note

Enum PitchRep Source # 
Instance details

Defined in Fadno.Note

Generic PitchRep Source # 
Instance details

Defined in Fadno.Note

Associated Types

type Rep PitchRep 
Instance details

Defined in Fadno.Note

type Rep PitchRep = D1 ('MetaData "PitchRep" "Fadno.Note" "fadno-1.1.9.1-E4BcGDnYPDI9waeClDSGX6" 'False) (C1 ('MetaCons "PitchRep" 'PrefixI 'True) (S1 ('MetaSel ('Just "_prPitch") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Spelling) :*: S1 ('MetaSel ('Just "_prOctave") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)))

Methods

from :: PitchRep -> Rep PitchRep x

to :: Rep PitchRep x -> PitchRep

Num PitchRep Source # 
Instance details

Defined in Fadno.Note

Integral PitchRep Source # 
Instance details

Defined in Fadno.Note

Real PitchRep Source # 
Instance details

Defined in Fadno.Note

Methods

toRational :: PitchRep -> Rational

Show PitchRep Source # 
Instance details

Defined in Fadno.Note

Methods

showsPrec :: Int -> PitchRep -> ShowS

show :: PitchRep -> String

showList :: [PitchRep] -> ShowS

Eq PitchRep Source # 
Instance details

Defined in Fadno.Note

Methods

(==) :: PitchRep -> PitchRep -> Bool

(/=) :: PitchRep -> PitchRep -> Bool

Ord PitchRep Source # 
Instance details

Defined in Fadno.Note

Methods

compare :: PitchRep -> PitchRep -> Ordering

(<) :: PitchRep -> PitchRep -> Bool

(<=) :: PitchRep -> PitchRep -> Bool

(>) :: PitchRep -> PitchRep -> Bool

(>=) :: PitchRep -> PitchRep -> Bool

max :: PitchRep -> PitchRep -> PitchRep

min :: PitchRep -> PitchRep -> PitchRep

type Rep PitchRep Source # 
Instance details

Defined in Fadno.Note

type Rep PitchRep = D1 ('MetaData "PitchRep" "Fadno.Note" "fadno-1.1.9.1-E4BcGDnYPDI9waeClDSGX6" 'False) (C1 ('MetaCons "PitchRep" 'PrefixI 'True) (S1 ('MetaSel ('Just "_prPitch") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Spelling) :*: S1 ('MetaSel ('Just "_prOctave") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)))

prOctave :: Lens' PitchRep Int Source #

(@:) :: Spelling -> Int -> PitchRep infixl 6 Source #

pitchRep :: Integral a => Iso' a PitchRep Source #

Iso to integrals.

sumDurs :: (Num d, HasNote a p d, Traversable t) => t a -> d Source #

compute total duration of notes

mapTime :: (Num d, Ord d, HasNote a p d, Traversable t) => t a -> [(d, a)] Source #

map notes to arrival time

tied :: (Eq p, Num d, HasNote a p d, Traversable t, Traversable u, Snoc (u a) (u a) a a, Monoid (u a)) => t a -> u a Source #

merge same-pitch notes

tied' :: (Eq p, Num d, HasNote a p d, Traversable t) => t a -> [a] Source #

legato :: (Eq p, Monoid p, Num d, HasNote a p d, Traversable t, Traversable u, Snoc (u a) (u a) a a, Monoid (u a)) => t a -> u a Source #

merge rests with prior note

legato' :: (Eq p, Monoid p, Num d, HasNote a p d, Traversable t) => t a -> [a] Source #

merge :: (Num d, HasNote a p d, Traversable t, Traversable u, Snoc (u a) (u a) a a, Monoid (u a)) => (a -> a -> Bool) -> t a -> u a Source #

merge notes meeting some comparison by accumulating durations

transpose :: (Num p, HasNote a p d, Traversable t) => p -> t a -> t a Source #

Pitch addition

transpose' :: forall p (f :: Type -> Type) a d t. (Num p, Functor f, HasNote a (f p) d, Traversable t) => p -> t a -> t a Source #

Pitch addition over a functor

(%) :: Integral a => a -> a -> Ratio a #