fadno-1.1.0: 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

Bifunctor Note Source # 

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, Integral d, Traversable t) => MidiNotes (t (Note p d)) Source # 

Methods

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

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

Methods

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

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

Methods

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

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

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

Methods

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

show :: Note p d -> String #

showList :: [Note p d] -> ShowS #

Generic (Note p d) Source # 

Associated Types

type Rep (Note p d) :: * -> * #

Methods

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

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

HasTie (Note p d) Source # 

Methods

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

HasNote (Note p d) p d Source # 

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 #

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

Methods

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

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

Methods

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

type Rep (Note p d) Source # 
type Rep (Note p d) = D1 (MetaData "Note" "Fadno.Note" "fadno-1.1.0-IVrIm4FFo3O5PLjIKfq2zI" False) (C1 (MetaCons "Note" PrefixI True) ((:*:) (S1 (MetaSel (Just Symbol "_pitch") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 p)) (S1 (MetaSel (Just Symbol "_dur") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 d))))

pitch :: forall p d p. Lens (Note p d) (Note p d) p p Source #

dur :: forall p d d. Lens (Note p d) (Note p d) d d 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

HasNote (Note p d) p d Source # 

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 # 

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 :: Iso' (Note p d) (p, 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

Functor Mono Source # 

Methods

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

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

Eq p => Eq (Mono p) Source # 

Methods

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

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

Ord p => Ord (Mono p) Source # 

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 #

Show p => Show (Mono p) Source # 

Methods

showsPrec :: Int -> Mono p -> ShowS #

show :: Mono p -> String #

showList :: [Mono p] -> ShowS #

Num p => Monoid (Mono p) Source # 

Methods

mempty :: Mono p #

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

mconcat :: [Mono p] -> Mono p #

maybeMono :: Iso' (Maybe a) (Mono 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 p p. Traversal (Mono p) (Mono p) p p 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 p p. Prism (Mono p) (Mono p) p p 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 
F 
Fs 
Gb 
G 
Gs 
Ab 
A 
As 
Bb 
B 

Instances

Bounded Spelling Source # 
Enum Spelling Source # 
Eq Spelling Source # 
Ord Spelling Source # 
Read Spelling Source # 
Show Spelling Source # 
Generic Spelling Source # 

Associated Types

type Rep Spelling :: * -> * #

Methods

from :: Spelling -> Rep Spelling x #

to :: Rep Spelling x -> Spelling #

type Rep Spelling Source # 
type Rep Spelling = D1 (MetaData "Spelling" "Fadno.Note" "fadno-1.1.0-IVrIm4FFo3O5PLjIKfq2zI" False) ((:+:) ((:+:) ((:+:) ((:+:) (C1 (MetaCons "C" PrefixI False) U1) (C1 (MetaCons "Cs" PrefixI False) U1)) ((:+:) (C1 (MetaCons "Db" PrefixI False) U1) (C1 (MetaCons "D" PrefixI False) U1))) ((:+:) ((:+:) (C1 (MetaCons "Ds" PrefixI False) U1) (C1 (MetaCons "Eb" PrefixI False) U1)) ((:+:) (C1 (MetaCons "E" PrefixI False) U1) (C1 (MetaCons "F" PrefixI False) U1)))) ((:+:) ((:+:) ((:+:) (C1 (MetaCons "Fs" PrefixI False) U1) (C1 (MetaCons "Gb" PrefixI False) U1)) ((:+:) (C1 (MetaCons "G" PrefixI False) U1) (C1 (MetaCons "Gs" PrefixI False) U1))) ((:+:) ((:+:) (C1 (MetaCons "Ab" PrefixI False) U1) (C1 (MetaCons "A" PrefixI False) U1)) ((:+:) (C1 (MetaCons "As" PrefixI False) U1) ((:+:) (C1 (MetaCons "Bb" PrefixI False) U1) (C1 (MetaCons "B" PrefixI False) U1))))))

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 

Instances

Bounded PitchRep Source # 
Enum PitchRep Source # 
Eq PitchRep Source # 
Integral PitchRep Source # 
Num PitchRep Source # 
Ord PitchRep Source # 
Real PitchRep Source # 
Show PitchRep Source # 
Generic PitchRep Source # 

Associated Types

type Rep PitchRep :: * -> * #

Methods

from :: PitchRep -> Rep PitchRep x #

to :: Rep PitchRep x -> PitchRep #

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

(@:) :: 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' :: (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 infixl 7 #

Forms the ratio of two integral numbers.