\ ========================================================== \ 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.