module Csound.Catalog.Wave.Woodwind
    ( flute
    , bassClarinet
    , frenchHorn
    , sheng
    , hulusi
    , dizi
    ) where


import Csound.Base hiding (fromSpec)

import Csound.Catalog.Wave.WoodwindAlg

totalDur :: (D, D, D) -> D
totalDur :: (D, D, D) -> D
totalDur (D
att, D
sus, D
dec) = D
att D -> D -> D
forall a. Num a => a -> a -> a
+ D
sus D -> D -> D
forall a. Num a => a -> a -> a
+ D
dec

-------------------------------------------------------------------------
-- Flute

-- | An emulation of the flute. Parameters
--
-- > flute seed vibDepth attack sustain decay brightnessLevel cps =
--
-- * seed - a seed for the random signals/numbers. It's in (0, 1)
--
-- * vibDepth -  Amount of the vibrato. It's in [-1, 1]
--
-- * attack - duration of the attack.
--      Recommended value: 0.12 for slurred notes,
--                         0.06 for tongued notes,
--                         0.03 for short notes.
--
-- * sustain - duration of the sustain
--
-- * decay - duration of the decay.
--      Recommended value: 0.1 (0.05 for short notes).
--
-- * brightnessLevel - filter cutoff factor. It's in (0, 1). The 0 is 40 Hz, the 1 s 10240 Hz
--
-- * cps - frequency of the note
flute :: D -> D -> D -> D -> D -> D -> D -> Sig
flute :: D -> D -> D -> D -> D -> D -> D -> Sig
flute = WoodwindSpec -> D -> D -> D -> D -> D -> D -> D -> Sig
woodwind (WoodwindSpec -> D -> D -> D -> D -> D -> D -> D -> Sig)
-> WoodwindSpec -> D -> D -> D -> D -> D -> D -> D -> Sig
forall a b. (a -> b) -> a -> b
$ WoodwindSpec :: ((D, D, D) -> D -> ([(Sig, Tab)], D))
-> ((D, D, D) -> D)
-> ((D, D), (D, D), (D, D), (D, D))
-> WoodwindSpec
WoodwindSpec
    { woodwindRange :: (D, D, D) -> D -> ([(Sig, Tab)], D)
woodwindRange         = [RangeSpec] -> (D, D, D) -> D -> ([(Sig, Tab)], D)
fromSpec [RangeSpec]
fluteRangeSpec
    , woodwindVibratoDur :: (D, D, D) -> D
woodwindVibratoDur    = (D, D, D) -> D
totalDur
    , woodwindFreqDeviation :: ((D, D), (D, D), (D, D), (D, D))
woodwindFreqDeviation = ((-D
0.03, D
0), (D
0, D
0.003), (-D
0.0015, D
0), (D
0, D
0.012))
    }

fluteRangeSpec :: [RangeSpec]
fluteRangeSpec :: [RangeSpec]
fluteRangeSpec =
    [ RangeSpec :: D -> D -> [HarmSpec] -> RangeSpec
RangeSpec
        { rangeFreq :: D
rangeFreq = D
427.28
        , rangeNorm :: D
rangeNorm = D
3949
        , rangeHarms :: [HarmSpec]
rangeHarms =
            [ HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                { harmAmp :: AmpSpec
harmAmp   = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                    { ampAttack :: [D]
ampAttack     = [D
0,     D
0.002, D
0.045, D
0.146, D
0.272, D
0.072, D
0.043]
                    , ampSustain :: [D]
ampSustain    = [D
0.043, D
0.230, D
0.000, D
0.118, D
0.923]
                    , ampDecay :: [D]
ampDecay      = [D
0.923, D
1.191, D
0.794, D
0.418, D
0.172, D
0.053, D
0]
                    }
                , harmWave :: WaveSpec
harmWave  = [Double
2000, Double
489, Double
74, Double
219, Double
125, Double
9, Double
33, Double
5, Double
5]
                }
            , HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                { harmAmp :: AmpSpec
harmAmp   = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                    { ampAttack :: [D]
ampAttack     = [D
0,     D
0.009, D
0.022, -D
0.049, -D
0.120, D
0.297, D
1.890]
                    , ampSustain :: [D]
ampSustain    = [D
1.890, D
1.543, D
0.000, D
0.546, D
0.690]
                    , ampDecay :: [D]
ampDecay      = [D
0.690, -D
0.318, -D
0.326, -D
0.116, -D
0.035, -D
0.020, D
0]
                    }
                , harmWave :: WaveSpec
harmWave  = [Double
2729, Double
1926, Double
346, Double
662, Double
537, Double
110, Double
61, Double
29, Double
7]
                }
            , HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                { harmAmp :: AmpSpec
harmAmp   = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                    { ampAttack :: [D]
ampAttack     = [D
0,     D
0.005, -D
0.026, D
0.023, D
0.133, D
0.060, -D
1.245]
                    , ampSustain :: [D]
ampSustain    = [-D
1.245, -D
0.760, D
1.000, D
0.360, -D
0.526]
                    , ampDecay :: [D]
ampDecay      = [-D
0.526, D
0.165, D
0.184, D
0.060, D
0.010, D
0.013, D
0]
                    }
                , harmWave :: WaveSpec
harmWave  = [Double
2558, Double
2012, Double
390, Double
361, Double
534, Double
139, Double
53, Double
22, Double
10, Double
13, Double
10]
                }
            ]
        }
    , RangeSpec :: D -> D -> [HarmSpec] -> RangeSpec
RangeSpec
        { rangeFreq :: D
rangeFreq = D
608.22
        , rangeNorm :: D
rangeNorm = D
27668.2
        , rangeHarms :: [HarmSpec]
rangeHarms =
            [ HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                    { ampAttack :: [D]
ampAttack     = [D
0.000, D
0.000, -D
0.005, D
0.000, D
0.030, D
0.198, D
0.664]
                    , ampSustain :: [D]
ampSustain    = [D
0.664, D
1.451, D
1.782, D
1.316, D
0.817]
                    , ampDecay :: [D]
ampDecay      = [D
0.817, D
0.284, D
0.171, D
0.082, D
0.037, D
0.012, D
0]
                    }
                , harmWave :: WaveSpec
harmWave = [Double
12318, Double
8844, Double
1841, Double
1636, Double
256, Double
150, Double
60, Double
46, Double
11]
                }
            , HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                { harmAmp :: AmpSpec
harmAmp   = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                    { ampAttack :: [D]
ampAttack     = [D
0,D
0.000,D
0.320,D
0.882,D
1.863,D
4.175,D
4.355]
                    , ampSustain :: [D]
ampSustain    = [D
4.355,-D
5.329,-D
8.303,-D
1.480,-D
0.472]
                    , ampDecay :: [D]
ampDecay      = [-D
0.472,D
1.819,-D
0.135,-D
0.082,-D
0.170,-D
0.065,D
0]
                    }
                , harmWave :: WaveSpec
harmWave = [Double
1229, Double
16, Double
34, Double
57, Double
32]
            }
            , HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                    { ampAttack :: [D]
ampAttack     = [D
0,D
1.000,D
0.520,-D
0.303,D
0.059,-D
4.103,-D
6.784]
                    , ampSustain :: [D]
ampSustain    = [-D
6.784,D
7.006,D
11,D
12.495,-D
0.562]
                    , ampDecay :: [D]
ampDecay      = [-D
0.562,-D
4.946,-D
0.587,D
0.440,D
0.174,-D
0.027,D
0]
                    }
                , harmWave :: WaveSpec
harmWave = [Double
163, Double
31, Double
1, Double
50, Double
31]
                }
            ]
        }
    , RangeSpec :: D -> D -> [HarmSpec] -> RangeSpec
RangeSpec
        { rangeFreq :: D
rangeFreq = D
1013.7
        , rangeNorm :: D
rangeNorm = D
3775
        , rangeHarms :: [HarmSpec]
rangeHarms =
            [ HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                    { ampAttack :: [D]
ampAttack     = [D
0,D
0.005,D
0.000,-D
0.082,D
0.36,D
0.581,D
0.416]
                    , ampSustain :: [D]
ampSustain    = [D
0.416,D
1.073,D
0.000,D
0.356,D
0.86]
                    , ampDecay :: [D]
ampDecay      = [D
0.86,D
0.532,D
0.162,D
0.076,D
0.064,D
0.031,D
0]
                    }
                , harmWave :: WaveSpec
harmWave = [Double
4128, Double
883, Double
354, Double
79, Double
59, Double
23]
                }
            , HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                    { ampAttack :: [D]
ampAttack     = [D
0,-D
0.005,D
0.000,D
0.205,-D
0.284,-D
0.208,D
0.326]
                    , ampSustain :: [D]
ampSustain    = [D
0.326,-D
0.401,D
1.540,D
0.589,-D
0.486]
                    , ampDecay :: [D]
ampDecay      = [-D
0.486,-D
0.016,D
0.141,D
0.105,-D
0.003,-D
0.023,D
0]
                    }
                , harmWave :: WaveSpec
harmWave = [Double
1924, Double
930, Double
251, Double
50, Double
25, Double
14]
                }
            , HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                    { ampAttack :: [D]
ampAttack = [D
0,D
0.722,D
1.500,D
3.697,D
0.080,-D
2.327,-D
0.684]
                    , ampSustain :: [D]
ampSustain = [-D
0.684,-D
2.638,D
0.000,D
1.347,D
0.485]
                    , ampDecay :: [D]
ampDecay = [D
0.485,-D
0.419,-D
0.700,-D
0.278,D
0.167,-D
0.059,D
0]
                    }
                , harmWave :: WaveSpec
harmWave = [Double
94, Double
6, Double
22, Double
8]
                }
            ]
        }
    , RangeSpec :: D -> D -> [HarmSpec] -> RangeSpec
