Moduletidal-core-1.10.2Haskell2010
Sound.Tidal.Core
Contents
Synopsis
- value sig
- value sine
- value sine2
- value cosine
- value cosine2
- value saw
- value saw2
- value isaw
- value isaw2
- value tri
- value tri2
- value square
- value square2
- value envL
- value envLR
- value envEq
- value envEqR
- class Unionable
- value |+|
- value |+
- value +|
- value ||+
- value |++|
- value |++
- value ++|
- value ||++
- value |/|
- value |/
- value /|
- value ||/
- value |*|
- value |*
- value *|
- value ||*
- value |-|
- value |-
- value -|
- value ||-
- value |%|
- value |%
- value %|
- value ||%
- value |**|
- value |**
- value **|
- value ||**
- value |>|
- value |>
- value >|
- value ||>
- value |<|
- value |<
- value <|
- value ||<
- value #
- value fromList
- value fastFromList
- value listToPat
- value fromMaybes
- value run
- value _run
- value scan
- value _scan
- value append
- value cat
- value slowCat
- value slowcat
- value slowAppend
- value slowappend
- value fastAppend
- value fastappend
- value fastCat
- value fastcat
- value timeCat
- value timecat
- value overlay
- value mono
- value stack
- value <~
- value ~>
- value slowSqueeze
- value sparsity
- value zoom
- value zoompat
- value zoomArc
- value fastGap
- value densityGap
- value compress
- value compressTo
- value repeatCycles
- value _repeatCycles
- value fastRepeatCycles
- value every
- value _every
- value every'
- value _every'
- value foldEvery
- value when
- value whenT
- value _getP_
- value _getP
- value _cX
- value _cX_
- value cF
- value cF_
- value cF0
- value cN
- value cN_
- value cN0
- value cI
- value cI_
- value cI0
- value cB
- value cB_
- value cB0
- value cR
- value cR_
- value cR0
- value cT
- value cT0
- value cT_
- value cS
- value cS_
- value cS0
- value in0
- value in1
- value in2
- value in3
- value in4
- value in5
- value in6
- value in7
- value in8
- value in9
- value in10
- value in11
- value in12
- value in13
- value in14
- value in15
- value in16
- value in17
- value in18
- value in19
- value in20
- value in21
- value in22
- value in23
- value in24
- value in25
- value in26
- value in27
- value in28
- value in29
- value in30
- value in31
- value in32
- value in33
- value in34
- value in35
- value in36
- value in37
- value in38
- value in39
- value in40
- value in41
- value in42
- value in43
- value in44
- value in45
- value in46
- value in47
- value in48
- value in49
- value in50
- value in51
- value in52
- value in53
- value in54
- value in55
- value in56
- value in57
- value in58
- value in59
- value in60
- value in61
- value in62
- value in63
- value in64
- value in65
- value in66
- value in67
- value in68
- value in69
- value in70
- value in71
- value in72
- value in73
- value in74
- value in75
- value in76
- value in77
- value in78
- value in79
- value in80
- value in81
- value in82
- value in83
- value in84
- value in85
- value in86
- value in87
- value in88
- value in89
- value in90
- value in91
- value in92
- value in93
- value in94
- value in95
- value in96
- value in97
- value in98
- value in99
- value in100
- value in101
- value in102
- value in103
- value in104
- value in105
- value in106
- value in107
- value in108
- value in109
- value in110
- value in111
- value in112
- value in113
- value in114
- value in115
- value in116
- value in117
- value in118
- value in119
- value in120
- value in121
- value in122
- value in123
- value in124
- value in125
- value in126
- value in127
- Packagetidal-core-1.10.2
- Exports252
- LanguageHaskell2010
- LicenceGPL-3.0-only
- SourceCore.hs
Elemental patterns
sine - unipolar sinewave. A pattern of continuous values following a
sinewave with frequency of one cycle, and amplitude from 0 to 1.
sine2 - bipolar sinewave. A pattern of continuous values following a
sinewave with frequency of one cycle, and amplitude from -1 to 1.
cosine - unipolar cosine wave. A pattern of continuous values
following a cosine with frequency of one cycle, and amplitude from
0 to 1. Equivalent to 0.25 ~> sine.
cosine2 - bipolar cosine wave. A pattern of continuous values
following a cosine with frequency of one cycle, and amplitude from
-1 to 1. Equivalent to 0.25 ~> sine2.
saw - unipolar ascending sawtooth wave. A pattern of continuous values
following a sawtooth with frequency of one cycle, and amplitude from
0 to 1.
saw2 - bipolar ascending sawtooth wave. A pattern of continuous values
following a sawtooth with frequency of one cycle, and amplitude from
-1 to 1.
isaw like saw, but a descending (inverse) sawtooth.
isaw2 like saw2, but a descending (inverse) sawtooth.
tri - unipolar triangle wave. A pattern of continuous values
following a triangle wave with frequency of one cycle, and amplitude from
0 to 1.
tri2 - bipolar triangle wave. A pattern of continuous values
following a triangle wave with frequency of one cycle, and amplitude from
-1 to 1.
square - unipolar square wave. A pattern of continuous values
following a square wave with frequency of one cycle, and amplitude from
0 to 1.
| square is like sine, for square waves.
square2 - bipolar square wave. A pattern of continuous values
following a square wave with frequency of one cycle, and amplitude from
-1 to 1.
like envL but reversed.
'Equal power' version of env, for gain-based transitions
Equal power reversed
Pattern algebra
Methods
union :: a -> a -> a
Constructing patterns
Turns a list of values into a pattern, playing one of them per cycle. The following are equivalent:
d1 $ n (fromList [0, 1, 2]) # s "superpiano"
d1 $ n "<0 1 2>" # s "superpiano"Turns a list of values into a pattern, playing all of them per cycle. The following are equivalent:
d1 $ n (fastFromList [0, 1, 2]) # s "superpiano"
d1 $ n "[0 1 2]" # s "superpiano"A synonym for fastFromList
A pattern of whole numbers from 0 to the given number, in a single cycle.
Can be used used to run through a folder of samples in order:
d1 $ n (run 8) # sound "amencutup"The first parameter to run can be given as a pattern:
d1 $ n (run "<4 8 4 6>") # sound "amencutup"Similar to run, but starts from 1 for the first cycle, successively
adds a number until it gets up to n.
> d1 $ n (scan 8) # sound "amencutup"
Combining patterns
Alternate between cycles of the two given patterns > d1 $ append (sound "bd*2 sn") (sound "arpy jvbass*2")
Like append, but for a list of patterns. Interlaces them, playing the first cycle from each in turn, then the second cycle from each, and so on. It concatenates a list of patterns into a new pattern; each pattern in the list will maintain its original duration. For example:
d1 $ cat [sound "bd*2 sn", sound "arpy jvbass*2"]
d1 $ cat [sound "bd*2 sn", sound "arpy jvbass*2", sound "drum*2"]
d1 $ cat [sound "bd*2 sn", sound "jvbass*3", sound "drum*2", sound "ht mt"]Alias for cat
Alias for append
Like append, but twice as fast > d1 $ fastAppend (sound "bd*2 sn") (sound "arpy jvbass*2")
The same as cat, but speeds up the result by the number of patterns there are, so the cycles from each are squashed to fit a single cycle.
d1 $ fastcat [sound "bd*2 sn", sound "arpy jvbass*2"]
d1 $ fastcat [sound "bd*2 sn", sound "arpy jvbass*2", sound "drum*2"]
d1 $ fastcat [sound "bd*2 sn", sound "jvbass*3", sound "drum*2", sound "ht mt"]Alias for fastCat
Similar to fastCat, but each pattern is given a relative duration.
You provide proportionate sizes of the patterns to each other for when they’re
concatenated into one cycle. The larger the value in the list, the larger
relative size the pattern takes in the final loop. If all values are equal
then this is equivalent to fastcat (e.g. the following two code fragments are
equivalent).
d1 $ fastcat [s "bd*4", s "hh27*8", s "superpiano" # n 0]d1 $ timeCat [ (1, s "bd*4")
, (1, s "hh27*8")
, (1, s "superpiano" # n 0)
]Alias for timeCat
overlay combines two Patterns into a new pattern, so that their events
are combined over time. For example, the following two lines are equivalent:
d1 $ sound (overlay "bd sn:2" "cp*3")
d1 $ sound "[bd sn:2, cp*3]"overlay is equal to <>,
(<>) :: Semigroup a => a -> a -> awhich can thus be used as an infix operator equivalent of overlay:
d1 $ sound ("bd sn:2" <> "cp*3")Serialises a pattern so there's only one event playing at any one time, making it monophonic. Events which start/end earlier are given priority.
stack combines a list of Patterns into a new pattern, so that their events are combined over time, i.e., all of the patterns in the list are played simultaneously.
d1 $ stack [
sound "bd bd*2",
sound "hh*2 [sn cp] cp future*4",
sound "arpy" +| n "0 .. 15"
]This is particularly useful if you want to apply a function or synth control pattern to multiple patterns at once:
d1 $ whenmod 5 3 (striate 3) $ stack [
sound "bd bd*2",
sound "hh*2 [sn cp] cp future*4",
sound "arpy" +| n "0 .. 15"
] # speed "[[1 0.8], [1.5 2]*2]/3"Manipulating time
Shifts a pattern back in time by the given amount, expressed in cycles
Shifts a pattern forward in time by the given amount, expressed in cycles
Slow down a pattern by the factors in the given time pattern, "squeezing" the pattern to fit the slot given in the time pattern. It is the slow analogue to fastSqueeze.
If the time pattern only has a single value in a cycle, slowSqueeze becomes equivalent to slow. These are equivalent:
d1 $ slow "<2 4>" $ s "bd*8"
d1 $ slowSqueeze "<2 4>" $ s "bd*8"When the time pattern has multiple values, however, the behavior is a little different. Instead, a slowed version of the pattern will be made for each value in the time pattern, and they’re all combined together in a cycle according to the structure of the time pattern. For example, these are equivalent:
d1 $ slowSqueeze "2 4 8 16" $ s "bd*8"
d1 $ s "bd*4 bd*2 bd bd/2"as are these:
d1 $ slowSqueeze "2 4 [8 16]" $ s "bd*8"
d1 $ s "bd*4 bd*2 [bd bd/2]"An alias for slow
Plays a portion of a pattern, specified by a time arc (start and end time). The new resulting pattern is played over the time period of the original pattern.
d1 $ zoom (0.25, 0.75) $ sound "bd*2 hh*3 [sn bd]*2 drum"In the pattern above, zoom is used with an arc from 25% to 75%. It is
equivalent to:
d1 $ sound "hh*3 [sn bd]*2"Here’s an example of it being used with a conditional:
d1 $ every 4 (zoom (0.25, 0.75)) $ sound "bd*2 hh*3 [sn bd]*2 drum"fastGap is similar to fast but maintains its cyclic alignment, i.e.,
rather than playing the pattern multiple times, it instead leaves a gap in
the remaining space of the cycle. For example, fastGap 2 p would squash the
events in pattern p into the first half of each cycle (and the second halves
would be empty). The factor should be at least 1.
An alias for fastGap
compress takes a pattern and squeezes it within the specified time span (i.e.
the ‘arc’). The new resulting pattern is a sped up version of the original.
d1 $ compress (1/4, 3/4) $ s "[bd sn]!"In the above example, the pattern will play in an arc spanning from 25% to 75% of the duration of a cycle. It is equivalent to:
d1 $ s "~ [bd sn]! ~"Another example, where all events are different:
d1 $ compress (1/4, 3/4) $ n (run 4) # s "arpy"It differs from zoom in that it preserves the original pattern but it speeds up its events so to match with the new time period.
Higher order functions
Functions which work on other functions (higher order functions)
every n f p applies the function f to p, but only affects
every n cycles.
It takes three inputs: how often the function should be applied (e.g. 3 to apply it every 3 cycles), the function to be applied, and the pattern you are applying it to. For example: to reverse a pattern every three cycles (and for the other two play it normally)
d1 $ every 3 rev $ n "0 1 [~ 2] 3" # sound "arpy"Note that if the function you’re applying requires additional parameters itself (such as fast 2 to make a pattern twice as fast), then you’ll need to wrap it in parenthesis, like so:
d1 $ every 3 (fast 2) $ n "0 1 [~ 2] 3" # sound "arpy"Otherwise, the every function will think it is being passed too many parameters.
every' n o f p is like every n f p but with an offset of o cycles.
For example, every' 3 0 (fast 2) will speed up the cycle on cycles 0,3,6,…
whereas every' 3 1 (fast 2) will transform the pattern on cycles 1,4,7,….
With this in mind, setting the second argument of every' to 0 gives the
equivalent every function. For example, every 3 is equivalent to every' 3 0.
The every functions can be used to silence a full cycle or part of a cycle
by using silent or mask "~". Mask provides additional flexibility to turn on/off
individual steps.
d1 $ every 3 silent $ n "2 9 11 2" # s "hh27"
d1 $ every 3 (mask "~") $ n "2 9 10 2" # s "hh27"
d1 $ every 3 (mask "0 0 0 0") $ n "2 9 11 2" # s "hh27"foldEvery ns f p applies the function f to p, and is applied for
each cycle in ns.
It is similar to chaining multiple every functions together. It transforms
a pattern with a function, once per any of the given number of cycles. If a
particular cycle is the start of more than one of the given cycle periods, then
it it applied more than once.
d1 $ foldEvery [5,3] (|+ n 1) $ s "moog" # legato 1The first moog samples are tuned to C2, C3 and C4. Note how on cycles that are multiples of 3 or 5 the pitch is an octave higher, and on multiples of 15 the pitch is two octaves higher, as the transformation is applied twice.
The given pattern transformation is applied only when the given test function
returns True. The test function will be called with the current cycle as
a number.
d1 $ when (elem '4' . show)
(striate 4)
$ sound "hh hc"The above will only apply striate 4 to the pattern if the current
cycle number contains the number 4. So the fourth cycle will be
striated and the fourteenth and so on. Expect lots of striates after
cycle number 399.
Like when, but works on continuous time values rather than cycle numbers.
The following will apply # speed 2 only when the remainder of the current
Time divided by 2 is less than 0.5:
d1 $ whenT ((< 0.5) . (flip Data.Fixed.mod' 2))
(# speed 2)
$ sound "hh(4,8) hc(3,8)"