Hi all...
After mentioning the generation of a sinewave sweep generator in a previous thread in this forum this is the method I decided upon.
It plots a sinewave inside an 80 x 24 terminal window.
Although the original used bc
(and the line is in the code but commented out) it is now changed to use awk as CygWin has NOT got "bc" in a default install.
It is __relatively__ simple now to create a swept frequency generator from 4 KHz to around 50 Hz and back using the default '/dev/dsp' mode for CygWin and/or 'aplay' or 'afplay' using a .WAV variant...
Enjoy finding simple solutions to often very difficult problems...
#!/bin/bash
# plotsine.sh
# A DEMO to display a sinewave inside a standard bash terminal.
# Issued as Public Domain, 2014, B.Walker, G0LCU.
# Device: Macbook Pro 13", OSX 10.7.5, default bash terminal.
# Use variables so that you can see how it works.
angle=0
step_angle=5
vert_plot=0
horiz_plot=5
centreline=12
amplitude=11
PI=3.14159
clear
# Do a single cycle, quantised graph.
while [ $angle -le 359 ]
do
# Create each floating point value...
# CygWin does not have the 'bc' command but it is now catered for... ;o)
vert_plot=$(awk "BEGIN{ printf \"%.12f\", ((sin($angle*($PI/180))*$amplitude)+$centreline)}")
# vert_plot=$(bc -l <<< "{print ((s($angle*($PI/180))*$amplitude)+$centreline)}")
# Truncate the floating point value to an integer then invert the plot to suit the x y co-ordinates inside a terminal...
vert_plot=$((24-${vert_plot/.*}))
# Plot the point(s) and print the angle at that point...
printf "\x1B["$vert_plot";"$horiz_plot"f*"
printf "\x1B[22;1fAngle is $angle degrees... "
sleep 0.1
# Increment values...
angle=$((angle+step_angle))
horiz_plot=$((horiz_plot+1))
done
printf "\x1B[23;1fSinewave plotted as a quantised text mode graph.\n"
exit 0
# The results printed inside an 80 x 24 terminal window...
#
# *********
# *** ***
# * *
# ** **
# * *
# * *
# * *
# * *
# * *
# * *
# ** **
# * *
# * *
# * *
# * *
# * *
# * *
# * *
# ** **
# * *
#Angle is 355 degrees... *** ***
#Sinewave plotted as a quantised text mode graph. *********