RangeSpec
        { rangeFreq :: D
rangeFreq = D
22000
        , rangeNorm :: D
rangeNorm = D
4909.05
        , rangeHarms :: [HarmSpec]
rangeHarms =
            [ HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                    { ampAttack :: [D]
ampAttack     = [D
0,D
0.000,D
0.000,D
0.211,D
0.526,D
0.989,D
1.216]
                    , ampSustain :: [D]
ampSustain    = [D
1.216,D
1.727,D
1.881,D
1.462,D
1.28]
                    , ampDecay :: [D]
ampDecay      = [D
1.28,D
0.75,D
0.34,D
0.154,D
0.122,D
0.028,D
0]
                    }
                , harmWave :: WaveSpec
harmWave = [Double
2661, Double
87, Double
33, Double
18]
                }
            , HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                    { ampAttack :: [D]
ampAttack     = [D
0,D
0.500,D
0.000,D
0.181,D
0.859,-D
0.205,-D
0.430]
                    , ampSustain :: [D]
ampSustain    = [-D
0.430,-D
0.725,-D
0.544,-D
0.436,-D
0.109]
                    , ampDecay :: [D]
ampDecay      = [-D
0.109,-D
0.03,-D
0.022,-D
0.046,-D
0.071,-D
0.019,D
0]
                    }
                , harmWave :: WaveSpec
harmWave = [Double
174, Double
12]
                }
            , HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                    { ampAttack :: [D]
ampAttack     = [D
0,D
0.000,D
1.000,D
0.426,D
0.222,D
0.175,-D
0.153]
                    , ampSustain :: [D]
ampSustain    = [-D
0.153,D
0.355,D
0.175,D
0.16,-D
0.246]
                    , ampDecay :: [D]
ampDecay      = [-D
0.246,-D
0.045,-D
0.072,D
0.057,-D
0.024,D
0.002,D
0]
                    }
                , harmWave :: WaveSpec
harmWave = [Double
314, Double
13]
                }
            ]
        }
    ]

-----------------------------------------------------------------
-- Bass clarinet

-- | An emulation of the bass clarinet. Parameters
--
-- > bassClarinet seed vibDepth attack sustain decay brightnessLevel cps =
--
-- * seed - a seed for the random signals/numbers. It's in (0, 1)
--
-- * vibDepth -  Amount of the vibrato. It's in [-1, 1]
--
-- * attack - duration of the attack.
--      Recommended value: 0.06 for tongued notes,
--                         0.03 for short notes.
--
-- * sustain - duration of the sustain
--
-- * decay - duration of the decay.
--      Recommended value: 0.15 (0.04 for short notes).
--
-- * brightnessLevel - filter cutoff factor. It's in (0, 1). The 0 is 40 Hz, the 1 s 10240 Hz
--
-- * cps - frequency of the note
bassClarinet :: D -> D -> D -> D -> D -> D -> D -> Sig
bassClarinet :: D -> D -> D -> D -> D -> D -> D -> Sig
bassClarinet = WoodwindSpec -> D -> D -> D -> D -> D -> D -> D -> Sig
woodwind (WoodwindSpec -> D -> D -> D -> D -> D -> D -> D -> Sig)
-> WoodwindSpec -> D -> D -> D -> D -> D -> D -> D -> Sig
forall a b. (a -> b) -> a -> b
$ WoodwindSpec :: ((D, D, D) -> D -> ([(Sig, Tab)], D))
-> ((D, D, D) -> D)
-> ((D, D), (D, D), (D, D), (D, D))
-> WoodwindSpec
WoodwindSpec
    { woodwindRange :: (D, D, D) -> D -> ([(Sig, Tab)], D)
woodwindRange         = [RangeSpec] -> (D, D, D) -> D -> ([(Sig, Tab)], D)
fromSpec [RangeSpec]
bassClarinetRangeSpec
    , woodwindVibratoDur :: (D, D, D) -> D
woodwindVibratoDur    = (D, D, D) -> D
totalDur
    , woodwindFreqDeviation :: ((D, D), (D, D), (D, D), (D, D))
woodwindFreqDeviation = ((D
0, D
0.015), (-D
0.005, D
0), (D
0, D
0.003), (D
0, D
0.017))
    }


bassClarinetRangeSpec :: [RangeSpec]
bassClarinetRangeSpec :: [RangeSpec]
bassClarinetRangeSpec =
    [RangeSpec :: D -> D -> [HarmSpec] -> RangeSpec
RangeSpec
        { rangeFreq :: D
rangeFreq = D
67.13
        , rangeNorm :: D
rangeNorm = D
29786.7
        , rangeHarms :: [HarmSpec]
rangeHarms = [HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,-D
0.012,D
0.000,D
0.494,D
0.717,D
1.005,D
1.396]
                               , ampSustain :: [D]
ampSustain    = [D
1.396,D
1.838,D
1.616,D
1.579,D
1.343]
                               , ampDecay :: [D]
ampDecay      = [D
1.343,D
1.231,D
0.958,D
0.581,D
0.000,-D
0.089,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
5321,Double
43,Double
5458,Double
112,Double
7869,Double
166,Double
2338,Double
211,Double
5575,Double
104,Double
3280,Double
127,Double
1184,Double
296,Double
1290,Double
742,Double
419,Double
238,Double
248,Double
481,Double
605,Double
585,Double
619,Double
691,Double
93,Double
242,Double
762,Double
826,Double
831,Double
830,Double
440,Double
62,Double
286,Double
310,Double
409,Double
200,Double
422,Double
101,Double
170,Double
51,Double
177,Double
44,Double
114,Double
93,Double
27,Double
26,Double
48,Double
80,Double
98,Double
61,Double
69,Double
45,Double
31,Double
13,Double
7,Double
11,Double
33,Double
0,Double
38,Double
21,Double
11]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.301,D
1.000,D
0.891,D
0.753,D
0.499,D
0.333]
                               , ampSustain :: [D]
ampSustain    = [D
0.333,D
0.065,D
0.125,D
0.166,-D
0.002]
                               , ampDecay :: [D]
ampDecay      = [-D
0.002,D
0.023,-D
0.018,D
0.029,D
0.000,D
0.389,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
2390,Double
251,Double
2895,Double
266,Double
1251,Double
148,Double
358,Double
146,Double
300,Double
93,Double
81,Double
65,Double
50,Double
20,Double
28,Double
3,Double
19,Double
2,Double
8,Double
12,Double
60,Double
38,Double
39,Double
61,Double
9,Double
34,Double
25,Double
42,Double
37,Double
6]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,-D
0.009,D
0.000,-D
0.166,-D
0.298,-D
0.446,-D
0.837]
                               , ampSustain :: [D]
ampSustain    = [-D
0.837,-D
0.945,-D
0.644,-D
0.573,-D
0.341]
                               , ampDecay :: [D]
ampDecay      = [-D
0.341,-D
0.254,D
0.047,D
0.405,D
1.000,D
0.486,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
4231,Double
54,Double
3544,Double
101,Double
4989,Double
146,Double
1459,Double
122,Double
3251,Double
157,Double
1310,Double
147,Double
779,Double
6,Double
1326,Double
396,Double
720,Double
235,Double
238,Double
260,Double
516,Double
123,Double
519,Double
45,Double
36,Double
112,Double
320,Double
112,Double
253,Double
83,Double
216,Double
62,Double
107,Double
52,Double
94,Double
126,Double
32,Double
49,Double
33,Double
35,Double
32,Double
32,Double
15,Double
14]
                           }]
        }
    ,RangeSpec :: D -> D -> [HarmSpec] -> RangeSpec
RangeSpec
        { rangeFreq :: D
rangeFreq = D
95.56
        , rangeNorm :: D
rangeNorm = D
23524.2
        , rangeHarms :: [HarmSpec]
rangeHarms = [HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.023,D
0.062,D
0.140,D
0.605,D
0.902,D
1.302]
                               , ampSustain :: [D]
ampSustain    = [D
1.302,D
1.355,D
1.355,D
1.202,D
0.934]
                               , ampDecay :: [D]
ampDecay      = [D
0.934,D
0.891,D
0.654,D
0.225,D
0.000,-D
0.012,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
6317,Double
51,Double
6402,Double
115,Double
4155,Double
81,Double
1130,Double
67,Double
609,Double
372,Double
1333,Double
427,Double
1708,Double
490,Double
1817,Double
798,Double
2287,Double
553,Double
1410,Double
385,Double
421,Double
208,Double
448,Double
70,Double
347,Double
146,Double
753,Double
482,Double
572,Double
119,Double
222,Double
101,Double
158,Double
216,Double
75,Double
155,Double
67,Double
14,Double
27,Double
38,Double
74,Double
3,Double
61,Double
105,Double
109,Double
71,Double
34,Double
12,Double
14,Double
27,Double
15,Double
23,Double
28,Double
46,Double
24,Double
35,Double
13,Double
10,Double
27,Double
7,Double
42,Double
33,Double
44,Double
24,Double
56,Double
50,Double
53,Double
13]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.035,D
0.230,D
0.637,D
0.410,D
0.279,-D
0.240]
                               , ampSustain :: [D]
ampSustain    = [-D
0.240,-D
0.259,-D
0.248,-D
0.086,-D
0.090]
                               , ampDecay :: [D]
ampDecay      = [-D
0.090,-D
0.109,-D
0.074,-D
0.037,D
0.000,D
0.016,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
3464,Double
54,Double
4267,Double
457,Double
84,Double
217,Double
49,Double
29,Double
21,Double
48,Double
38,Double
27,Double
16,Double
21,Double
65,Double
34,Double
224,Double
461,Double
312,Double
102]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,-D
0.070,-D
0.144,-D
0.167,-D
0.230,-D
0.350,-D
0.500]
                               , ampSustain :: [D]
ampSustain    = [-D
0.500,-D
0.650,-D
0.435,-D
0.083,D
0.009]
                               , ampDecay :: [D]
ampDecay      = [D
0.009,D
0.030,D
0.485,D
1.477,D
1.000,D
0.278,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
1516,Double
179,Double
890,Double
59,Double
566,Double
60,Double
257,Double
17,Double
94,Double
39,Double
172,Double
44,Double
40,Double
41,Double
77,Double
10]
                           }]
        }
    ,RangeSpec :: D -> D -> [HarmSpec] -> RangeSpec
