fadno-1.1.8: 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, 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 #

(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 #

(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 #

(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 #

Generic (Note p d) Source # 
Instance details

Defined in Fadno.Note

Associated Types

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

Methods

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

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

HasTie (Note p d) Source # 
Instance details

Defined in Fadno.Notation

Methods

tie :: Lens' (Note p d) (Maybe Tie) 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.8-DUxbMWAKsZi5yBbOuL2jNx" '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 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

Instances details
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 #

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 #

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

Instances details
Functor Mono Source # 
Instance details

Defined in Fadno.Note

Methods

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

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

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 #

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 #

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 #

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 #

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

Instances details
Bounded Spelling Source # 
Instance details

Defined in Fadno.Note

Enum Spelling Source # 
Instance details

Defined in Fadno.Note

Eq Spelling Source # 
Instance details

Defined in Fadno.Note

Ord Spelling Source # 
Instance details

Defined in Fadno.Note

Read Spelling Source # 
Instance details

Defined in Fadno.Note

Show Spelling Source # 
Instance details

Defined in Fadno.Note

Generic Spelling Source # 
Instance details

Defined in Fadno.Note

Associated Types

type Rep Spelling :: Type -> Type #

Methods

from :: Spelling -> Rep Spelling x #

to :: Rep Spelling x -> Spelling #

type Rep Spelling Source # 
Instance details

Defined in Fadno.Note

type Rep Spelling = D1 ('MetaData "Spelling" "Fadno.Note" "fadno-1.1.8-DUxbMWAKsZi5yBbOuL2jNx" '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 "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))))))

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

Instances details
Bounded PitchRep Source # 
Instance details

Defined in Fadno.Note

Enum PitchRep Source # 
Instance details

Defined in Fadno.Note

Eq PitchRep Source # 
Instance details

Defined in Fadno.Note

Integral PitchRep Source # 
Instance details

Defined in Fadno.Note

Num PitchRep Source # 
Instance details

Defined in Fadno.Note

Ord PitchRep Source # 
Instance details

Defined in Fadno.Note

Real PitchRep Source # 
Instance details

Defined in Fadno.Note

Show PitchRep Source # 
Instance details

Defined in Fadno.Note

Generic PitchRep Source # 
Instance details

Defined in Fadno.Note

Associated Types

type Rep PitchRep :: Type -> Type #

Methods

from :: PitchRep -> Rep PitchRep x #

to :: Rep PitchRep x -> PitchRep #

type Rep PitchRep Source # 
Instance details

Defined in Fadno.Note

type Rep PitchRep = D1 ('MetaData "PitchRep" "Fadno.Note" "fadno-1.1.8-DUxbMWAKsZi5yBbOuL2jNx" 'False) (C1 ('MetaCons "PitchRep" 'PrefixI 'True) (S1 ('MetaSel ('Just "_prPitch") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Spelling) :*: S1 ('MetaSel ('Just "_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.