aboutsummaryrefslogtreecommitdiffstats
path: root/lib/time.moon
blob: 4fe5d7c31ca3b6d9e86ab8ba9d8077dfe10bd946 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import Op, Const from require 'base'

class lfo extends Op
  tau = math.pi * 2
  new: (...) =>
    super ...
    @phase = 0


  default_wave = Const 'str', 'sin'
  setup: (@freq, @wave=default_wave) =>

  update: (dt) =>
    @phase += dt * @freq\get!
    @value = switch @wave\get!
      when 'sin' then .5 + .5 * math.cos @phase * tau
      when 'saw' then @phase % 1
      when 'tri' then math.abs (2*@phase % 2) - 1
      else error "unknown wave type"

class tick extends Op
  new: (...) =>
    super ...
    @phase = 0

  setup: (@freq) =>

  update: (dt) =>
    @phase += dt / @freq\get!
    @value = math.floor @phase

{
  :lfo
  :tick
}