All pastes #291266 Raw Edit

zpg / dsp in forth

public text v1 · immutable
#291266 ·published 2006-12-24 23:44 UTC
rendered paste body

\ ==========================================================
\      DSP in Forth using the Floating Point Stack
\ ==========================================================

needs shorts.fs

\ ----------------------------------------------------------

44100 shorts allocate throw constant wave-sample

   60e fconstant frequency
32767e fconstant amplitude
44100e fconstant sample-rate

fvariable angle
0e angle f!

\ ----------------------------------------------------------

: radians ( F: r -- r )
    2e pi f* f* ;

: radian
    1e radians ;

\ ---[ Used to increment the angle ]------------------------

: angle-difference ( F: -- r )
    [ radian sample-rate f/ frequency f* ] fliteral ;

: angle++ ( -- )
    angle f@ angle-difference f+ angle f! ;

\ ----------------------------------------------------------

: generate-point ( -- n )
    angle f@ fsin  amplitude f*  f>d drop ;

\ ----------------------------------------------------------

: generate-wave ( array len -- )
    0 do
	generate-point
	over w!
	angle++ short+
    loop drop ;

\ ----------------------------------------------------------

: wave.
    0 do dup w@ cr w. short+ loop drop ;

\ ----------------------------------------------------------

wave-sample 44100 generate-wave
wave-sample 44100 wave.