RangeSpec
        { rangeFreq :: D
rangeFreq = D
135.16
        , rangeNorm :: D
rangeNorm = D
19174.7
        , rangeHarms :: [HarmSpec]
rangeHarms = [HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.023,D
0.062,D
0.140,D
0.605,D
0.902,D
1.302]
                               , ampSustain :: [D]
ampSustain    = [D
1.302,D
1.355,D
1.355,D
1.202,D
0.934]
                               , ampDecay :: [D]
ampDecay      = [D
0.934,D
0.891,D
0.654,D
0.225,D
0.000,-D
0.012,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
10317,Double
51,Double
3402,Double
115,Double
3855,Double
81,Double
2130,Double
67,Double
1009,Double
872,Double
1233,Double
427,Double
1208,Double
490,Double
1217,Double
398,Double
1187,Double
153,Double
710,Double
285,Double
261,Double
28,Double
278,Double
10,Double
277,Double
26,Double
153,Double
92,Double
82,Double
9,Double
22,Double
11,Double
28,Double
26,Double
15,Double
25,Double
7]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.035,D
0.230,D
0.637,D
0.410,D
0.279,-D
0.240]
                               , ampSustain :: [D]
ampSustain    = [-D
0.240,-D
0.259,-D
0.248,-D
0.086,-D
0.090]
                               , ampDecay :: [D]
ampDecay      = [-D
0.090,-D
0.109,-D
0.074,-D
0.037,D
0.000,D
0.016,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
3464,Double
54,Double
2267,Double
257,Double
44,Double
117,Double
29,Double
29,Double
21]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,-D
0.070,-D
0.144,-D
0.167,-D
0.230,-D
0.350,-D
0.500]
                               , ampSustain :: [D]
ampSustain    = [-D
0.500,-D
0.650,-D
0.435,-D
0.083,D
0.009]
                               , ampDecay :: [D]
ampDecay      = [D
0.009,D
0.030,D
0.485,D
1.477,D
1.000,D
0.278,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
1516,Double
179,Double
990,Double
59,Double
266,Double
60,Double
157,Double
17,Double
94,Double
39]
                           }]
        }
    ,RangeSpec :: D -> D -> [HarmSpec] -> RangeSpec
RangeSpec
        { rangeFreq :: D
rangeFreq = D
191.11
        , rangeNorm :: D
rangeNorm = D
27370.2
        , rangeHarms :: [HarmSpec]
rangeHarms = [HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.015,D
0.000,D
0.504,D
0.294,D
0.334,D
0.000]
                               , ampSustain :: [D]
ampSustain    = [D
0.000,D
0.580,D
1.166,D
1.017,D
0.996]
                               , ampDecay :: [D]
ampDecay      = [D
0.996,D
1.015,D
0.308,D
0.002,D
0.010,-D
0.005,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
14794,Double
31,Double
882,Double
197,Double
3524,Double
218,Double
3723,Double
61,Double
2540,Double
1574,Double
1262,Double
333,Double
689,Double
395,Double
602,Double
165,Double
85,Double
265,Double
147,Double
22,Double
119,Double
149,Double
28,Double
61,Double
17,Double
69,Double
100,Double
26,Double
143,Double
46,Double
118,Double
65,Double
12]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.115,D
1.000,D
0.567,D
0.275,-D
0.427,D
0.000]
                               , ampSustain :: [D]
ampSustain    = [D
0.000,-D
1.425,-D
1.222,-D
0.760,-D
0.270]
                               , ampDecay :: [D]
ampDecay      = [-D
0.270,-D
0.026,D
1.483,D
1.819,D
0.549,D
0.188,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
3278,Double
18,Double
70,Double
4,Double
39,Double
10,Double
16,Double
5,Double
12,Double
57,Double
7,Double
13,Double
11,Double
12,Double
9]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,-D
0.002,D
0.000,-D
0.020,D
0.519,D
0.743,D
1.000]
                               , ampSustain :: [D]
ampSustain    = [D
1.000,D
0.853,D
0.365,D
0.371,D
0.110]
                               , ampDecay :: [D]
ampDecay      = [D
0.110,-D
0.004,D
0.185,D
0.011,D
0.001,D
0.003,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
16146,Double
44,Double
1093,Double
292,Double
4965,Double
1047,Double
6341,Double
28,Double
4423,Double
760,Double
1292,Double
1316,Double
659,Double
1498,Double
421,Double
535,Double
116,Double
482,Double
103,Double
38,Double
134,Double
274,Double
265,Double
47,Double
65,Double
59,Double
142,Double
15,Double
75,Double
84,Double
70,Double
78,Double
12]
                           }]
        }
    ,RangeSpec :: D -> D -> [HarmSpec] -> RangeSpec
RangeSpec
        { rangeFreq :: D
rangeFreq = D
22000
        , rangeNorm :: D
rangeNorm = D
22329.4
        , rangeHarms :: [HarmSpec]
rangeHarms = [HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.015,D
0.000,D
0.504,D
0.294,D
0.334,D
0.000]
                               , ampSustain :: [D]
ampSustain    = [D
0.000,D
0.580,D
1.166,D
1.017,D
0.996]
                               , ampDecay :: [D]
ampDecay      = [D
0.996,D
1.015,D
0.308,D
0.002,D
0.010,-D
0.005,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
14794,Double
31,Double
882,Double
197,Double
3524,Double
218,Double
1823,Double
61,Double
1540,Double
774,Double
662,Double
233,Double
289,Double
195,Double
152,Double
65,Double
45,Double
12]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.115,D
1.000,D
0.567,D
0.275,-D
0.427,D
0.000]
                               , ampSustain :: [D]
ampSustain    = [D
0.000,-D
1.425,-D
1.222,-D
0.760,-D
0.270]
                               , ampDecay :: [D]
ampDecay      = [-D
0.270,-D
0.026,D
1.483,D
1.819,D
0.549,D
0.188,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
3278,Double
18,Double
70,Double
4,Double
39,Double
10]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,-D
0.002,D
0.000,-D
0.020,D
0.519,D
0.743,D
1.000]
                               , ampSustain :: [D]
ampSustain    = [D
1.000,D
0.853,D
0.365,D
0.371,D
0.110]
                               , ampDecay :: [D]
ampDecay      = [D
0.110,-D
0.004,D
0.185,D
0.011,D
0.001,D
0.003,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
16146,Double
44,Double
1093,Double
292,Double
2965,Double
1047,Double
3341,Double
128,Double
2423,Double
760,Double
392,Double
316,Double
159,Double
148,Double
61,Double
45,Double
26]
                           }]
        }]


------------------------------------------------------------------
-- French horn

-- | An emulation of the french horn. Parameters
--
-- > frenchHorn seed vibDepth attack sustain decay brightnessLevel cps =
--
-- * seed - a seed for the random signals/numbers. It's in (0, 1)
--
-- * vibDepth -  Amount of the vibrato. It's in [-1, 1]
--
-- * attack - duration of the attack.
--      Recommended value: 0.06 for tongued notes (up to 0.12 for lower notes, up to G2),
--                         0.03 for short notes.
--
-- * sustain - duration of the sustain
--
-- * decay - duration of the decay.
--      Recommended value: 0.25 (0.04 for short notes).
--
-- * brightnessLevel - filter cutoff factor. It's in (0, 1). The 0 is 40 Hz, the 1 s 10240 Hz
--
-- * cps - frequency of the note
frenchHorn :: D -> D -> D -> D -> D -> D -> D -> Sig
frenchHorn :: D -> D -> D -> D -> D -> D -> D -> Sig
frenchHorn = WoodwindSpec -> D -> D -> D -> D -> D -> D -> D -> Sig
woodwind (WoodwindSpec -> D -> D -> D -> D -> D -> D -> D -> Sig)
-> WoodwindSpec -> D -> D -> D -> D -> D -> D -> D -> Sig
forall a b. (a -> b) -> a -> b
$ WoodwindSpec :: ((D, D, D) -> D -> ([(Sig, Tab)], D))
-> ((D, D, D) -> D)
-> ((D, D), (D, D), (D, D), (D, D))
-> WoodwindSpec
WoodwindSpec
    { woodwindRange :: (D, D, D) -> D -> ([(Sig, Tab)], D)
woodwindRange         = [RangeSpec] -> (D, D, D) -> D -> ([(Sig, Tab)], D)
fromSpec [RangeSpec]
frenchHornRangeSpec
    , woodwindVibratoDur :: (D, D, D) -> D
woodwindVibratoDur    = (D, D, D) -> D
totalDur
    , woodwindFreqDeviation :: ((D, D), (D, D), (D, D), (D, D))
woodwindFreqDeviation = ((-D
0.012, D
0), (D
0, D
0.005), (-D
0.005, D
0), (D
0, D
0.009))
    }

frenchHornRangeSpec :: [RangeSpec]
frenchHornRangeSpec :: [RangeSpec]
frenchHornRangeSpec =
    [RangeSpec :: D -> D -> [HarmSpec] -> RangeSpec
RangeSpec
        { rangeFreq :: D
rangeFreq = D
113.26
        , rangeNorm :: D
rangeNorm = D
5137
        , rangeHarms :: [HarmSpec]
rangeHarms = [HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.000,D
0.000,D
0.298,D
1.478,D
1.901,D
2.154]
                               , ampSustain :: [D]
ampSustain    = [D
2.154,D
2.477,D
2.495,D
2.489,D
1.980]
                               , ampDecay :: [D]
ampDecay      = [D
1.980,D
1.759,D
1.506,D
1.000,D
0.465,D
0.006,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
478,Double
1277,Double
2340,Double
4533,Double
2413,Double
873,Double
682,Double
532,Double
332,Double
364,Double
188,Double
258,Double
256,Double
114,Double
80,Double
68,Double
36]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.000,D
1.000,D
2.127,D
0.694,-D
0.599,-D
1.807]
                               , ampSustain :: [D]
ampSustain    = [-D
1.807,-D
2.485,-D
2.125,-D
2.670,-D
0.798]
                               , ampDecay :: [D]
ampDecay      = [-D
0.798,-D
0.056,-D
0.038,D
0.000,D
0.781,D
0.133,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
414,Double
906,Double
831,Double
507,Double
268,Double
36]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
1.000,D
0.000,-D
4.131,-D
6.188,-D
1.422,D
1.704]
                               , ampSustain :: [D]
