Mercurial > hg > may
changeset 409:0321896e7bbd resample
Add simple waveform generators (square, saw, triangle)
author | Chris Cannam |
---|---|
date | Fri, 27 Sep 2013 16:40:46 +0100 |
parents | 1184df2a65a5 |
children | ad99cd603b75 |
files | src/may/stream/waves.yeti |
diffstat | 1 files changed, 34 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/may/stream/waves.yeti Fri Sep 27 16:40:46 2013 +0100 @@ -0,0 +1,34 @@ + +// Simple (rather than efficient) definitions of bandlimited wave +// shapes + +module may.stream.waves; + +{ sinusoid } = load may.stream.syntheticstream; +{ sum, scaledBy } = load may.stream.manipulate; + +square rate freq = + sum + (map do n: + m = n*2 + 1; + scaledBy (1/m) + (sinusoid rate (m * freq)) + done [0 .. int (rate/4 / freq) - 1]); + +saw rate freq = + sum + (map do n: + scaledBy if n % 2 == 0 then -1/n else 1/n fi + (sinusoid rate (n * freq)) + done [1 .. int (rate/2 / freq)]); + +triangle rate freq = + sum + (map do n: + m = n*2 + 1; + scaledBy if n % 2 == 0 then -1/(m*m) else 1/(m*m) fi + (sinusoid rate (m * freq)) + done [0 .. int (rate/4 / freq) - 1]); + +{ square, saw, triangle } +