AtlatestRepositorysigil-dsp
1
;;; (sigil dsp osc) - Oscillators2
;;;3
;;; Wavetable, bandlimited, FM, and phase oscillators.4
;;;5
;;; ```scheme6
;;; (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 sample10
;;; ```12
(define-library (sigil dsp osc)13
(export14
make-oscillator15
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
(begin26
(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, fm64
(define (make-oscillator type freq amp . opts)65
(case type66
((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))))))