ampSustain    = [D
1.704,D
6.362,D
3.042,D
5.736,-D
0.188]
                               , ampDecay :: [D]
ampDecay      = [-D
0.188,-D
2.558,-D
2.409,D
0.000,-D
1.736,D
0.167,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
74,Double
50,Double
68,Double
156,Double
50,Double
48,Double
52,Double
66]
                           }]
        }
    ,RangeSpec :: D -> D -> [HarmSpec] -> RangeSpec
RangeSpec
        { rangeFreq :: D
rangeFreq = D
152.055
        , rangeNorm :: D
rangeNorm = D
35685
        , rangeHarms :: [HarmSpec]
rangeHarms = [HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.000,D
0.000,D
0.000,D
0.308,D
0.926,D
1.370]
                               , ampSustain :: [D]
ampSustain    = [D
1.370,D
3.400,D
3.205,D
3.083,D
2.722]
                               , ampDecay :: [D]
ampDecay      = [D
2.722,D
2.239,D
2.174,D
1.767,D
1.098,D
0.252,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
677,Double
2663,Double
4420,Double
1597,Double
1236,Double
780,Double
581,Double
325,Double
415,Double
201,Double
212,Double
202,Double
156,Double
26]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.478,D
1.000,D
0.000,D
4.648,D
1.843,D
5.242]
                               , ampSustain :: [D]
ampSustain    = [D
5.242,-D
0.853,-D
0.722,-D
0.860,-D
0.547]
                               , ampDecay :: [D]
ampDecay      = [-D
0.547,-D
0.462,-D
0.380,-D
0.387,-D
0.355,-D
0.250,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
648,Double
1635,Double
828,Double
149,Double
89,Double
41]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,-D
0.107,D
0.000,D
1.000,-D
0.570,D
0.681,-D
1.097]
                               , ampSustain :: [D]
ampSustain    = [-D
1.097,D
1.495,D
0.152,D
0.461,D
0.231]
                               , ampDecay :: [D]
ampDecay      = [D
0.231,D
0.228,D
0.256,D
0.152,D
0.087,D
0.042,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
1419,Double
3414,Double
901,Double
503,Double
204,Double
146]
                           }]
        }
    ,RangeSpec :: D -> D -> [HarmSpec] -> RangeSpec
RangeSpec
        { rangeFreq :: D
rangeFreq = D
202.74
        , rangeNorm :: D
rangeNorm = D
39632
        , rangeHarms :: [HarmSpec]
rangeHarms = [HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.039,D
0.000,D
0.000,D
0.230,D
0.216,D
0.647]
                               , ampSustain :: [D]
ampSustain    = [D
0.647,D
1.764,D
1.961,D
1.573,D
1.408]
                               , ampDecay :: [D]
ampDecay      = [D
1.408,D
1.312,D
1.125,D
0.802,D
0.328,D
0.061,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
1722,Double
14359,Double
5103,Double
1398,Double
2062,Double
696,Double
652,Double
266,Double
264,Double
176,Double
164,Double
75]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
1.142,D
1.000,D
0.000,-D
1.181,-D
3.005,-D
1.916]
                               , ampSustain :: [D]
ampSustain    = [-D
1.916,D
2.325,D
3.249,D
2.154,D
1.766]
                               , ampDecay :: [D]
ampDecay      = [D
1.766,D
2.147,D
1.305,D
0.115,D
0.374,D
0.162,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
1237,Double
2287,Double
237,Double
72]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,-D
0.361,D
0.000,D
1.000,D
1.369,D
1.865,D
1.101]
                               , ampSustain :: [D]
ampSustain    = [D
1.101,-D
0.677,-D
0.833,-D
0.437,-D
0.456]
                               , ampDecay :: [D]
ampDecay      = [-D
0.456,-D
0.465,-D
0.395,-D
0.144,-D
0.061,-D
0.012,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
2345,Double
7796,Double
1182,Double
266,Double
255,Double
193,Double
85]
                           }]
        }
    ,RangeSpec :: D -> D -> [HarmSpec] -> RangeSpec
RangeSpec
        { rangeFreq :: D
rangeFreq = D
270.32
        , rangeNorm :: D
rangeNorm = D
26576.1
        , rangeHarms :: [HarmSpec]
rangeHarms = [HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.000,-D
0.147,-D
0.200,-D
0.453,-D
0.522,D
0.000]
                               , ampSustain :: [D]
ampSustain    = [D
0.000,D
2.164,D
1.594,D
2.463,D
1.506]
                               , ampDecay :: [D]
ampDecay      = [D
1.506,D
1.283,D
0.618,D
0.222,D
0.047,D
0.006,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
9834,Double
16064,Double
2259,Double
1625,Double
1353,Double
344,Double
356,Double
621,Double
195,Double
155,Double
77,Double
98]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
1.000,D
16.034,D
24.359,D
12.399,D
3.148,D
0.000]
                               , ampSustain :: [D]
ampSustain    = [D
0.000,D
8.986,-D
2.516,D
13.268,D
0.541]
                               , ampDecay :: [D]
ampDecay      = [D
0.541,-D
2.107,-D
11.221,-D
14.179,-D
7.152,D
5.327,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
377,Double
193,Double
41]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.000,-D
0.318,-D
0.181,D
0.861,D
1.340,D
1.000]
                               , ampSustain :: [D]
ampSustain    = [D
1.000,-D
1.669,-D
0.669,-D
2.208,-D
0.709]
                               , ampDecay :: [D]
ampDecay      = [-D
0.709,-D
0.388,D
0.641,D
1.101,D
0.817,D
0.018,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
8905,Double
10946,Double
1180,Double
1013,Double
506,Double
125,Double
48]
                           }]
        }
    ,RangeSpec :: D -> D -> [HarmSpec] -> RangeSpec
RangeSpec
        { rangeFreq :: D
rangeFreq = D
360.43
        , rangeNorm :: D
rangeNorm = D
26866.7
        , rangeHarms :: [HarmSpec]
rangeHarms = [HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
2.298,D
2.017,D
2.099,D
1.624,D
0.536,D
1.979]
                               , ampSustain :: [D]
ampSustain    = [D
1.979,-D
2.465,-D
4.449,-D
4.176,-D
1.518]
                               , ampDecay :: [D]
ampDecay      = [-D
1.518,-D
0.593,D
0.000,D
0.384,D
0.386,D
0.256,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
16460,Double
4337,Double
1419,Double
1255,Double
43,Double
205,Double
81,Double
73,Double
60,Double
38]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,-D
1.498,-D
1.342,-D
0.983,-D
0.402,D
0.572,-D
0.948]
                               , ampSustain :: [D]
ampSustain    = [-D
0.948,D
4.490,D
6.433,D
5.822,D
1.845]
                               , ampDecay :: [D]
ampDecay      = [D
1.845,D
0.618,D
0.000,-D
0.345,-D
0.295,-D
0.164,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
16569,Double
5563,Double
1838,Double
1852,Double
134,Double
340,Double
129,Double
159,Double
162,Double
99]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,-D
0.320,D
0.179,-D
0.551,-D
0.410,-D
0.417,-D
0.028]
                               , ampSustain :: [D]
ampSustain    = [-D
0.028,-D
1.517,-D
1.523,-D
1.057,D
0.883]
                               , ampDecay :: [D]
ampDecay      = [D
0.883,D
1.273,D
1.000,D
0.660,D
0.271,D
0.026,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
10383,Double
4175,Double
858,Double
502,Double
241,Double
165]
                           }]
        }
    ,RangeSpec :: D -> D -> [HarmSpec] -> RangeSpec
RangeSpec
        { rangeFreq :: D
rangeFreq = D
480.29
        , rangeNorm :: D
rangeNorm = D
31013.2
        , rangeHarms :: [HarmSpec]
rangeHarms = [HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
6.711,D
4.998,D
3.792,-D
0.554,-D
1.261,-D
5.584]
                               , ampSustain :: [D]
ampSustain    = [-D
5.584,-D
4.633,-D
0.384,-D
0.555,-D
0.810]
                               , ampDecay :: [D]
ampDecay      = [-D
0.810,D
0.112,D
0.962,D
1.567,D
0.881,D
0.347,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
15341,Double
5092,Double
1554,Double
640,Double
101]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,-D
5.829,-D
4.106,-D
3.135,D
1.868,D
1.957,D
6.851]
                               , ampSustain :: [D]
ampSustain    = [D
6.851,D
5.135,D
0.097,D
0.718,D
1.679]
                               , ampDecay :: [D]
ampDecay      = [D
1.679,D
0.881,-D
0.009,-D
0.927,-D
0.544,-D
0.225,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
16995,Double
6133,Double
1950,Double
788,Double
136]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.220,D
0.177,D
0.333,-D
0.302,D
0.071,-D
0.563]
                               , ampSustain :: [D]
ampSustain    = [-D
0.563,D
0.338,D
1.214,D
0.840,D
0.103]
                               , ampDecay :: [D]
ampDecay      = [D
0.103,D
0.003,-D
0.114,-D
0.049,-D
0.031,-D
0.017,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
22560,Double
9285,Double
4691,Double
1837,Double
342,Double
294,Double
307,Double
222,Double
288,Double
103]
                           }]
        }
    ,RangeSpec :: D -> D -> [HarmSpec] -> RangeSpec
RangeSpec
        { rangeFreq :: D
rangeFreq = D
22000
        , rangeNorm :: D
rangeNorm = D
26633.5
        , rangeHarms :: [HarmSpec]
rangeHarms = [HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.046,D
0.000,D
0.127,D
0.686,D
1.000,D
1.171]
                               , ampSustain :: [D]
ampSustain    = [D
1.171,D
0.000,D
0.667,D
0.969,D
1.077]
                               , ampDecay :: [D]
ampDecay      = [D
1.077,D
1.267,D
1.111,D
0.964,D
0.330,D
0.047,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
19417,Double
5904,Double
1666,Double
913,Double
266,Double
55,Double
81,Double
46]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,D
0.262,D
1.000,D
1.026,D
0.419,D
0.000,-D
0.172]
                               , ampSustain :: [D]
