hommage-0.0.5: doc/Sound.Hommage.Envelope.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.Envelope</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.Envelope</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"
> Env</A
></DT
><DT
><A HREF = "#2"
> EnvLength</A
></DT
><DT
><A HREF = "#3"
> ADSR</A
></DT
><DT
><A HREF = "#4"
> Interpolate</A
></DT
></DL
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "section1"
>Description</TD
></TR
><TR
><TD CLASS = "doc"
> This module contains some functions and datatypes for envelopes.
An envelope in generall is a kind of controll signal that modulates
(for example) the volume of a sound in a non-periodic way (getting
loud at the beginning and fading out at the end...). It is
also used to controll the duration of a sound, since (here) envelopes
always produce finite signals.</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%3AEnv"
>Env</A
> = Int -> [Double]</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3ArunEnv"
>runEnv</A
> :: [(<A HREF = "Sound.Hommage.Envelope.html#t%3AEnv"
>Env</A
>, <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvLength"
>EnvLength</A
>)] -> <A HREF = "Sound.Hommage.Envelope.html#t%3AEnv"
>Env</A
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3A%3C%3F%3E"
>(<?>)</A
> :: (<A HREF = "Sound.Hommage.Envelope.html#t%3AIsEnv"
>IsEnv</A
> a) => a -> <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvLength"
>EnvLength</A
> -> (<A HREF = "Sound.Hommage.Envelope.html#t%3AEnv"
>Env</A
>, <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvLength"
>EnvLength</A
>)</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>class</SPAN
> <A HREF = "#t%3AIsEnv"
>IsEnv</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%3AtoEnv"
>toEnv</A
> :: a -> <A HREF = "Sound.Hommage.Envelope.html#t%3AEnv"
>Env</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AcalculateEnvLengths"
>calculateEnvLengths</A
> :: Int -> [<A HREF = "Sound.Hommage.Envelope.html#t%3AEnvLength"
>EnvLength</A
>] -> [Int]</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%3AEnvLength"
>EnvLength</A
> </TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
>= <A HREF = "#v%3AAbs"
>Abs</A
> Int</TD
></TR
><TR
><TD CLASS = "decl"
>| <A HREF = "#v%3AAbs_"
>Abs_</A
> Int</TD
></TR
><TR
><TD CLASS = "decl"
>| <A HREF = "#v%3AFlex"
>Flex</A
> Double</TD
></TR
><TR
><TD CLASS = "decl"
>| <A HREF = "#v%3ARel"
>Rel</A
> (Ratio Int)</TD
></TR
><TR
><TD CLASS = "decl"
>| <A HREF = "#v%3ARel_"
>Rel_</A
> (Ratio Int)</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>type</SPAN
> <A HREF = "#t%3AADSR"
>ADSR</A
> = (Int, Int, Double, Int)</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%3AEnvShape"
>EnvShape</A
> </TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
>= <A HREF = "#v%3ALinear"
>Linear</A
></TD
></TR
><TR
><TD CLASS = "decl"
>| <A HREF = "#v%3ACosLike"
>CosLike</A
></TD
></TR
></TABLE
></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%3AEnvMode"
>EnvMode</A
> </TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
>= <A HREF = "#v%3AHoldS"
>HoldS</A
></TD
></TR
><TR
><TD CLASS = "decl"
>| <A HREF = "#v%3AFitS"
>FitS</A
></TD
></TR
><TR
><TD CLASS = "decl"
>| <A HREF = "#v%3AFitADR"
>FitADR</A
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AplayADSR"
>playADSR</A
> :: <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvMode"
>EnvMode</A
> -> <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvShape"
>EnvShape</A
> -> <A HREF = "Sound.Hommage.Envelope.html#t%3AADSR"
>ADSR</A
> -> Int -> [Double]</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A HREF = "#t%3AInterpolate"
>Interpolate</A
> = <A HREF = "#v%3AInterpolate"
>Interpolate</A
> <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvShape"
>EnvShape</A
> (Double, Double)</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A HREF = "#t%3AConstant"
>Constant</A
> = <A HREF = "#v%3AConstant"
>Constant</A
> Double</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3Ainterpolate"
>interpolate</A
> :: (Fractional a) => (a, a) -> Int -> [a]</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3Ainterpolate_cos"
>interpolate_cos</A
> :: (Floating a) => (a, a) -> Int -> [a]</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "section1"
>Documentation</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "doc"
> An envelope is represented by a function of type <TT
><A HREF = "Sound.Hommage.Envelope.html#t%3AEnv"
>Env</A
></TT
>.
Such functions (or instances of class <TT
><A HREF = "Sound.Hommage.Envelope.html#t%3AIsEnv"
>IsEnv</A
></TT
>) can be combined
into a sequence where every <TT
><A HREF = "Sound.Hommage.Envelope.html#t%3AEnv"
>Env</A
></TT
> is given a <TT
><A HREF = "Sound.Hommage.Envelope.html#t%3AEnvLength"
>EnvLength</A
></TT
> (using the
binary operator <TT
><A HREF = "Sound.Hommage.Envelope.html#v%3A%3C%3F%3E"
><?></A
></TT
>.
The whole sequence can be turnde into an <TT
><A HREF = "Sound.Hommage.Envelope.html#t%3AEnv"
>Env</A
></TT
> (and be played then)
with <TT
><A HREF = "Sound.Hommage.Envelope.html#v%3ArunEnv"
>runEnv</A
></TT
>.</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "section1"
><A NAME = "1"
> Env</A
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>type</SPAN
> <A NAME = "t%3AEnv"
></A
><B
>Env</B
> = Int -> [Double]</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3ArunEnv"
></A
><B
>runEnv</B
> :: [(<A HREF = "Sound.Hommage.Envelope.html#t%3AEnv"
>Env</A
>, <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvLength"
>EnvLength</A
>)] -> <A HREF = "Sound.Hommage.Envelope.html#t%3AEnv"
>Env</A
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3A%3C%3F%3E"
></A
><B
>(<?>)</B
> :: (<A HREF = "Sound.Hommage.Envelope.html#t%3AIsEnv"
>IsEnv</A
> a) => a -> <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvLength"
>EnvLength</A
> -> (<A HREF = "Sound.Hommage.Envelope.html#t%3AEnv"
>Env</A
>, <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvLength"
>EnvLength</A
>)</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>class</SPAN
> <A NAME = "t%3AIsEnv"
></A
><B
>IsEnv</B
> a <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%3AtoEnv"
></A
><B
>toEnv</B
> :: a -> <A HREF = "Sound.Hommage.Envelope.html#t%3AEnv"
>Env</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.Envelope.html#t%3AIsEnv"
>IsEnv</A
> <A HREF = "Sound.Hommage.Envelope.html#t%3AEnv"
>Env</A
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Envelope.html#t%3AIsEnv"
>IsEnv</A
> <A HREF = "Sound.Hommage.Envelope.html#t%3AInterpolate"
>Interpolate</A
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Envelope.html#t%3AIsEnv"
>IsEnv</A
> <A HREF = "Sound.Hommage.Envelope.html#t%3AConstant"
>Constant</A
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "section1"
><A NAME = "2"
> EnvLength</A
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AcalculateEnvLengths"
></A
><B
>calculateEnvLengths</B
> :: Int -> [<A HREF = "Sound.Hommage.Envelope.html#t%3AEnvLength"
>EnvLength</A
>] -> [Int]</TD
></TR
><TR
><TD CLASS = "doc"
> Takes an absolute total length and a list of EnvLengths. Each <TT
><A HREF = "Sound.Hommage.Envelope.html#t%3AEnvLength"
>EnvLength</A
></TT
> is mapped
to its length with respect to the total length and a resuming length that is
the result of <TT
> total length - (all fixed lengths + all relative lengths) </TT
>.
This resuming lengths is distributed to the flexible lengths.</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A NAME = "t%3AEnvLength"
></A
><B
>EnvLength</B
> </TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "ndoc"
> <TT
><A HREF = "Sound.Hommage.Envelope.html#t%3AEnvLength"
>EnvLength</A
></TT
> represents the length of a segment of an Envelope. </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%3AAbs"
></A
><B
>Abs</B
> Int</TD
><TD CLASS = "rdoc"
> A fixed length.</TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AAbs_"
></A
><B
>Abs_</B
> Int</TD
><TD CLASS = "rdoc"
> A fixed length that is not subtracted from the total time.</TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AFlex"
></A
><B
>Flex</B
> Double</TD
><TD CLASS = "rdoc"
> A flexible length. Resuming length is distributed to all
flexible lengths proportionally to its value.</TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3ARel"
></A
><B
>Rel</B
> (Ratio Int)</TD
><TD CLASS = "rdoc"
> A length relative to the total length.</TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3ARel_"
></A
><B
>Rel_</B
> (Ratio Int)</TD
><TD CLASS = "rdoc"
> A relative length that is not subtracted from the total time.</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.Sound.html#t%3ASound"
>Sound</A
> [(<A HREF = "Sound.Hommage.Envelope.html#t%3AEnv"
>Env</A
>, <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvLength"
>EnvLength</A
>)]</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "section1"
><A NAME = "3"
> ADSR</A
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>type</SPAN
> <A NAME = "t%3AADSR"
></A
><B
>ADSR</B
> = (Int, Int, Double, Int)</TD
></TR
><TR
><TD CLASS = "doc"
><P
> The four components of <TT
><A HREF = "Sound.Hommage.Envelope.html#t%3AADSR"
>ADSR</A
></TT
> are:</P
><UL
><LI
> Attack (time to reach value 1.0, starting from 0.0)</LI
><LI
> Decay (time to reach sustain level)</LI
><LI
> Sustain (level to hold until note is released, should be a value between 0.0 and 1.0)</LI
><LI
> Release (time to reach value 0.0 after note is released)</LI
></UL
><P
> time is measured in sample points, 44100 is one second.</P
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A NAME = "t%3AEnvShape"
></A
><B
>EnvShape</B
> </TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "ndoc"
> A linear or a cosinus-like shape</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%3ALinear"
></A
><B
>Linear</B
></TD
><TD CLASS = "rdoc"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3ACosLike"
></A
><B
>CosLike</B
></TD
><TD CLASS = "rdoc"
></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"
>Eq <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvShape"
>EnvShape</A
></TD
></TR
><TR
><TD CLASS = "decl"
>Read <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvShape"
>EnvShape</A
></TD
></TR
><TR
><TD CLASS = "decl"
>Show <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvShape"
>EnvShape</A
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A NAME = "t%3AEnvMode"
></A
><B
>EnvMode</B
> </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 = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3AHoldS"
></A
><B
>HoldS</B
></TD
><TD CLASS = "rdoc"
> Sustain value is kept until duration is over, Release part is appended.</TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AFitS"
></A
><B
>FitS</B
></TD
><TD CLASS = "rdoc"
> Envelope has given duration by fitting only duration of constant Sustain level.</TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AFitADR"
></A
><B
>FitADR</B
></TD
><TD CLASS = "rdoc"
> Attack, Decay and Released are together stretched to given duration.</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"
>Eq <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvMode"
>EnvMode</A
></TD
></TR
><TR
><TD CLASS = "decl"
>Read <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvMode"
>EnvMode</A
></TD
></TR
><TR
><TD CLASS = "decl"
>Show <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvMode"
>EnvMode</A
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AplayADSR"
></A
><B
>playADSR</B
> :: <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvMode"
>EnvMode</A
> -> <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvShape"
>EnvShape</A
> -> <A HREF = "Sound.Hommage.Envelope.html#t%3AADSR"
>ADSR</A
> -> Int -> [Double]</TD
></TR
><TR
><TD CLASS = "doc"
> Playing an ADSR</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "doc"
><P
> Here is the code of <TT
><A HREF = "Sound.Hommage.Envelope.html#v%3AplayADSR"
>playADSR</A
></TT
> to show the use of <TT
><A HREF = "Sound.Hommage.Envelope.html#t%3AEnv"
>Env</A
></TT
>, <TT
><A HREF = "Sound.Hommage.Envelope.html#v%3A%3C%3F%3E"
><?></A
></TT
> and <TT
><A HREF = "Sound.Hommage.Envelope.html#t%3AEnvLength"
>EnvLength</A
></TT
>:</P
><PRE
> playADSR :: EnvMode -> EnvShape -> ADSR -> Int -> [Double]
playADSR mode shape (a,d,s,r) = case mode of
FitADR -> runEnv
[ Interpolate shape (0.0,1.0) <?> Flex (fromIntegral a)
, Interpolate shape (1.0, s) <?> Flex (fromIntegral d)
, Interpolate shape (s, 0.0) <?> Flex (fromIntegral r)
]
FitS -> runEnv
[ Interpolate shape (0.0,1.0) <?> Abs a
, Interpolate shape (1.0, s) <?> Abs d
, Constant s <?> Flex 1.0
, Interpolate shape (s, 0.0) <?> Abs r
]
HoldS -> runEnv
[ Interpolate shape (0.0,1.0) <?> Abs a
, Interpolate shape (1.0, s) <?> Abs d
, Constant s <?> Flex 1.0
, Interpolate shape (s, 0.0) <?> Abs_ r
]</PRE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "section1"
><A NAME = "4"
> Interpolate</A
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A NAME = "t%3AInterpolate"
></A
><B
>Interpolate</B
> </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 = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3AInterpolate"
></A
><B
>Interpolate</B
> <A HREF = "Sound.Hommage.Envelope.html#t%3AEnvShape"
>EnvShape</A
> (Double, Double)</TD
><TD CLASS = "rdoc"
></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.Envelope.html#t%3AIsEnv"
>IsEnv</A
> <A HREF = "Sound.Hommage.Envelope.html#t%3AInterpolate"
>Interpolate</A
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Sound.html#t%3ASound"
>Sound</A
> <A HREF = "Sound.Hommage.Envelope.html#t%3AInterpolate"
>Interpolate</A
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A NAME = "t%3AConstant"
></A
><B
>Constant</B
> </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 = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3AConstant"
></A
><B
>Constant</B
> Double</TD
><TD CLASS = "rdoc"
></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.Envelope.html#t%3AIsEnv"
>IsEnv</A
> <A HREF = "Sound.Hommage.Envelope.html#t%3AConstant"
>Constant</A
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3Ainterpolate"
></A
><B
>interpolate</B
> :: (Fractional a) => (a, a) -> Int -> [a]</TD
></TR
><TR
><TD CLASS = "doc"
> produces a line with given length that starts with fst value and ends with snd value</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3Ainterpolate_cos"
></A
><B
>interpolate_cos</B
> :: (Floating a) => (a, a) -> Int -> [a]</TD
></TR
><TR
><TD CLASS = "doc"
> produces a curve with given length that starts with fst value and ends with snd value.
this curve has the shape of a half cosinus curve (values for 0 to PI).</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
>