hommage-0.0.5: doc/Sound.Hommage.Notation.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--Rendered using the Haskell Html Library v0.2-->
<HTML
><HEAD
><TITLE
>Sound.Hommage.Notation</TITLE
><LINK HREF = "haddock.css" REL = "stylesheet" TYPE = "text/css"
></HEAD
><BODY
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "topbar"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD
><IMG SRC = "haskell_icon.gif" WIDTH = "16" HEIGHT = "16" ALT = " "
></TD
><TD CLASS = "title"
></TD
><TD CLASS = "topbut"
><A HREF = "Sound.Hommage.html"
>Parent</A
></TD
><TD CLASS = "topbut"
><A HREF = "index.html"
>Contents</A
></TD
><TD CLASS = "topbut"
><A HREF = "doc-index.html"
>Index</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "modulebar"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD
><FONT SIZE = "6"
>Sound.Hommage.Notation</FONT
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "section4"
><B
>Contents</B
></TD
></TR
><TR
><TD
><DL
><DT
><A HREF = "#1"
> Duration</A
></DT
><DT
><A HREF = "#2"
> Music Notation</A
></DT
><DT
><A HREF = "#3"
> Musical class</A
></DT
><DT
><A HREF = "#4"
> Notation and Midi </A
></DT
><DT
><A HREF = "#5"
> More Notation functions</A
></DT
></DL
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "section1"
>Synopsis</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>type</SPAN
> <A HREF = "#t%3ADur"
>Dur</A
> = Ratio Int</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AabsDur"
>absDur</A
> :: <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
> -> Int</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>class</SPAN
> <A HREF = "#t%3AIsDur"
>IsDur</A
> d <SPAN CLASS = "keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AdurFrom"
>durFrom</A
> :: d -> <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AdurUpdate"
>durUpdate</A
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
> -> <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
>) -> d -> d</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>newtype</SPAN
> <A HREF = "#t%3AWithDur"
>WithDur</A
> d a = <A HREF = "#v%3AWithDur"
>WithDur</A
> {<TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "recfield"
><A HREF = "#v%3AunWithDur"
>unWithDur</A
> :: (d -> a)</TD
></TR
></TABLE
>}</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A HREF = "#t%3ANotation"
>Notation</A
> a</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
>= <A HREF = "#v%3ANote"
>Note</A
> <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
> a</TD
></TR
><TR
><TD CLASS = "decl"
>| <A HREF = "#v%3ARest"
>Rest</A
> <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
></TD
></TR
><TR
><TD CLASS = "decl"
>| <A HREF = "#v%3A%3A%2B%3A"
>(:+:)</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a) (<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a)</TD
></TR
><TR
><TD CLASS = "decl"
>| <A HREF = "#v%3A%3A%3D%3A"
>(:=:)</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a) (<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a)</TD
></TR
><TR
><TD CLASS = "decl"
>| <A HREF = "#v%3AStretch"
>Stretch</A
> <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a)</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3ArunNotation"
>runNotation</A
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> m) => <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> m -> m</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3ArunNotationWith"
>runNotationWith</A
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> m) => (a -> m) -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a -> m</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>class</SPAN
> <A HREF = "#t%3AStretchable"
>Stretchable</A
> a <SPAN CLASS = "keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A HREF = "#v%3Astretch"
>stretch</A
> :: <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
> -> a -> a</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>class</SPAN
> <A HREF = "#t%3AArrangeable"
>Arrangeable</A
> a <SPAN CLASS = "keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A HREF = "#v%3Aparallel"
>parallel</A
> :: a -> a -> a</TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3Asequent"
>sequent</A
> :: a -> a -> a</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>class</SPAN
> (<A HREF = "Sound.Hommage.Notation.html#t%3AStretchable"
>Stretchable</A
> a, <A HREF = "Sound.Hommage.Notation.html#t%3AArrangeable"
>Arrangeable</A
> a) => <A HREF = "#t%3AMusical"
>Musical</A
> a <SPAN CLASS = "keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A HREF = "#v%3Arest"
>rest</A
> :: a</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3Arest0"
>rest0</A
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> a) => a</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3A-%3D-"
>(-=-)</A
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AArrangeable"
>Arrangeable</A
> a) => a -> a -> a</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3A-%3E-"
>(->-)</A
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AArrangeable"
>Arrangeable</A
> a) => a -> a -> a</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3Aline"
>line</A
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> a) => [a] -> a</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3Aline'"
>line'</A
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> a) => [a] -> a</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3Achord"
>chord</A
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> a) => [a] -> a</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3Aproportional"
>proportional</A
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> a) => (Int, Int) -> a -> a -> a</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AwriteMidiSyncNotation"
>writeMidiSyncNotation</A
> :: FilePath -> [<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> <A HREF = "Sound.Hommage.Midi.html#t%3AMidiNote"
>MidiNote</A
>] -> IO ()</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3Amidi"
>midi</A
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AIsDur"
>IsDur</A
> d) => <A HREF = "Sound.Hommage.Midi.html#t%3AMidiNote"
>MidiNote</A
> -> <A HREF = "Sound.Hommage.Notation.html#t%3AWithDur"
>WithDur</A
> d <A HREF = "Sound.Hommage.Midi.html#t%3AMidiMusic"
>MidiMusic</A
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3Amidi'"
>midi'</A
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AIsDur"
>IsDur</A
> d) => <A HREF = "Sound.Hommage.Notation.html#t%3AWithDur"
>WithDur</A
> d <A HREF = "Sound.Hommage.Midi.html#t%3AMidiNote"
>MidiNote</A
> -> <A HREF = "Sound.Hommage.Notation.html#t%3AWithDur"
>WithDur</A
> d <A HREF = "Sound.Hommage.Midi.html#t%3AMidiMusic"
>MidiMusic</A
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AmidiSyncFile"
>midiSyncFile</A
> :: <A HREF = "Sound.Hommage.Midi.html#t%3ATicks"
>Ticks</A
> -> [<A HREF = "Sound.Hommage.Notation.html#t%3AWithDur"
>WithDur</A
> <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
> <A HREF = "Sound.Hommage.Midi.html#t%3AMidiMusic"
>MidiMusic</A
>] -> <A HREF = "Sound.Hommage.Midi.html#t%3AMidiFile"
>MidiFile</A
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3Anote"
>note</A
> :: a -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AmapNotation"
>mapNotation</A
> :: (a -> b) -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> b</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AjoinNotation"
>joinNotation</A
> :: <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a) -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AunmaybeNotation"
>unmaybeNotation</A
> :: <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> (Maybe a) -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AdurationNotation"
>durationNotation</A
> :: <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a -> Ratio Int</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3ApositionNotation"
>positionNotation</A
> :: <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
>, a)</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AreverseNotation"
>reverseNotation</A
> :: <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AtakeNotation"
>takeNotation</A
> :: Ratio Int -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AdropNotation"
>dropNotation</A
> :: Ratio Int -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AfilterNotation"
>filterNotation</A
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> (m a), Monad m) => (a -> Bool) -> m a -> m a</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AfilterNotation'"
>filterNotation'</A
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> (m a), <A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> (m b), Monad m) => (a -> Maybe b) -> m a -> m b</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AsequenceNotation"
>sequenceNotation</A
> :: (a -> b -> c) -> <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
> -> [a] -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> b -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> c</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "section1"
><A NAME = "1"
> Duration</A
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>type</SPAN
> <A NAME = "t%3ADur"
></A
><B
>Dur</B
> = Ratio Int</TD
></TR
><TR
><TD CLASS = "doc"
> The duration (of a note, e. g).</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AabsDur"
></A
><B
>absDur</B
> :: <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
> -> Int</TD
></TR
><TR
><TD CLASS = "doc"
> Calculates the absolute duration by dividing the numerator with the denominator.
Because of rounding error this makes only sense if the result is a relative big
number. </TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>class</SPAN
> <A NAME = "t%3AIsDur"
></A
><B
>IsDur</B
> d <SPAN CLASS = "keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "section4"
>Methods</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3AdurFrom"
></A
><B
>durFrom</B
> :: d -> <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AdurUpdate"
></A
><B
>durUpdate</B
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
> -> <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
>) -> d -> d</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "section4"
>Instances</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Notation.html#t%3AIsDur"
>IsDur</A
> <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Notation.html#t%3AIsDur"
>IsDur</A
> <A HREF = "Sound.Hommage.Play.html#t%3ADuration"
>Duration</A
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>newtype</SPAN
> <A NAME = "t%3AWithDur"
></A
><B
>WithDur</B
> d a</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "section4"
>Constructors</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "5" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3AWithDur"
></A
><B
>WithDur</B
></TD
><TD CLASS = "rdoc"
></TD
></TR
><TR
><TD CLASS = "body" COLSPAN = "2"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3AunWithDur"
></A
><B
>unWithDur</B
> :: (d -> a)</TD
><TD CLASS = "rdoc"
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "section4"
>Instances</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Notation.html#t%3AIsDur"
>IsDur</A
> d) => <A HREF = "Sound.Hommage.Notation.html#t%3AStretchable"
>Stretchable</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3AWithDur"
>WithDur</A
> d a)</TD
></TR
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Notation.html#t%3AIsDur"
>IsDur</A
> d, <A HREF = "Sound.Hommage.Notation.html#t%3AArrangeable"
>Arrangeable</A
> a) => <A HREF = "Sound.Hommage.Notation.html#t%3AArrangeable"
>Arrangeable</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3AWithDur"
>WithDur</A
> d a)</TD
></TR
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Notation.html#t%3AIsDur"
>IsDur</A
> d) => <A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3AWithDur"
>WithDur</A
> d <A HREF = "Sound.Hommage.Midi.html#t%3AMidiMusic"
>MidiMusic</A
>)</TD
></TR
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Notation.html#t%3AIsDur"
>IsDur</A
> d) => <A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3AWithDur"
>WithDur</A
> d (<A HREF = "Sound.Hommage.Seq.html#t%3ASeq"
>Seq</A
> a))</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "section1"
><A NAME = "2"
> Music Notation</A
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A NAME = "t%3ANotation"
></A
><B
>Notation</B
> a</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "ndoc"
> A <TT
><A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
></TT
> is a constant, tree-like structure that represents a musical
notation. It has a type parameter for flexible usage reasons. </TD
></TR
><TR
><TD CLASS = "section4"
>Constructors</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3ANote"
></A
><B
>Note</B
> <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
> a</TD
><TD CLASS = "rdoc"
> A note with given duration and a value of type <TT
>a</TT
>.</TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3ARest"
></A
><B
>Rest</B
> <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
></TD
><TD CLASS = "rdoc"
> A rest with given duration.</TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3A%3A%2B%3A"
></A
><B
>(:+:)</B
> (<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a) (<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a)</TD
><TD CLASS = "rdoc"
> Sequential composition of two notations.</TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3A%3A%3D%3A"
></A
><B
>(:=:)</B
> (<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a) (<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a)</TD
><TD CLASS = "rdoc"
> Parallel composition of two notations.</TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AStretch"
></A
><B
>Stretch</B
> <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a)</TD
><TD CLASS = "rdoc"
> Stretches the duration of the sub-music by given factor.</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "section4"
>Instances</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
>Functor <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Notation.html#t%3AStretchable"
>Stretchable</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a)</TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Notation.html#t%3AArrangeable"
>Arrangeable</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a)</TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a)</TD
></TR
><TR
><TD CLASS = "decl"
>Monad <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3ArunNotation"
></A
><B
>runNotation</B
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> m) => <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> m -> m</TD
></TR
><TR
><TD CLASS = "doc"
> A <TT
><A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
></TT
> can be interpreted if the contained type is an
instance of class <TT
><A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
></TT
>.</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3ArunNotationWith"
></A
><B
>runNotationWith</B
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> m) => (a -> m) -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a -> m</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "section1"
><A NAME = "3"
> Musical class</A
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>class</SPAN
> <A NAME = "t%3AStretchable"
></A
><B
>Stretchable</B
> a <SPAN CLASS = "keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "ndoc"
> A type/structure that can be stretched.</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "section4"
>Methods</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3Astretch"
></A
><B
>stretch</B
> :: <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
> -> a -> a</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "section4"
>Instances</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Notation.html#t%3AIsDur"
>IsDur</A
> d) => <A HREF = "Sound.Hommage.Notation.html#t%3AStretchable"
>Stretchable</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3AWithDur"
>WithDur</A
> d a)</TD
></TR
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Notation.html#t%3AStretchable"
>Stretchable</A
> a) => <A HREF = "Sound.Hommage.Notation.html#t%3AStretchable"
>Stretchable</A
> (s -> a)</TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Notation.html#t%3AStretchable"
>Stretchable</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a)</TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Notation.html#t%3AStretchable"
>Stretchable</A
> (<A HREF = "Sound.Hommage.Play.html#t%3APlay"
>Play</A
> a)</TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Notation.html#t%3AStretchable"
>Stretchable</A
> (<A HREF = "Sound.Hommage.Rand.html#t%3ARM"
>RM</A
> a)</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>class</SPAN
> <A NAME = "t%3AArrangeable"
></A
><B
>Arrangeable</B
> a <SPAN CLASS = "keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "ndoc"
> Types/structures that can be composed in two ways, parallel and sequent.</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "section4"
>Methods</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3Aparallel"
></A
><B
>parallel</B
> :: a -> a -> a</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3Asequent"
></A
><B
>sequent</B
> :: a -> a -> a</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "section4"
>Instances</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Notation.html#t%3AIsDur"
>IsDur</A
> d, <A HREF = "Sound.Hommage.Notation.html#t%3AArrangeable"
>Arrangeable</A
> a) => <A HREF = "Sound.Hommage.Notation.html#t%3AArrangeable"
>Arrangeable</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3AWithDur"
>WithDur</A
> d a)</TD
></TR
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Notation.html#t%3AArrangeable"
>Arrangeable</A
> a) => <A HREF = "Sound.Hommage.Notation.html#t%3AArrangeable"
>Arrangeable</A
> (s -> a)</TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Notation.html#t%3AArrangeable"
>Arrangeable</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a)</TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Notation.html#t%3AArrangeable"
>Arrangeable</A
> <A HREF = "Sound.Hommage.Midi.html#t%3AMidiMusic"
>MidiMusic</A
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Notation.html#t%3AArrangeable"
>Arrangeable</A
> (<A HREF = "Sound.Hommage.Rand.html#t%3ARM"
>RM</A
> a)</TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Notation.html#t%3AArrangeable"
>Arrangeable</A
> (<A HREF = "Sound.Hommage.Seq.html#t%3ASeq"
>Seq</A
> a)</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>class</SPAN
> (<A HREF = "Sound.Hommage.Notation.html#t%3AStretchable"
>Stretchable</A
> a, <A HREF = "Sound.Hommage.Notation.html#t%3AArrangeable"
>Arrangeable</A
> a) => <A NAME = "t%3AMusical"
></A
><B
>Musical</B
> a <SPAN CLASS = "keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "ndoc"
> Instances of class <TT
><A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
></TT
> must be <TT
><A HREF = "Sound.Hommage.Notation.html#t%3AStretchable"
>Stretchable</A
></TT
>, <TT
><A HREF = "Sound.Hommage.Notation.html#t%3AArrangeable"
>Arrangeable</A
></TT
> and
they must implement the method <TT
><A HREF = "Sound.Hommage.Notation.html#v%3Arest"
>rest</A
></TT
>. </TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "section4"
>Methods</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3Arest"
></A
><B
>rest</B
> :: a</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "section4"
>Instances</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> a) => <A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> (s -> a)</TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a)</TD
></TR
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Notation.html#t%3AIsDur"
>IsDur</A
> d) => <A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3AWithDur"
>WithDur</A
> d <A HREF = "Sound.Hommage.Midi.html#t%3AMidiMusic"
>MidiMusic</A
>)</TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> (<A HREF = "Sound.Hommage.Rand.html#t%3ARM"
>RM</A
> a)</TD
></TR
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Notation.html#t%3AIsDur"
>IsDur</A
> d) => <A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3AWithDur"
>WithDur</A
> d (<A HREF = "Sound.Hommage.Seq.html#t%3ASeq"
>Seq</A
> a))</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3Arest0"
></A
><B
>rest0</B
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> a) => a</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3A-%3D-"
></A
><B
>(-=-)</B
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AArrangeable"
>Arrangeable</A
> a) => a -> a -> a</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3A-%3E-"
></A
><B
>(->-)</B
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AArrangeable"
>Arrangeable</A
> a) => a -> a -> a</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3Aline"
></A
><B
>line</B
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> a) => [a] -> a</TD
></TR
><TR
><TD CLASS = "doc"
> A sequence of sounds</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3Aline'"
></A
><B
>line'</B
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> a) => [a] -> a</TD
></TR
><TR
><TD CLASS = "doc"
> A sequence of sounds that will be stretched to length=1</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3Achord"
></A
><B
>chord</B
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> a) => [a] -> a</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3Aproportional"
></A
><B
>proportional</B
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> a) => (Int, Int) -> a -> a -> a</TD
></TR
><TR
><TD CLASS = "doc"
> Composes the notations sequentially and stretches them proportionally.</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "section1"
><A NAME = "4"
> Notation and Midi </A
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AwriteMidiSyncNotation"
></A
><B
>writeMidiSyncNotation</B
> :: FilePath -> [<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> <A HREF = "Sound.Hommage.Midi.html#t%3AMidiNote"
>MidiNote</A
>] -> IO ()</TD
></TR
><TR
><TD CLASS = "doc"
> A convenient function to write a set of midi notations to a synchronous MIDI-file.
NOTE: For unknown reasons not any Ticks value seemes to work. This function uses
96 Ticks per quarter. </TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3Amidi"
></A
><B
>midi</B
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AIsDur"
>IsDur</A
> d) => <A HREF = "Sound.Hommage.Midi.html#t%3AMidiNote"
>MidiNote</A
> -> <A HREF = "Sound.Hommage.Notation.html#t%3AWithDur"
>WithDur</A
> d <A HREF = "Sound.Hommage.Midi.html#t%3AMidiMusic"
>MidiMusic</A
></TD
></TR
><TR
><TD CLASS = "doc"
> A <TT
> Notation MidiNote </TT
> can be interpreted using <TT
><A HREF = "Sound.Hommage.Notation.html#v%3ArunNotationWith"
>runNotationWith</A
></TT
> and <TT
><A HREF = "Sound.Hommage.Notation.html#v%3Amidi"
>midi</A
></TT
>. </TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3Amidi'"
></A
><B
>midi'</B
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AIsDur"
>IsDur</A
> d) => <A HREF = "Sound.Hommage.Notation.html#t%3AWithDur"
>WithDur</A
> d <A HREF = "Sound.Hommage.Midi.html#t%3AMidiNote"
>MidiNote</A
> -> <A HREF = "Sound.Hommage.Notation.html#t%3AWithDur"
>WithDur</A
> d <A HREF = "Sound.Hommage.Midi.html#t%3AMidiMusic"
>MidiMusic</A
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AmidiSyncFile"
></A
><B
>midiSyncFile</B
> :: <A HREF = "Sound.Hommage.Midi.html#t%3ATicks"
>Ticks</A
> -> [<A HREF = "Sound.Hommage.Notation.html#t%3AWithDur"
>WithDur</A
> <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
> <A HREF = "Sound.Hommage.Midi.html#t%3AMidiMusic"
>MidiMusic</A
>] -> <A HREF = "Sound.Hommage.Midi.html#t%3AMidiFile"
>MidiFile</A
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "section1"
><A NAME = "5"
> More Notation functions</A
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3Anote"
></A
><B
>note</B
> :: a -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a</TD
></TR
><TR
><TD CLASS = "doc"
> Creates a note with length 1. Is a synonym for <TT
>Note (1%1)</TT
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AmapNotation"
></A
><B
>mapNotation</B
> :: (a -> b) -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> b</TD
></TR
><TR
><TD CLASS = "doc"
> <TT
><A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
></TT
> is instance of the class Functor.</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AjoinNotation"
></A
><B
>joinNotation</B
> :: <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a) -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a</TD
></TR
><TR
><TD CLASS = "doc"
> <TT
><A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
></TT
> is instance of the class Monad. Joining will replace
every (outer) Note by its contained (inner) Notation. The inner
Notation will be stretched by the duration of the (outer) Note.</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AunmaybeNotation"
></A
><B
>unmaybeNotation</B
> :: <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> (Maybe a) -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a</TD
></TR
><TR
><TD CLASS = "doc"
> Replaces any Note that contains Nothing by a rest (with same duration).</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AdurationNotation"
></A
><B
>durationNotation</B
> :: <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a -> Ratio Int</TD
></TR
><TR
><TD CLASS = "doc"
> Calculates the (relative) duration of a <TT
><A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
></TT
> (Must be finite!).</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3ApositionNotation"
></A
><B
>positionNotation</B
> :: <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> (<A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
>, a)</TD
></TR
><TR
><TD CLASS = "doc"
> Calculates the offset for each note.</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AreverseNotation"
></A
><B
>reverseNotation</B
> :: <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a</TD
></TR
><TR
><TD CLASS = "doc"
> Reverses a <TT
><A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
></TT
> (Must be finite!).</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AtakeNotation"
></A
><B
>takeNotation</B
> :: Ratio Int -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a</TD
></TR
><TR
><TD CLASS = "doc"
> Takes the beginning of <TT
><A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
></TT
>, result has the given duration if possible or is shorter otherwise.
Notes that overlap with the end of duration are not taken but replaced by the (fitted) rests.</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AdropNotation"
></A
><B
>dropNotation</B
> :: Ratio Int -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> a</TD
></TR
><TR
><TD CLASS = "doc"
> Drops the beginning of <TT
><A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
></TT
>. Notes that would be split are replaced by fitted rests.</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AfilterNotation"
></A
><B
>filterNotation</B
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> (m a), Monad m) => (a -> Bool) -> m a -> m a</TD
></TR
><TR
><TD CLASS = "doc"
> Replaces notes where the predicate fails with rests.
filterNotation :: (a -> Bool) -> Notation a -> Notation a</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AfilterNotation'"
></A
><B
>filterNotation'</B
> :: (<A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> (m a), <A HREF = "Sound.Hommage.Notation.html#t%3AMusical"
>Musical</A
> (m b), Monad m) => (a -> Maybe b) -> m a -> m b</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AsequenceNotation"
></A
><B
>sequenceNotation</B
> :: (a -> b -> c) -> <A HREF = "Sound.Hommage.Notation.html#t%3ADur"
>Dur</A
> -> [a] -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> b -> <A HREF = "Sound.Hommage.Notation.html#t%3ANotation"
>Notation</A
> c</TD
></TR
><TR
><TD CLASS = "doc"
> A parallel composition of a sequence of values and a Notation
Each value of the sequence has the same given duration.
Every Note is updated by a function that gets the actual value of the sequence.
NOTE: This function is not tested yet! </TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "botbar"
>Produced by <A HREF = "http://www.haskell.org/haddock/"
>Haddock</A
> version HADDOCK_VERSION</TD
></TR
></TABLE
></BODY
></HTML
>