File: generators.expr

package info (click to toggle)
python-pyo 1.0.6-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 52,332 kB
  • sloc: python: 135,133; ansic: 127,822; javascript: 16,116; sh: 395; makefile: 388; cpp: 242
file content (89 lines) | stat: -rw-r--r-- 2,225 bytes parent folder | download | duplicates (2)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// Sine wave oscillator
// usage: (osc freq phase)
(define osc (
        sin (* twopi (~ $1 $2))
    )
)

// Triangular wave oscillator
// usage: (tri freq phase)
(define tri (
        (let #ph (~ $1 $2))
        (- (* (min #ph (- 1 #ph)) 4) 1)
    )
)

// Square wave oscillator
// usage: (square freq phase)
(define square (
        (- (* (< (~ $1 $2) 0.5) 2) 1)
    )
)

// Pulse-Width-Modulation oscillator
// usage: (pwm freq duty)
(define pwm (
        (- (* (< (~ $1) $2) 2) 1)
    )
)

// White noise generator
// usage: (noise gain)
(define noise (
        (randf (neg $1) $1)
    )
)

// Sine wave oscillator with self feedback
// usage: (xosc freq feed)
(define xosc (
        (let #xsin
            (sin (+ (* (~ $1) (twopi)) (* #xsin $2)))
        )
        #xsin
    )
)

// Band-limited sawtooth oscillator
// usage: (blsaw freq sharp)
(define blsaw (
        (let #sr-over-four (/ sr 4))
        (let #freq (max 0.00001 (min #sr-over-four $1)))
        (let #max-harms (/ #sr-over-four #freq))
        (let #numh (min (+ (* (max 0 (min 1 $2)) 46) 4) #max-harms))
        (let #phase (- (* (~ #freq) 2) 1))
        (- #phase (/ (tanh (* #phase #numh)) (tanh #numh)))
    )
)

// Band-limited square wave oscillator
// usage: (blsquare freq sharp)
(define blsquare (
        (let #sr-over-four (/ sr 4))
        (let #freq (max 0.00001 (min #sr-over-four $1)))
        (let #max-harms (/ (* #sr-over-four 0.5) #freq))
        (let #numh (min (+ (* (max 0 (min 1 $2)) 46) 4) #max-harms))
        (let #val (tanh (* (sin (* twopi (~ #freq))) #numh)))
        (* #val (/ 1 (/ pi 2)))
    )
)

// Band-limited triangular oscillator
// usage: (bltri freq sharp)
(define bltri (
        (let #sr-over-four (/ sr 4))
        (let #freq (max 0.00001 (min #sr-over-four $1)))
        (let #max-harms (/ #sr-over-four #freq))
        (let #sharp (max 0 (min 1 $2)))
        (let #numh (if
            (> (* #sharp 36) #max-harms)
            (/ #max-harms 36)
            #sharp
        ))
        (let #p1 (~ #freq))
        (let #v1 (* (tan (sin (* twopi #p1))) (/ 1 (/ pi 2))))
        (let #p2 (wrap (+ #p1 0.25)))
        (let #v2 (- (* 4 (- 0.5 (abs (- #p2 0.5)))) 1))
        (+ #v1 (* (- #v2 #v1) #numh))
    )
)