ampSustain    = [-D
0.172,D
0.000,-D
0.764,-D
0.547,-D
0.448]
                               , ampDecay :: [D]
ampDecay      = [-D
0.448,-D
0.461,-D
0.199,-D
0.015,D
0.432,D
0.120,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
11940,Double
1211,Double
111,Double
38]
                           }
                       ,HarmSpec :: AmpSpec -> WaveSpec -> HarmSpec
HarmSpec
                           { harmAmp :: AmpSpec
harmAmp = AmpSpec :: [D] -> [D] -> [D] -> AmpSpec
AmpSpec
                               { ampAttack :: [D]
ampAttack     = [D
0,-D
0.014,D
0.000,D
0.102,D
0.006,D
0.000,-D
0.016]
                               , ampSustain :: [D]
ampSustain    = [-D
0.016,D
1.000,D
0.753,D
0.367,D
0.163]
                               , ampDecay :: [D]
ampDecay      = [D
0.163,-D
0.030,-D
0.118,-D
0.207,-D
0.103,-D
0.007,D
0]
                               }
                           , harmWave :: WaveSpec
harmWave = [Double
25132,Double
6780,Double
2886,Double
1949,Double
507,Double
505,Double
466,Double
488,Double
336,Double
121]
                           }]
        }]


------------------------------------------------------------------
-- Sheng

-- | An emulation of the sheng. Parameters
--
-- > sheng seed vibDepth attack sustain decay brightnessLevel cps =
--
-- * seed - a seed for the random signals/numbers. It's in (0, 1)
--
-- * vibDepth -  Amount of the vibrato. It's in [-1, 1]
--
-- * attack - duration of the attack.
--      Recommended value: 0.1,
--                         0.03 for short notes.
--
-- * sustain - duration of the sustain
--
-- * decay - duration of the decay.
--      Recommended value: 0.2 (0.04 for short notes).
--
-- * brightnessLevel - filter cutoff factor. It's in (0, 1). The 0 is 40 Hz, the 1 s 10240 Hz
--
-- * cps - frequency of the note
sheng :: D -> D -> D -> D -> D -> D -> D -> Sig
sheng :: D -> D -> D -> D -> D -> D -> D -> Sig
sheng = WoodwindSpec -> D -> D -> D -> D -> D -> D -> D -> Sig
woodwind (WoodwindSpec -> D -> D -> D -> D -> D -> D -> D -> Sig)
-> WoodwindSpec -> D -> D -> D -> D -> D -> D -> D -> Sig
forall a b. (a -> b) -> a -> b
$ WoodwindSpec :: ((D, D, D) -> D -> ([(Sig, Tab)], D))
-> ((D, D, D) -> D)
-> ((D, D), (D, D), (D, D), (D, D))
-> WoodwindSpec
WoodwindSpec
    { woodwindRange :: (D, D, D) -> D -> ([(Sig, Tab)], D)
woodwindRange         = (D, D, D) -> D -> ([(Sig, Tab)], D)
shengRange
    , woodwindVibratoDur :: (D, D, D) -> D
woodwindVibratoDur    = D -> (D, D, D) -> D
forall a b. a -> b -> a
const D
0.625
    , woodwindFreqDeviation :: ((D, D), (D, D), (D, D), (D, D))
woodwindFreqDeviation = ((-D
0.03, D
0), (D
0, D
0.003), (-D
0.0015, D
0), (D
0, D
0.012))
    }

shengRange :: (D, D, D) -> D -> ([(Sig, Tab)], D)
shengRange :: (D, D, D) -> D -> ([(Sig, Tab)], D)
shengRange (D
iattack, D
isustain, D
idecay) D
ifreq = ([(Sig
amp1, Tab
iwt1), (Sig
amp2, Tab
iwt2), (Sig
amp3, Tab
iwt3)], D
inorm)
    where
        amp1 :: Sig
amp1 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.20D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
2000, D
0.40D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
2050,  D
0.4D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
2250, D
0.18D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2500
            , D
0.78D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2300, D
0.04D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2000, D
1.0D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0, D
1, D
0]
        amp2 :: Sig
amp2 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.11D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
100, D
0.12D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
5000,  D
0.12D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
7500, D
0.3D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
9500
            , D
0.35D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
10500, D
0.18D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
12000, D
0.3D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
11000, D
0.48D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
10000
            , D
0.04D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
9000, D
0.23D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
7000, D
0.67D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0, D
1, D
0]
        amp3 :: Sig
amp3 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.18D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
10, D
0.15D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
1250,  D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
1800,  D
0.24D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
1900
            , D
0.23D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
2200,  D
0.03D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2600, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2900, D
0.35D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2700
            , D
0.23D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2400, D
0.15D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2000, D
0.04D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
1800, D
0.23D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
1200
            , D
0.42D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
20, D
0.15D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0, D
1, D
0]

        inorm :: D
inorm = [D] -> D
forall a. Tuple a => [a] -> a
byRange [ D
34991, D
32586, D
35331, D
37480 ]

        iwt1 :: Tab
iwt1 = Tab
f11
        iwt2 :: Tab
iwt2 = BoolD -> Tab -> Tab -> Tab
forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a
ifB (D
ifreq D -> D -> BooleanOf D
forall a. OrdB a => a -> a -> BooleanOf a
`lessThan` D
1025) Tab
f31 Tab
f35
        iwt3 :: Tab
iwt3 = [Tab] -> Tab
forall a. Tuple a => [a] -> a
byRange [Tab
f32, Tab
f33, Tab
f34, Tab
f36]

        f11 :: Tab
f11 = Tab
sine
        f31 :: Tab
f31 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [(Double, Double)] -> Tab
sines2 [(Double
2, Double
1), (Double
3, Double
0.16), (Double
4, Double
1.16), (Double
5, Double
0.45), (Double
6, Double
0.33)]
        f32 :: Tab
f32 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [(Double, Double)] -> Tab
sines2
                [ (Double
7, Double
1), (Double
8, Double
0.83), (Double
9, Double
0.85), (Double
10, Double
0.16), (Double
11, Double
0.5), (Double
12, Double
0.38)
                , (Double
13, Double
0.05), (Double
14, Double
0.26), (Double
15, Double
0.16), (Double
16, Double
0.13), (Double
17, Double
0.12), (Double
18, Double
0.05), (Double
19, Double
0.11)]
        f33 :: Tab
f33 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [(Double, Double)] -> Tab
sines2 [ (Double
7, Double
0.21), (Double
8, Double
0.33), (Double
9, Double
0.36), (Double
10, Double
0.3), (Double
11, Double
0.76), (Double
12, Double
0.38), (Double
13, Double
0.5), (Double
14, Double
0.07)]
        f34 :: Tab
f34 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [(Double, Double)] -> Tab
sines2 [ (Double
7, Double
0.43), (Double
8, Double
1.2), (Double
9, Double
0.4), (Double
10, Double
0.3), (Double
11, Double
0.1) ]
        f35 :: Tab
f35 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [(Double, Double)] -> Tab
sines2 [ (Double
2, Double
0.58), (Double
3, Double
0.83), (Double
4, Double
0.83) ]
        f36 :: Tab
f36 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [(Double, Double)] -> Tab
sines2 [ (Double
5, Double
2.1), (Double
6, Double
1.2), (Double
7, Double
0.4) ]

        byRange :: Tuple a => [a] -> a
        byRange :: [a] -> a
byRange = D -> [(D, a)] -> a
forall a. Tuple a => D -> [(D, a)] -> a
byFreq D
ifreq ([(D, a)] -> a) -> ([a] -> [(D, a)]) -> [a] -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [D] -> [a] -> [(D, a)]
forall a b. [a] -> [b] -> [(a, b)]
zip [D]
freqs
        freqs :: [D]
freqs = [D
538, D
760, D
1025, D
22000]

----------------------------------------------------------------
-- Hulusi

-- | An emulation of the hulusi. Parameters
--
-- > hulusi seed vibDepth attack sustain decay brightnessLevel cps =
--
-- * seed - a seed for the random signals/numbers. It's in (0, 1)
--
-- * vibDepth -  Amount of the vibrato. It's in [-1, 1]
--
-- * attack - duration of the attack.
--      Recommended value: 0.03
--
-- * sustain - duration of the sustain
--
-- * decay - duration of the decay.
--      Recommended value: 0.1 (0.04 for short notes).
--
-- * brightnessLevel - filter cutoff factor. It's in (0, 1). The 0 is 40 Hz, the 1 s 10240 Hz
--
-- * cps - frequency of the note
hulusi :: D -> D -> D -> D -> D -> D -> D -> Sig
hulusi :: D -> D -> D -> D -> D -> D -> D -> Sig
hulusi = WoodwindSpec -> D -> D -> D -> D -> D -> D -> D -> Sig
woodwind (WoodwindSpec -> D -> D -> D -> D -> D -> D -> D -> Sig)
-> WoodwindSpec -> D -> D -> D -> D -> D -> D -> D -> Sig
forall a b. (a -> b) -> a -> b
$ WoodwindSpec :: ((D, D, D) -> D -> ([(Sig, Tab)], D))
-> ((D, D, D) -> D)
-> ((D, D), (D, D), (D, D), (D, D))
-> WoodwindSpec
WoodwindSpec
    { woodwindRange :: (D, D, D) -> D -> ([(Sig, Tab)], D)
woodwindRange         = (D, D, D) -> D -> ([(Sig, Tab)], D)
hulusiRange
    , woodwindVibratoDur :: (D, D, D) -> D
woodwindVibratoDur    = D -> (D, D, D) -> D
forall a b. a -> b -> a
const D
20
    , woodwindFreqDeviation :: ((D, D), (D, D), (D, D), (D, D))
woodwindFreqDeviation = ((-D
0.03, D
0), (D
0, D
0.003), (-D
0.0015, D
0), (D
0, D
0.012))
    }


