#!/bin/bash
###################################################################### 
#Copyright (C) 2020  Kris Occhipinti
#https://filmsbykris.com

#Noise-O-tron
#makes noise from keypresses to dsp audio hardware

#This program is free software: you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.

#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.

#You should have received a copy of the GNU General Public License
#along with this program.  If not, see <http://www.gnu.org/licenses/>.
###################################################################### 

# Inspired by code written by: Antonio Macchi
# https://www.tldp.org/LDP/abs/html/devref1.html

duration=1000      
volume=$'\xc0'      
mute=$'\x80' 

function main(){
  echo "Press Keys on Keyboard"
  echo "(ASCII Characters) - Press Enter to exit."
  while [ 1 ];do 
    read -n 1 n
    n="$(ord $n)"
    [[ $n == 0 ]]&& exit
    n="$(note $n)"
    echo -n "$n" > /dev/dsp
  done
}

function note(){
  for i in `seq 0 $duration`
  do
    [ $(( $i % $1 )) -eq 0 ] && echo -n $volume || echo -n $mute
  done
}

function ord() {
  LC_CTYPE=C printf '%d' "'$1"
}

main