| Safe Haskell | Safe |
|---|---|
| Language | Haskell98 |
Sound.SC3.Common.Envelope
Description
Envelope generators.
- data Envelope_Curve a
- type Envelope_Curve2 a = T2 (Envelope_Curve a)
- type Envelope_Curve3 a = T3 (Envelope_Curve a)
- type Envelope_Curve4 a = T4 (Envelope_Curve a)
- env_curve_shape :: Num a => Envelope_Curve a -> a
- env_curve_value :: Num a => Envelope_Curve a -> a
- env_curve_interpolation_f :: (Ord t, Floating t) => Envelope_Curve t -> Interpolation_F t
- env_curve_coerce :: (a -> b) -> Envelope_Curve a -> Envelope_Curve b
- data Envelope a = Envelope {
- env_levels :: [a]
- env_times :: [a]
- env_curves :: [Envelope_Curve a]
- env_release_node :: Maybe Int
- env_loop_node :: Maybe Int
- envelope_coerce :: (a -> b) -> Envelope a -> Envelope b
- envelope :: [a] -> [a] -> [Envelope_Curve a] -> Envelope a
- envelope_duration :: Num n => Envelope n -> n
- envelope_n_segments :: Integral i => Envelope n -> i
- envelope_segment_ix :: (Ord a, Num a) => Envelope a -> a -> Maybe Int
- type Envelope_Segment t = (t, t, t, t, Envelope_Curve t)
- envelope_segment :: Num t => Envelope t -> Int -> Envelope_Segment t
- envelope_segments :: Num t => Envelope t -> [Envelope_Segment t]
- pack_envelope_segments :: Num t => [Envelope_Segment t] -> ([t], [t], [Envelope_Curve t])
- envelope_is_normal :: (Eq n, Num n) => Envelope n -> Bool
- envelope_normalise :: (Num a, Ord a) => Envelope a -> Envelope a
- envelope_at :: (Ord t, Floating t) => Envelope t -> t -> t
- envelope_render :: (Ord t, Floating t, Enum t) => t -> Envelope t -> [(t, t)]
- envelope_table :: (Ord t, Floating t, Enum t) => t -> Envelope t -> [t]
- envelope_curves :: Envelope a -> [Envelope_Curve a]
- envelope_sc3_array :: Num a => Envelope a -> Maybe [a]
- envelope_sc3_ienvgen_array :: Num a => Envelope a -> Maybe [a]
- env_is_sustained :: Envelope a -> Bool
- env_delay :: Envelope a -> a -> Envelope a
- env_circle :: Fractional a => Envelope a -> a -> Envelope_Curve a -> Envelope a
- envTrapezoid_f :: Num t => (t -> t -> t, t -> t -> t) -> t -> t -> t -> t -> Envelope t
- envCoord :: Num a => [(a, a)] -> a -> a -> Envelope_Curve a -> Envelope a
- envPerc' :: Num a => a -> a -> a -> Envelope_Curve2 a -> Envelope a
- envPerc :: Num a => a -> a -> Envelope a
- envTriangle :: Fractional a => a -> a -> Envelope a
- envSine :: Fractional a => a -> a -> Envelope a
- data LINEN a = LINEN {
- linen_attackTime :: a
- linen_sustainTime :: a
- linen_releaseTime :: a
- linen_level :: a
- linen_curve :: Envelope_Curve3 a
- envLinen_r :: Num a => LINEN a -> Envelope a
- envLinen' :: Num a => a -> a -> a -> a -> Envelope_Curve3 a -> Envelope a
- envLinen :: Num a => a -> a -> a -> a -> Envelope a
- data ADSR a = ADSR {
- adsr_attackTime :: a
- adsr_decayTime :: a
- adsr_sustainLevel :: a
- adsr_releaseTime :: a
- adsr_peakLevel :: a
- adsr_curve :: Envelope_Curve3 a
- adsr_bias :: a
- adsrDefault :: Fractional n => ADSR n
- envADSR :: Num a => a -> a -> a -> a -> a -> Envelope_Curve a -> a -> Envelope a
- envADSR' :: Num a => a -> a -> a -> a -> Envelope a
- envADSR_r :: Num a => ADSR a -> Envelope a
- data ADSSR a = ADSSR {
- adssr_attackTime :: a
- adssr_attackLevel :: a
- adssr_decayTime :: a
- adssr_decayLevel :: a
- adssr_slopeTime :: a
- adssr_sustainLevel :: a
- adssr_releaseTime :: a
- adssr_curve :: Envelope_Curve4 a
- adssr_bias :: a
- envADSSR :: Num a => a -> a -> a -> a -> a -> a -> a -> Envelope_Curve a -> a -> Envelope a
- envADSSR_r :: Num a => ADSSR a -> Envelope a
- data ASR a = ASR {
- asr_attackTime :: a
- asr_sustainLevel :: a
- asr_releaseTime :: a
- asr_curve :: Envelope_Curve2 a
- envASR_c :: Num a => a -> a -> a -> Envelope_Curve2 a -> Envelope a
- envASR :: Num a => a -> a -> a -> Envelope_Curve a -> Envelope a
- envASR_r :: Num a => ASR a -> Envelope a
- envStep :: [a] -> [a] -> Maybe Int -> Maybe Int -> Envelope a
Curve
data Envelope_Curve a Source #
Envelope curve indicator input.
Constructors
| EnvStep | |
| EnvLin | |
| EnvExp | |
| EnvSin | |
| EnvWelch | Note: not implemented at SC3 |
| EnvNum a | |
| EnvSqr | |
| EnvCub | |
| EnvHold |
Instances
| Eq a => Eq (Envelope_Curve a) Source # | |
| Show a => Show (Envelope_Curve a) Source # | |
type Envelope_Curve2 a = T2 (Envelope_Curve a) Source #
Envelope curve pair.
type Envelope_Curve3 a = T3 (Envelope_Curve a) Source #
Envelope curve triple.
type Envelope_Curve4 a = T4 (Envelope_Curve a) Source #
Envelope curve quadruple.
env_curve_shape :: Num a => Envelope_Curve a -> a Source #
Convert Envelope_Curve to shape value.
map env_curve_shape [EnvSin,EnvSqr] == [3,6]
env_curve_value :: Num a => Envelope_Curve a -> a Source #
The value of EnvCurve is non-zero for EnvNum.
map env_curve_value [EnvWelch,EnvNum 2] == [0,2]
env_curve_interpolation_f :: (Ord t, Floating t) => Envelope_Curve t -> Interpolation_F t Source #
Interpolation_F of Envelope_Curve.
env_curve_coerce :: (a -> b) -> Envelope_Curve a -> Envelope_Curve b Source #
Apply f to EnvNum value.
Envelope
SC3 envelope segment model
Constructors
| Envelope | |
Fields
| |
envelope :: [a] -> [a] -> [Envelope_Curve a] -> Envelope a Source #
Variant without release and loop node inputs (defaulting to nil).
envelope_n_segments :: Integral i => Envelope n -> i Source #
envelope_segment_ix :: (Ord a, Num a) => Envelope a -> a -> Maybe Int Source #
Determine which envelope segment a given time t falls in.
type Envelope_Segment t = (t, t, t, t, Envelope_Curve t) Source #
A set of start time, start level, end time, end level and curve.
envelope_segment :: Num t => Envelope t -> Int -> Envelope_Segment t Source #
Extract envelope segment given at index i.
envelope_segments :: Num t => Envelope t -> [Envelope_Segment t] Source #
Extract all segments.
pack_envelope_segments :: Num t => [Envelope_Segment t] -> ([t], [t], [Envelope_Curve t]) Source #
Transform list of Envelope_Segments into lists (env_levels,env_times,env_curves).
envelope_is_normal :: (Eq n, Num n) => Envelope n -> Bool Source #
An envelope is normal if it has no segments with zero duration.
envelope_normalise :: (Num a, Ord a) => Envelope a -> Envelope a Source #
Normalise envelope by deleting segments of zero duration.
envelope_at :: (Ord t, Floating t) => Envelope t -> t -> t Source #
Get value for Envelope at time t, or zero if t is out of
range. By convention if the envelope has a segment of zero
duration we give the rightmost value.
envelope_render :: (Ord t, Floating t, Enum t) => t -> Envelope t -> [(t, t)] Source #
Render Envelope to breakpoint set of n equi-distant places.
envelope_table :: (Ord t, Floating t, Enum t) => t -> Envelope t -> [t] Source #
Contruct a lookup table of n places from Envelope.
envelope_curves :: Envelope a -> [Envelope_Curve a] Source #
Variant on env_curves that expands the, possibly empty, user
list by cycling (if not empty) or by filling with EnvLin.
envelope_sc3_array :: Num a => Envelope a -> Maybe [a] Source #
Linear SC3 form of Envelope data.
Form is: l0 #t reset loop l1 t0 c0 c0' ...
let {l = [0,0.6,0.3,1.0,0]
;t = [0.1,0.02,0.4,1.1]
;c = [EnvLin,EnvExp,EnvNum (-6),EnvSin]
;e = Envelope l t c Nothing Nothing
;r = [0,4,-99,-99,0.6,0.1,1,0,0.3,0.02,2,0,1,0.4,5,-6,0,1.1,3,0]}
in envelope_sc3_array e == Just renvelope_sc3_ienvgen_array :: Num a => Envelope a -> Maybe [a] Source #
IEnvGen SC3 form of Envelope data. Offset not supported (zero).
let {l = [0,0.6,0.3,1.0,0]
;t = [0.1,0.02,0.4,1.1]
;c = [EnvLin,EnvExp,EnvNum (-6),EnvSin]
;e = Envelope l t c Nothing Nothing
;r = [0,0,4,1.62,0.1,1,0,0.6,0.02,2,0,0.3,0.4,5,-6,1,1.1,3,0,0]}
in envelope_sc3_ienvgen_array e == Just renv_is_sustained :: Envelope a -> Bool Source #
True if env_release_node is not Nothing.
env_circle :: Fractional a => Envelope a -> a -> Envelope_Curve a -> Envelope a Source #
Connect releaseNode (or end) to first node of envelope.
Construct
envTrapezoid_f :: Num t => (t -> t -> t, t -> t -> t) -> t -> t -> t -> t -> Envelope t Source #
Trapezoidal envelope generator.
Requires (and (=) functions returning 1 for true and 0 for false.
The arguments are: 1. shape determines the sustain time as a
proportion of dur, zero is a triangular envelope, one a rectangular
envelope; 2. skew determines the attack/decay ratio, zero is an
immediate attack and a slow decay, one a slow attack and an immediate
decay; 3. duration in seconds; 4. amplitude as linear gain.
envCoord :: Num a => [(a, a)] -> a -> a -> Envelope_Curve a -> Envelope a Source #
Co-ordinate based static envelope generator. Points are (time,value) pairs.
let e = envCoord [(0,0),(1/4,1),(1,0)] 1 1 EnvLin in envelope_sc3_array e == Just [0,2,-99,-99,1,1/4,1,0,0,3/4,1,0]
import Sound.SC3.Plot
plotEnvelope [envCoord [(0,0),(1/4,1),(1,0)] 1 1 EnvLin]
envPerc' :: Num a => a -> a -> a -> Envelope_Curve2 a -> Envelope a Source #
Variant envPerc with user specified 'Envelope_Curve a'.
envPerc :: Num a => a -> a -> Envelope a Source #
Percussive envelope, with attack, release, level and curve inputs.
envTriangle :: Fractional a => a -> a -> Envelope a Source #
Triangular envelope, with duration and level inputs.
let e = envTriangle 1 0.1 in envelope_sc3_array e = Just [0,2,-99,-99,0.1,0.5,1,0,0,0.5,1,0]
envSine :: Fractional a => a -> a -> Envelope a Source #
Sine envelope, with duration and level inputs.
let e = envSine 0 0.1 in envelope_sc3_array e == Just [0,2,-99,-99,0.1,0,3.0,0,0,0,3,0]
Parameters for LINEN envelopes.
Constructors
| LINEN | |
Fields
| |
envLinen' :: Num a => a -> a -> a -> a -> Envelope_Curve3 a -> Envelope a Source #
Variant of envLinen with user specified 'Envelope_Curve a'.
envLinen :: Num a => a -> a -> a -> a -> Envelope a Source #
Linear envelope parameter constructor.
let {e = envLinen 0 1 0 1
;s = envelope_segments e
;p = pack_envelope_segments s}
in p == (env_levels e,env_times e,env_curves e)Parameters for ADSR envelopes. The sustain level is given as a proportion of the peak level.
Constructors
| ADSR | |
Fields
| |
adsrDefault :: Fractional n => ADSR n Source #
envADSR :: Num a => a -> a -> a -> a -> a -> Envelope_Curve a -> a -> Envelope a Source #
Attack, decay, sustain, release envelope parameter constructor.
Parameters for Roland type ADSSR envelopes.
Constructors
| ADSSR | |
Fields
| |
envADSSR :: Num a => a -> a -> a -> a -> a -> a -> a -> Envelope_Curve a -> a -> Envelope a Source #
Attack, decay, slope, sustain, release envelope parameter constructor.
Parameters for ASR envelopes.
Constructors
| ASR | |
Fields
| |
envASR_c :: Num a => a -> a -> a -> Envelope_Curve2 a -> Envelope a Source #
SC3 .asr has singular curve argument, hence _c suffix.