hulusiRange :: (D, D, D) -> D -> ([(Sig, Tab)], D)
hulusiRange :: (D, D, D) -> D -> ([(Sig, Tab)], D)
hulusiRange (D
iattack, D
isustain, D
idecay) D
ifreq =
        ( [ (Sig
amp1, Tab
iwt1), (Sig
amp2, Tab
iwt2), (Sig
amp3, Tab
iwt3) ]
        , D
inorm
        )
    where
        byRange :: Tuple a => [a] -> a
        byRange :: [a] -> a
byRange = D -> [(D, a)] -> a
forall a. Tuple a => D -> [(D, a)] -> a
byFreq D
ifreq ([(D, a)] -> a) -> ([a] -> [(D, a)]) -> [a] -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [D] -> [a] -> [(D, a)]
forall a b. [a] -> [b] -> [(a, b)]
zip [D
320, D
427, D
680, D
22000]

        amp1 :: Sig
amp1 = [Sig] -> Sig
forall a. Tuple a => [a] -> a
byRange [Sig
amp1_0, Sig
amp1_1, Sig
amp1_2, Sig
amp1_3]
        amp2 :: Sig
amp2 = [Sig] -> Sig
forall a. Tuple a => [a] -> a
byRange [Sig
amp2_0, Sig
amp2_1, Sig
amp2_2, Sig
amp2_3]
        amp3 :: Sig
amp3 = [Sig] -> Sig
forall a. Tuple a => [a] -> a
byRange [Sig
amp3_0, Sig
amp3_1, Sig
amp3_2, Sig
amp3_3]

        iwt1 :: Tab
iwt1 = [Tab] -> Tab
forall a. Tuple a => [a] -> a
byRange [Tab
iwt1_0, Tab
iwt1_1, Tab
iwt1_2, Tab
iwt1_3]
        iwt2 :: Tab
iwt2 = [Tab] -> Tab
forall a. Tuple a => [a] -> a
byRange [Tab
iwt2_0, Tab
iwt2_1, Tab
iwt2_2, Tab
iwt2_3]
        iwt3 :: Tab
iwt3 = [Tab] -> Tab
forall a. Tuple a => [a] -> a
byRange [Tab
iwt3_0, Tab
iwt3_1, Tab
iwt3_2, Tab
iwt3_3]

        inorm :: D
inorm = [D] -> D
forall a. Tuple a => [a] -> a
byRange [ D
inorm_0, D
inorm_1, D
inorm_2, D
inorm_3 ]

        -- range 0
        amp1_0 :: Sig
amp1_0 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.33D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
750, D
0.17D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
2000,  D
0.17D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack
            , D
5000, D
0.16D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
13000, D
0.17D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
15000, D
0.03D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain
            , D
16000, D
0.47D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
15000, D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
13500, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay
            , D
13000, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
11000, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
6000, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
150, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0
            ]
        amp2_0 :: Sig
amp2_0 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.67D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
30, D
0.33D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
9000,  D
0.05D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain
            , D
11000, D
0.05D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
12000, D
0.4D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
9500, D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain
            , D
7200, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
5600, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
3200, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay
            , D
1000, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
50, D
0.1D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0, D
0.1D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0
            ]
        amp3_0 :: Sig
amp3_0 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.33D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
0, D
0.4D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
30,  D
0.27D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack
            , D
3600, D
0.07D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2000, D
0.43D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2800, D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain
            , D
3000, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
2700, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
1500, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
150
            , D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
50, D
0.08D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0, D
0.12D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0]

        iwt1_0 :: Tab
iwt1_0 = Tab
f11
        iwt2_0 :: Tab
iwt2_0 = Tab
f31
        iwt3_0 :: Tab
iwt3_0 = Tab
f32

        inorm_0 :: D
inorm_0 = D
26985

        -- range 1
        amp1_1 :: Sig
amp1_1 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.43D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
1600, D
0.27D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
9000, D
0.3D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack
            , D
5400, D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
5500, D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
5300, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay
            , D
4200, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
3000, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
1000, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay
            , D
100, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0
            ]
        amp2_1 :: Sig
amp2_1 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.43D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
20, D
0.13D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
700,  D
0.30D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack
            , D
6300,  D
0.14D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
7500, D
0.03D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
9000, D
0.14D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain
            , D
9200, D
0.65D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
7000, D
0.14D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
6000, D
0.04D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain
            , D
5000, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
4600, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
3600, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
2400, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay
            , D
600, D
0.15D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0, D
0.05D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0
            ]
        amp3_1 :: Sig
amp3_1 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.52D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
10, D
0.26D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
1500,  D
0.22D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack
            , D
7000, D
0.03D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
9000, D
0.02D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
10500, D
0.15D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain
            , D
9700, D
0.65D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
8000, D
0.15D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
6400, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay
            , D
4600, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
2600, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
800, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay
            , D
10, D
0.1D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0, D
0.1D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0 ]
        iwt1_1 :: Tab
iwt1_1 = Tab
f11
        iwt2_1 :: Tab
iwt2_1 = Tab
f33
        iwt3_1 :: Tab
iwt3_1 = Tab
f34
        inorm_1 :: D
inorm_1 = D
36133

        -- range2:        ; for high middle range tones
        amp1_2 :: Sig
amp1_2 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.27D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
1500, D
0.22D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
8000, D
0.51D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack
            , D
9000, D
0.02D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
11000, D
0.04D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
10600, D
0.81D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain
            , D
10000, D
0.09D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
9000, D
0.04D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
7000, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay
            , D
6000, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
4000, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
2000, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
600, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0
            ]
        amp2_2 :: Sig
amp2_2 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.38D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
20, D
0.17D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
3800, D
0.45D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
5500, D
0.02D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain
            , D
6000, D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
3800, D
0.35D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
3300, D
0.09D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain
            , D
1000, D
0.04D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
750, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
600, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
350, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay
            , D
150, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
40, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0
            ]
        amp3_2 :: Sig
amp3_2 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.44D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
20, D
0.1D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
1300, D
0.08D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
750, D
0.38D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack
            , D
600, D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
800, D
0.35D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
750, D
0.1D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
550,  D
0.05D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain
            , D
50, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
30, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
15, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
7, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0
            ]
        iwt1_2 :: Tab
iwt1_2 = Tab
f35
        iwt2_2 :: Tab
iwt2_2 = Tab
f36
        iwt3_2 :: Tab
iwt3_2 = Tab
f37
        inorm_2 :: D
inorm_2 = D
27905

        -- range3:        ; for high range tones
        amp1_3 :: Sig
amp1_3 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.15D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
300, D
0.15D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
1100, D
0.15D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack
            , D
4000, D
0.15D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
9000, D
0.15D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
20000, D
0.15D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack
            , D
27000, D
0.10D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
29000, D
0.12D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
26000, D
0.56D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain
            , D
27000, D
0.32D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
24000, D
0.33D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
23000, D
0.33D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay
            , D
6000, D
0.17D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
1000, D
0.16D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0 ]
        amp2_3 :: Sig
amp2_3 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.45D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
15, D
0.15D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
250, D
0.15D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
850, D
0.15D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack
            , D
1800, D
0.1D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
2100, D
0.03D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2250, D
0.07D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2000
            , D
0.25D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2100, D
0.4D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2000, D
0.15D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
1400, D
0.1D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain
            , D
800, D
0.45D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
170, D
0.22D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
120, D
0.11D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
40, D
0.11D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay
            , D
15, D
0.11D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0
            ]
        amp3_3 :: Sig
amp3_3 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.52D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
15, D
0.15D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
400, D
0.22D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack
            , D
2050, D
0.11D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
2200, D
0.06D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
1000, D
0.15D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain
            , D
1500, D
0.13D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
1250, D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2500, D
0.04D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain
            , D
2300, D
0.12D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2000, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
1600, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay
            , D
900, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
150, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
20, D
0.1D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0, D
0.1D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0
            ]
        iwt1_3 :: Tab
iwt1_3 =  Tab
f11
        iwt2_3 :: Tab
iwt2_3 =  Tab
f12
        iwt3_3 :: Tab
iwt3_3 =  Tab
f13
        inorm_3 :: D
inorm_3 =   D
27507

        f11 :: Tab
f11 = Tab
sine
        f12 :: Tab
f12 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [(Double, Double)] -> Tab
sines2 [(Double
2, Double
1)]
        f13 :: Tab
f13 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [(Double, Double)] -> Tab
sines2 [(Double
3, Double
1)]
        f31 :: Tab
f31 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [(Double, Double)] -> Tab
sines2 [(Double
2, Double
0.46), (Double
3, Double
1), (Double
5, Double
0.31), (Double
6, Double
0.17), (Double
9, Double
0.12)]
        f32 :: Tab
f32 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [(Double, Double)] -> Tab
sines2 [(Double
4, Double
1), (Double
7, Double
0.34), (Double
8, Double
0.25), (Double
10, Double
0.19), (Double
11, Double
0.25)]
        f33 :: Tab
f33 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [(Double, Double)] -> Tab
sines2 [(Double
2, Double
1), (Double
7, Double
0.33), (Double
10, Double
0.23), (Double
11, Double
0.07)]
        f34 :: Tab
f34 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [(Double, Double)] -> Tab
sines2 [(Double
3, Double
0.77), (Double
4, Double
0.29), (Double
5, Double
1), (Double
6, Double
0.5), (Double
8, Double
0.2), (Double
9, Double
0.07)]
        f35 :: Tab
f35 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [(Double, Double)] -> Tab
sines2 [(Double
1, Double
1), (Double
2, Double
0.36), (Double
3, Double
1.1), (Double
4, Double
0.3)]
        f36 :: Tab
f36 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [(Double, Double)] -> Tab
sines2 [(Double
5, Double
1), (Double
6, Double
0.22)]
        f37 :: Tab
f37 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [(Double, Double)] -> Tab
sines2 [(Double
7, Double
1), (Double
8, Double
0.42), (Double
9, Double
0.17), (Double
10, Double
0.35), (Double
11, Double
0.2)]

------------------------------------------------------------------------
-- dizi

