beep szintetizátos (bash script)

Log69 írt egy érdekes blog-bejegyzést a beep programocskáról.

A hétvégén nekem is sikerült egy kis "szintetizátort" írni, felteszem ide hogy -ha esetleg túl sok szabadidőd lenne- ki lehessen próbálni.


#!/bin/bash

hangok[1]=262
 hangok[2]=277
hangok[3]=294
 hangok[4]=311
hangok[5]=330
hangok[6]=349
 hangok[7]=370
hangok[8]=392
 hangok[9]=415
hangok[10]=440
 hangok[11]=466
hangok[12]=494

hangok[13]=523
 hangok[14]=554
hangok[15]=587
 hangok[16]=622
hangok[17]=659
hangok[18]=698
 hangok[19]=740
hangok[20]=784
 hangok[21]=831
hangok[22]=880
 hangok[23]=923
hangok[24]=988


billek[1]="q"
 billek[2]="2"
billek[3]="w"
 billek[4]="3"
billek[5]="e"
billek[6]="r"
 billek[7]="5"
billek[8]="t"
 billek[9]="6"
billek[10]="z"
 billek[11]="7"
billek[12]="u"

billek[13]="y"
 billek[14]="s"
billek[15]="x"
 billek[16]="d"
billek[17]="c"
billek[18]="v"
 billek[19]="g"
billek[20]="b"
 billek[21]="h"
billek[22]="n"
 billek[23]="j"
billek[24]="m"

nbillek[1]="Q"
 nbillek[2]="i"
nbillek[3]="W"
 nbillek[4]="o"
nbillek[5]="E"
nbillek[6]="R"
 nbillek[7]="p"
nbillek[8]="T"
 nbillek[9]="k"
nbillek[10]="Z"
 nbillek[11]="l"
nbillek[12]="U"

nbillek[13]="Y"
 nbillek[14]="S"
nbillek[15]="X"
 nbillek[16]="D"
nbillek[17]="C"
nbillek[18]="V"
 nbillek[19]="G"
nbillek[20]="B"
 nbillek[21]="H"
nbillek[22]="N"
 nbillek[23]="J"
nbillek[24]="M"

# milisec
hosz=100

echo "Zongora szimulator."
echo "ASDF : mely egesz hangok"
echo "2345 : mely felhangok"
echo "YXCV : magas egesz hangok"
echo "SDFG : magas felhangok"
echo "MAGYAR bill.-re"
echo

echo

ID=0
C=""
while [ "$C" != ":" ]
do
   read -n 1 C
   
   let "ID=$ID+1"
   
   D=`echo $C | tr '[:upper:]' '[:lower:]'`
   C=`echo $C | tr '"' 'i' | tr '+' 'o' | tr '%' 'p' | tr '/' 'k' | tr '=' 'l'`

#   echo -ne "\rHang: \n"
   if [ "$C" == "$D"  ]; then
      # ha kisbetu
      hosz=400
      
      for i in `seq 1 24`
      do
         if [ "${billek[${i}]}" == "$C" ]; then
            echo -ne "\rHang: ID=$ID \tf=${hangok[${i}]} Hz \tl=${hosz} ms \tCHR=\"$C\"\n"
            beep -l ${hosz} -f ${hangok[${i}]}
        fi
      done
   else
      # ha nagybetu
      hosz=200
      
      for i in `seq 1 24`
      do
         if [ "${nbillek[${i}]}" == "$C" ]; then
            echo -ne "\rHang: ID=$ID \tf=${hangok[${i}]} Hz \tl=${hosz} ms \tCHR=\"$C\"\n"
            beep -l ${hosz} -f ${hangok[${i}]}
        fi
      done
   fi
   
   if [ "$C" == "_" ]; then
      echo -ne "\rHang: ID=$ID \t[SZÜNET] \tl=400 ms\n"
      sleep 0.4
   fi
   if [ "$C" == "." ]; then
      echo -ne "\rHang: ID=$ID \t[SZÜNET] \tl=200 ms\n"
      sleep 0.2
   fi
done

echo
echo

Boci-boci:

echo 'QEQEttQEQEttYIUZTrzTREWqq:' | bash ./zongora.sh

Esetleg:

echo 'WW._WW._WQq:' | bash ./zongora.sh

Hozzászólások

Nem tudom, en kiprobaltam az alacsony meg a magas C-vel is a beep-et, egyaltalan nem hallok kulonbseget. Sima pcspkr modult hasznalok, 2.6.30-gentoo-r5 kernel, MSI K9MM-V alaplap (Via K8M800 chipset). Rendes PC speaker hanszoro van rakotve, lehet hogy ennek alacsony szintu a minosege?
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Sajnos nekem nem működik a beep. Lehet, hogy notebookban nincs is PC Speaker? Nem tudom... legutóbb Turbo Pascal programban használtam PC Speakert évekkel ezelőtt.

Pedig kellene :-(

Nálam itt 2 gépen is működik. Mindkettő Debian Lenny 2.6.26-2 kernel.