AtlatestRepositorysigil-dsp

sigil-dsp / tree / src / sigil / dsposc.sgl

1;;; (sigil dsp osc) - Oscillators
2;;;
3;;; Wavetable, bandlimited, FM, and phase oscillators.
4;;;
5;;; ```scheme
6;;; (import (sigil dsp core) (sigil dsp osc))
7;;; (dsp-init)
8;;; (define osc (make-oscillator 'sine 440.0 0.5))
9;;; (osc-compute osc) ; => one sample
10;;; ```
12(define-library (sigil dsp osc)
13 (export
14 make-oscillator
15 make-osc make-osc-ft osc-compute osc-set-freq! osc-set-amp!
16 make-posc3 posc3-compute posc3-set-freq! posc3-set-amp!
17 make-blsaw blsaw-compute blsaw-set-freq! blsaw-set-amp!
18 make-blsquare blsquare-compute blsquare-set-freq! blsquare-set-amp!
19 make-bltriangle bltriangle-compute bltriangle-set-freq! bltriangle-set-amp!
20 make-fosc fosc-compute fosc-set-freq! fosc-set-index! fosc-set-amp!
21 make-phasor phasor-compute phasor-set-freq!
22 make-ks ks-compute ks-trigger!
23 ks-set-freq! ks-set-decay! ks-set-excite-gain!)
25 (begin
26 (define-native make-osc)
27 (define-native make-osc-ft)
28 (define-native (osc-compute osc))
29 (define-native (osc-set-freq! osc freq))
30 (define-native (osc-set-amp! osc amp))
31 (define-native make-posc3)
32 (define-native (posc3-compute osc))
33 (define-native (posc3-set-freq! osc freq))
34 (define-native (posc3-set-amp! osc amp))
35 (define-native (make-blsaw freq amp))
36 (define-native (blsaw-compute osc))
37 (define-native (blsaw-set-freq! osc freq))
38 (define-native (blsaw-set-amp! osc amp))
39 (define-native make-blsquare)
40 (define-native (blsquare-compute osc))
41 (define-native (blsquare-set-freq! osc freq))
42 (define-native (blsquare-set-amp! osc amp))
43 (define-native (make-bltriangle freq amp))
44 (define-native (bltriangle-compute osc))
45 (define-native (bltriangle-set-freq! osc freq))
46 (define-native (bltriangle-set-amp! osc amp))
47 (define-native (make-fosc freq car mod indx amp))
48 (define-native (fosc-compute osc))
49 (define-native (fosc-set-freq! osc freq))
50 (define-native (fosc-set-index! osc indx))
51 (define-native (fosc-set-amp! osc amp))
52 (define-native make-phasor)
53 (define-native (phasor-compute phasor))
54 (define-native (phasor-set-freq! phasor freq))
55 (define-native (make-ks freq decay excite-gain))
56 (define-native (ks-compute ks gate))
57 (define-native (ks-trigger! ks))
58 (define-native (ks-set-freq! ks freq))
59 (define-native (ks-set-decay! ks decay))
60 (define-native (ks-set-excite-gain! ks gain))
62 ;;; Create an oscillator by type.
63 ;;; Types: sine, saw, square, triangle, fm
64 (define (make-oscillator type freq amp . opts)
65 (case type
66 ((sine) (make-osc freq amp))
67 ((saw) (make-blsaw freq amp))
68 ((square) (if (null? opts)
69 (make-blsquare freq amp)
70 (make-blsquare freq amp (car opts))))
71 ((triangle) (make-bltriangle freq amp))
72 ((fm) (if (>= (length opts) 2)
73 (make-fosc freq (car opts) (cadr opts)
74 (if (>= (length opts) 3) (caddr opts) 1.0)
75 amp)
76 (error "make-oscillator: fm requires car and mod ratios" opts)))
77 (else (error "make-oscillator: unknown type" type))))))