-- | An emulation of the dizi. Parameters
--
-- > dizi seed vibDepth attack sustain decay brightnessLevel cps =
--
-- * seed - a seed for the random signals/numbers. It's in (0, 1)
--
-- * vibDepth -  Amount of the vibrato. It's in [-1, 1]
--
-- * attack - duration of the attack.
--      Recommended value: 0.12 for slurred notes, 0.07 for tongued notes, 0.03 for short notes.
--
-- * sustain - duration of the sustain
--
-- * decay - duration of the decay.
--      Recommended value: 0.14 (0.04 for short notes).
--
-- * brightnessLevel - filter cutoff factor. It's in (0, 1). The 0 is 40 Hz, the 1 s 10240 Hz
--
-- * cps - frequency of the note
dizi :: D -> D -> D -> D -> D -> D -> D -> Sig
dizi :: D -> D -> D -> D -> D -> D -> D -> Sig
dizi = WoodwindSpec -> D -> D -> D -> D -> D -> D -> D -> Sig
woodwind (WoodwindSpec -> D -> D -> D -> D -> D -> D -> D -> Sig)
-> WoodwindSpec -> D -> D -> D -> D -> D -> D -> D -> Sig
forall a b. (a -> b) -> a -> b
$ WoodwindSpec :: ((D, D, D) -> D -> ([(Sig, Tab)], D))
-> ((D, D, D) -> D)
-> ((D, D), (D, D), (D, D), (D, D))
-> WoodwindSpec
WoodwindSpec
    { woodwindRange :: (D, D, D) -> D -> ([(Sig, Tab)], D)
woodwindRange         = (D, D, D) -> D -> ([(Sig, Tab)], D)
diziRange
    , woodwindVibratoDur :: (D, D, D) -> D
woodwindVibratoDur    = D -> (D, D, D) -> D
forall a b. a -> b -> a
const D
0.625
    , woodwindFreqDeviation :: ((D, D), (D, D), (D, D), (D, D))
woodwindFreqDeviation = ((-D
0.03, D
0), (D
0, D
0.003), (-D
0.0015, D
0), (D
0, D
0.012))
    }


diziRange :: (D, D, D) -> D -> ([(Sig, Tab)], D)
diziRange :: (D, D, D) -> D -> ([(Sig, Tab)], D)
diziRange (D
iattack, D
isustain, D
idecay) D
ifreq =
        ( [ (Sig
amp1, Tab
iwt1), (Sig
amp2, Tab
iwt2), (Sig
amp3, Tab
iwt3) ]
        , D
inorm
        )
    where
        byRange :: Tuple a => [a] -> a
        byRange :: [a] -> a
byRange = D -> [(D, a)] -> a
forall a. Tuple a => D -> [(D, a)] -> a
byFreq D
ifreq ([(D, a)] -> a) -> ([a] -> [(D, a)]) -> [a] -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [D] -> [a] -> [(D, a)]
forall a b. [a] -> [b] -> [(a, b)]
zip [D
320, D
480, D
680, D
905, D
1280, D
1710, D
22000]

        amp1 :: Sig
amp1 = [Sig] -> Sig
forall a. Tuple a => [a] -> a
byRange [Sig
amp1_1, Sig
amp1_2, Sig
amp1_3, Sig
amp1_4, Sig
amp1_5, Sig
amp1_6, Sig
amp1_7]
        amp2 :: Sig
amp2 = [Sig] -> Sig
forall a. Tuple a => [a] -> a
byRange [Sig
amp2_1, Sig
amp2_2, Sig
amp2_3, Sig
amp2_4, Sig
amp2_5, Sig
amp2_6, Sig
amp2_7]
        amp3 :: Sig
amp3 = [Sig] -> Sig
forall a. Tuple a => [a] -> a
byRange [Sig
amp3_1, Sig
amp3_2, Sig
amp3_3, Sig
amp3_4, Sig
amp3_5, Sig
amp3_6, Sig
amp3_7]

        iwt1 :: Tab
iwt1 = [Tab] -> Tab
forall a. Tuple a => [a] -> a
byRange [Tab
iwt1_1, Tab
iwt1_2, Tab
iwt1_3, Tab
iwt1_4, Tab
iwt1_5, Tab
iwt1_6, Tab
iwt1_7]
        iwt2 :: Tab
iwt2 = [Tab] -> Tab
forall a. Tuple a => [a] -> a
byRange [Tab
iwt2_1, Tab
iwt2_2, Tab
iwt2_3, Tab
iwt2_4, Tab
iwt2_5, Tab
iwt2_6, Tab
iwt2_7]
        iwt3 :: Tab
iwt3 = [Tab] -> Tab
forall a. Tuple a => [a] -> a
byRange [Tab
iwt3_1, Tab
iwt3_2, Tab
iwt3_3, Tab
iwt3_4, Tab
iwt3_5, Tab
iwt3_6, Tab
iwt3_7]

        inorm :: D
inorm = [D] -> D
forall a. Tuple a => [a] -> a
byRange [D
inorm_1, D
inorm_2, D
inorm_3, D
inorm_4, D
inorm_5, D
inorm_6, D
inorm_7 ]

        iatt :: D
iatt = D
iattack D -> D -> D
forall a. Fractional a => a -> a -> a
/ D
6
        isus :: D
isus = D
isustain D -> D -> D
forall a. Fractional a => a -> a -> a
/ D
4
        idec :: D
idec = D
iattack D -> D -> D
forall a. Fractional a => a -> a -> a
/ D
6


        -- range1:              ; for very low range tones
        amp1_1 :: Sig
amp1_1 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.4D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
1500,  D
0.6D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
10000,  D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
11000
            ,  D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
9000, D
0.4D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
8000, D
0.3D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
1500, D
0.3D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0
            ]
        amp2_1 :: Sig
amp2_1 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.4D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
200,  D
0.1D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
1000,   D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
6000
            ,  D
0.1D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
11000,  D
0.3D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
13000,  D
0.6D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
12000
            ,  D
0.6D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
1500, D
0.4D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0 ]
        amp3_1 :: Sig
amp3_1 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
30,  D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
500,  D
0.1D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
1200
            ,  D
0.7D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2200,  D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
1750, D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
250
            , D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0, D
1, D
0 ]
        iwt1_1 :: Tab
iwt1_1 =  Tab
f11
        iwt2_1 :: Tab
iwt2_1 =  Tab
f20
        iwt3_1 :: Tab
iwt3_1 =  Tab
f21
        inorm_1 :: D
inorm_1 =   D
32875

        -- range2:              ; for very low range tones
        amp1_2 :: Sig
amp1_2 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.4D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
2000,  D
0.3D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
6000,  D
0.3D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
25000
            ,  D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
24000,  D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
20000, D
0.4D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
5000
            , D
0.3D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
1500, D
0.3D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0 ]
        amp2_2 :: Sig
amp2_2 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
100,  D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
3000,  D
0.1D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
4500
            ,  D
0.4D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2000,  D
0.4D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2200,  D
0.1D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
500
            , D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
150, D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0 ]
        amp3_2 :: Sig
amp3_2 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
30,  D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
iattack, D
500,  D
0.1D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
1200
            ,  D
0.7D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
2200,  D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
isustain, D
1750, D
0.5D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
250, D
0.2D -> D -> D
forall a. Num a => a -> a -> a
*D
idecay, D
0, D
1, D
0 ]
        iwt1_2 :: Tab
iwt1_2 =  Tab
f11
        iwt2_2 :: Tab
iwt2_2 =  Tab
f22
        iwt3_2 :: Tab
iwt3_2 =  Tab
f23
        inorm_2 :: D
inorm_2 =   D
26080

        -- range3:              ; for low range tones
        amp1_3 :: Sig
amp1_3 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
iatt, D
0.000, D
iatt, D
0.219, D
iatt, D
0.500, D
iatt, D
0.889, D
iatt, D
1.035
            , D
iatt, D
0.963, D
isus, D
0.424, D
isus, D
0.135, D
isus, D
0.108, D
isus, D
0.204
            , D
idec, D
0.445, D
idec, D
0.531, D
idec, D
0.513, D
idec, D
0.365, D
idec, D
0.053, D
idec, D
0
            ]
        amp2_3 :: Sig
amp2_3 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
iatt, D
0.000, D
iatt, -D
0.106, D
iatt, -D
0.112, D
iatt, -D
0.187, D
iatt
            , -D
0.091, D
iatt, D
0.056, D
isus, D
0.558, D
isus, D
0.901, D
isus, D
0.904, D
isus
            , D
0.729, D
idec, D
0.303, D
idec, D
0.057, D
idec, D
0.016, D
idec, -D
0.076, D
idec, -D
0.016, D
idec, D
0
            ]
        amp3_3 :: Sig
amp3_3 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
iatt, D
1.000, D
iatt, D
0.607, D
iatt, -D
0.116, D
iatt, -D
0.205, D
iatt, -D
0.530, D
iatt
            , -D
0.195, D
isus, D
0.601, D
isus, D
0.478, D
isus, -D
0.371, D
isus, -D
0.916, D
idec
            , -D
0.782, D
idec, -D
0.107, D
idec, -D
0.811, D
idec, -D
0.189, D
idec, -D
0.036, D
idec, D
0
            ]
        iwt1_3 :: Tab
iwt1_3 =  Tab
f24
        iwt2_3 :: Tab
iwt2_3 =  Tab
f25
        iwt3_3 :: Tab
iwt3_3 =  Tab
f26
        inorm_3 :: D
inorm_3 =   D
24364

        -- range4:              ; for low mid-range tones
        amp1_4 :: Sig
amp1_4 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
iatt, D
0.000, D
iatt, D
0.049, D
iatt, D
0.027, D
iatt, D
0.005, D
iatt
            , -D
0.020, D
iatt, D
0.378, D
isus, D
0.925, D
isus, D
1.032, D
isus, D
1.106, D
isus
            , D
0.915, D
idec, D
0.858, D
idec, D
0.722, D
idec, D
0.250, D
idec, -D
0.002, D
idec
            , D
0.004, D
idec, D
0
            ]
        amp2_4 :: Sig
amp2_4 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
iatt, D
0.000, D
iatt, -D
0.182, D
iatt, -D
0.029, D
iatt, D
0.397, D
iatt
            , D
