mirror of https://github.com/tLDP/LDP
41 lines
1005 B
Bash
41 lines
1005 B
Bash
#!/bin/bash
|
|
# music.sh
|
|
|
|
# Music without external files
|
|
|
|
# Author: Antonio Macchi
|
|
# Used in ABS Guide with permission.
|
|
|
|
|
|
# /dev/dsp default = 8000 frames per second, 8 bits per frame (1 byte),
|
|
#+ 1 channel (mono)
|
|
|
|
duration=2000 # If 8000 bytes = 1 second, then 2000 = 1/4 second.
|
|
volume=$'\xc0' # Max volume = \xff (or \x00).
|
|
mute=$'\x80' # No volume = \x80 (the middle).
|
|
|
|
function mknote () # $1=Note Hz in bytes (e.g. A = 440Hz ::
|
|
{ #+ 8000 fps / 440 = 16 :: A = 16 bytes per second)
|
|
for t in `seq 0 $duration`
|
|
do
|
|
test $(( $t % $1 )) = 0 && echo -n $volume || echo -n $mute
|
|
done
|
|
}
|
|
|
|
e=`mknote 49`
|
|
g=`mknote 41`
|
|
a=`mknote 36`
|
|
b=`mknote 32`
|
|
c=`mknote 30`
|
|
cis=`mknote 29`
|
|
d=`mknote 27`
|
|
e2=`mknote 24`
|
|
n=`mknote 32767`
|
|
# European notation.
|
|
|
|
echo -n "$g$e2$d$c$d$c$a$g$n$g$e$n$g$e2$d$c$c$b$c$cis$n$cis$d \
|
|
$n$g$e2$d$c$d$c$a$g$n$g$e$n$g$a$d$c$b$a$b$c" > /dev/dsp
|
|
# dsp = Digital Signal Processor
|
|
|
|
exit # A "bonny" example of an elegant shell script!
|