Oscillators are continuously varying patterns. Unless otherwise stated, oscillators give minimum values of
0 and maximum values of
1, and repeat once per cycle.
Oscillators are continuous patterns, which means they don't have any structure, and must be used with a pattern that does. For example
d1 $ sound "bd*8" >| pan sine won't work well, because the
>| operator instructs Tidal to take structure from the right, and
sine doesn't have any structure, so Tidal will simply trigger events at a fixed rate (depending on your configuration, this might be very fast).
d1 $ sound "bd*8" |> pan sine is better, because
|> takes structure from the left, so eight kick drums will play, with pan values sampled from the sine wave for each of the eight events. Where a pattern has the type
Fractional a => Pattern a, that means that they can be used both as floating point numbers or (rational) time values.
sine is a sinusoïdal wave. Playing this example, you should hear the sound slowly moving from your left to your right speaker:
cosine wave, is a
sine shifted in time by a quarter of a cycle. It sounds similar to the
A Square wave, starting at 0, then going up to 1 halfway through a cycle.
A triangle wave, starting at 0, then linearly rising to 1 halfway through a cycle, then down again:
A sawtooth wave starting at 0, then linearly rising to 1 over one cycle, then jumping back to 0:
An inverted sawtooth, starting at 1, then linearly falling to 0 over one cycle, then jumping back to 1:
An infinitely detailed stream of (pseudo-)random numbers. See the
rand reference page for more details.
A function from an integer (giving the maximum) to a stream of (pseudo-)random integer numbers. For more details, head to the
rand reference page:
By default, the oscillators will output values scaled between
1. You might want to use bigger or smaller values. You might want, for instance, to modulate the frequency of a filter or select a random midi note between
127. To do so, you can use the
Oscillators are patterns! It means that you can speed them up or down using the same function as usual (
Notice that most of the time, the speed up/down will be in sync with your pattern. How convenient!