2.065, D
iatt, D
3.136, D
isus, D
0.250, D
isus, -D
0.685, D
isus, -D
1.369, D
isus
            , -D
1.176, D
idec, -D
1.023, D
idec, -D
0.212, D
idec, D
0.810, D
idec, D
0.469, D
idec
            , D
0.018, D
idec, D
0
            ]
        amp3_4 :: Sig
amp3_4 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
iatt, D
1.000, D
iatt, D
0.007, D
iatt, D
1.039, D
iatt, D
0.466, D
iatt
            , D
0.627, D
iatt, D
4.181, D
isus, -D
2.481, D
isus, -D
2.529, D
isus
            , -D
4.838, D
isus, D
0.137, D
idec, -D
2.823, D
idec, -D
1.899, D
idec
            , D
4.910, D
idec, D
0.319, D
idec, D
0.039, D
idec, D
0
            ]
        iwt1_4 :: Tab
iwt1_4 =  Tab
f27
        iwt2_4 :: Tab
iwt2_4 =  Tab
f28
        iwt3_4 :: Tab
iwt3_4 =  Tab
f29
        inorm_4 :: D
inorm_4 = D
27832

        -- range5:              ; for high mid-range tones
        amp1_5 :: Sig
amp1_5 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
iatt, D
0.000, D
iatt, D
0.000, D
iatt, D
0.018, D
iatt, D
0.000, D
iatt
            , D
0.450, D
iatt, D
1.130, D
isus, D
1.475, D
isus, D
1.682, D
isus, D
1.533, D
isus
            , D
1.243, D
idec, D
0.945, D
idec, D
0.681, D
idec, D
0.210, D
idec, D
0.046, D
idec
            , D
0.004, D
idec, D
0
            ]
        amp2_5 :: Sig
amp2_5 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
iatt, D
0.000, D
iatt, D
0.102, D
iatt, D
0.196, D
iatt, D
1.000, D
iatt
            , D
1.108, D
iatt, -D
0.024, D
isus, -D
1.557, D
isus, -D
2.443, D
isus
            , -D
1.553, D
isus, -D
0.979, D
idec, -D
0.268, D
idec, -D
0.271, D
idec
            , -D
0.015, D
idec, D
0.017, D
idec, D
0.108, D
idec, D
0
            ]
        amp3_5 :: Sig
amp3_5 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
iatt, D
1.000, D
iatt, D
0.423, D
iatt, D
0.287, D
iatt, D
0.000, D
iatt
            , -D
0.987, D
iatt, -D
0.621, D
isus, D
3.030, D
isus, D
2.349, D
isus, D
3.075, D
isus
            , D
0.331, D
idec, D
0.994, D
idec, -D
1.319, D
idec, -D
0.378, D
idec, D
0.000, D
idec
            , -D
0.023, D
idec, D
0
            ]
        iwt1_5 :: Tab
iwt1_5 =  Tab
f30
        iwt2_5 :: Tab
iwt2_5 =  Tab
f31
        iwt3_5 :: Tab
iwt3_5 =  Tab
f32
        inorm_5 :: D
inorm_5 =   D
27918

        -- range6:              ; for high range tones
        amp1_6 :: Sig
amp1_6 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
iatt, D
0.000, D
iatt, D
0.322, D
iatt, D
0.115, D
iatt, D
0.090, D
iatt
            , -D
0.148, D
iatt, D
1.743, D
isus, D
2.079, D
isus, D
0.844, D
isus
            , D
0.889, D
isus, D
1.914, D
idec, D
0.718, D
idec, D
0.206, D
idec
            , D
0.361, D
idec, -D
0.278, D
idec, -D
0.272, D
idec, D
0
            ]
        amp2_6 :: Sig
amp2_6 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
iatt, D
1.000, D
iatt, D
2.675, D
iatt, D
1.579, D
iatt, -D
0.879, D
iatt
            , -D
4.025, D
iatt, -D
9.342, D
isus, D
4.570, D
isus, -D
3.372, D
isus
            , -D
2.904, D
isus, D
0.755, D
idec, D
5.796, D
idec, -D
3.764, D
idec
            , D
2.193, D
idec, D
0.718, D
idec, D
1.029, D
idec, D
0 ]
        amp3_6 :: Sig
amp3_6 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
iatt, D
0.000, D
iatt, -D
0.334, D
iatt, -D
0.108, D
iatt, D
0.028, D
iatt
            , D
0.765, D
iatt, -D
0.874, D
isus, -D
1.222, D
isus, D
0.236, D
isus
            , D
0.187, D
isus, -D
1.036, D
idec, D
0.276, D
idec, D
0.532, D
idec
            , -D
0.204, D
idec, D
0.311, D
idec, D
0.283, D
idec, D
0 ]
        iwt1_6 :: Tab
iwt1_6 =  Tab
f33
        iwt2_6 :: Tab
iwt2_6 =  Tab
f34
        iwt3_6 :: Tab
iwt3_6 =  Tab
f35
        inorm_6 :: D
inorm_6 =   D
23538

        -- range7:              ; for very high range tones
        amp1_7 :: Sig
amp1_7 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
iatt, D
0.000, D
iatt, -D
0.071, D
iatt, D
0.017, D
iatt, D
0.134, D
iatt
            , -D
0.068, D
iatt, D
0.192, D
isus, D
1.375, D
isus, D
1.875, D
isus, D
1.463, D
isus
            , D
1.446, D
idec, D
0.932, D
idec, D
0.561, D
idec, D
0.100, D
idec, D
0.036, D
idec
            , D
0.000, D
idec, D
0
            ]
        amp2_7 :: Sig
amp2_7 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
iatt, D
1.000, D
iatt, D
3.541, D
iatt, D
3.665, D
iatt, -D
0.651, D
iatt
            , D
1.017, D
iatt, D
1.331, D
isus, -D
4.611, D
isus, -D
2.534, D
isus, -D
4.241, D
isus
            , -D
2.738, D
idec, -D
0.609, D
idec, -D
1.065, D
idec, D
1.122, D
idec, D
0.605, D
idec
            , D
0.093, D
idec, D
0 ]
        amp3_7 :: Sig
amp3_7 = Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg
            [ D
0, D
iatt, D
0.000, D
iatt, D
0.061, D
iatt, D
0.093, D
iatt, D
0.323, D
iatt
            , D
1.011, D
iatt, D
0.819, D
isus, D
0.162, D
isus, -D
0.152, D
isus, D
0.080, D
isus
            , -D
0.139, D
idec, D
0.051, D
idec, -D
0.054, D
idec, -D
0.019, D
idec, -D
0.013, D
idec
            , D
0.003, D
idec, D
0 ]
        iwt1_7 :: Tab
iwt1_7 =  Tab
f36
        iwt2_7 :: Tab
iwt2_7 =  Tab
f37
        iwt3_7 :: Tab
iwt3_7 =  Tab
f38
        inorm_7 :: D
inorm_7 =   D
30675

        f11 :: Tab
f11 = Tab
sine

        f20 :: Tab
f20 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
0, Double
1, Double
0.21 ]
        f21 :: Tab
f21 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
0, Double
0, Double
0, Double
1, Double
1.3, Double
0.66, Double
0.9, Double
0.5, Double
0.8, Double
0.6, Double
1.2, Double
0.5, Double
0.8, Double
0.6, Double
0.75, Double
0.6, Double
0.9, Double
1.2, Double
0.9, Double
1.1, Double
0.85, Double
0.9, Double
0.4, Double
0.3, Double
0.45, Double
0.3, Double
0.25, Double
0.15 ]
        f22 :: Tab
f22 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
0, Double
1, Double
0, Double
0.33 ]
        f23 :: Tab
f23 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
0, Double
0, Double
0.75, Double
0, Double
0.28, Double
0.45, Double
0.36, Double
1, Double
0.54, Double
0.5, Double
0.81, Double
1, Double
0.95, Double
0.9, Double
0.08, Double
0.24, Double
0.45, Double
0.41, Double
0.25, Double
0.07 ]
        f24 :: Tab
f24 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
20742, Double
2870, Double
929, Double
899, Double
1567, Double
958, Double
318, Double
1168, Double
838, Double
781, Double
192 ]
        f25 :: Tab
f25 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
18419, Double
4615, Double
1255, Double
689, Double
3851, Double
1889, Double
498, Double
3127, Double
3041, Double
2262, Double
422, Double
136 ]
        f26 :: Tab
f26 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
1700, Double
331, Double
615, Double
259, Double
188, Double
164, Double
79, Double
393, Double
191, Double
108 ]
        f27 :: Tab
f27 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
17040, Double
1836, Double
3609, Double
4228, Double
3600, Double
1910, Double
9599, Double
3722, Double
925, Double
862, Double
1292, Double
227 ]
        f28 :: Tab
f28 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
4206, Double
283, Double
125, Double
465, Double
341, Double
168, Double
201, Double
196, Double
199, Double
140 ]
        f29 :: Tab
f29 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
24, Double
22, Double
129, Double
209, Double
54, Double
127 ]
        f30 :: Tab
f30 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
13283, Double
1588, Double
2948, Double
337, Double
9009, Double
1040, Double
2175, Double
222 ]
        f31 :: Tab
f31 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
3831, Double
572, Double
332, Double
252, Double
209, Double
243, Double
91 ]
        f32 :: Tab
f32 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
61, Double
59, Double
120, Double
196, Double
26 ]
        f33 :: Tab
f33 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
22605, Double
2267, Double
3470, Double
1604, Double
2849, Double
86 ]
        f34 :: Tab
f34 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
97, Double
92, Double
113, Double
75, Double
63 ]
        f35 :: Tab
f35 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
21615, Double
1982, Double
3912, Double
1422, Double
2987 ]
        f36 :: Tab
f36 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
17863, Double
3388, Double
257 ]
        f37 :: Tab
f37 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
97, Double
136, Double
50 ]
        f38 :: Tab
f38 = Tab -> Tab
skipNorm (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ WaveSpec -> Tab
sines [ Double
28207, Double
1745, Double
499 ]