SrvSVXLink/Configuration/fr_FR/play_sound.sh
2022-08-24 08:18:01 +02:00

159 lines
2.5 KiB
Bash
Executable File

#!/bin/sh
trim_silence=0
endian=""
encoding="-s2 -traw"
target_rate=8000
silence_level=45
effect=""
convert()
{
if [ -r "$1.wav" ]; then
sox "$1.wav" -r$target_rate -s2 -traw -
elif [ -r "$1.raw" ]; then
if [ $target_rate != 8000 ]; then
sox -r 8000 -s2 "$1.raw" -r$target_rate -s2 -traw -
else
cat "$1.raw"
fi
fi
}
process()
{
# The format of the audio stream
format="-traw -r${target_rate} -s2";
# The filter to apply before all other operations
#filter="highpass 300 highpass 300 highpass 300"
#filter="highpass 300"
#filter=""
# Front and back levels for silence trimming
silence_front_level="-${silence_level}d"
silence_back_level="-${silence_level}d"
# Calculate maximum gain without clipping. Leave headroom of about 3dB.
#gain=$(sox -traw -r${target_rate} -s2 $1 -traw /dev/null stat -v 2>&1)
#gain=$(echo "$gain * 0.7" | bc)
#echo $gain 1>&2
if [ $trim_silence -gt 0 ]; then
sox $format $1 $format - \
silence 1 0:0:0.01 $silence_front_level reverse \
silence 1 0:0:0.01 $silence_back_level reverse \
$effect \
norm -3
else
sox $format $1 $format - $effect norm -3
fi
}
spell()
{
tmp=$(mktemp /tmp/svxlink-XXXXXX)
( for letter in $*; do
process phonetic_$letter
done ) > $tmp
play -r${target_rate} -s2 -traw $tmp
rm -f $tmp
}
endian_conv()
{
if [ -n "$endian" ]; then
sox -r${target_rate} -s2 -traw - -r${target_rate} -s2 -traw $endian -
else
cat
fi
}
encode()
{
if [ "$encoding" != "-s2 -traw" ]; then
sox -r${target_rate} -s2 -traw - $encoding -
else
cat
fi
}
while getopts spfctBLgr:l:e: opt; do
case $opt in
s)
operation=spell
;;
p)
operation=play
;;
f)
operation=filter
;;
c)
operation=convert
;;
t)
trim_silence=1
;;
B)
endian="-B"
;;
L)
endian="-L"
;;
g)
encoding="-tgsm"
;;
r)
target_rate=$OPTARG
;;
l)
silence_level=$OPTARG
;;
e)
effect=$OPTARG
;;
esac
done
shift $((OPTIND-1))
case $operation in
spell)
spell $*
;;
play)
tmp=$(mktemp /tmp/svxlink-XXXXXX)
convert "$1" > $tmp
process $tmp | encode | play -r${target_rate} $encoding -
rm -f $tmp
;;
convert)
convert "$1" | endian_conv | encode
;;
filter)
tmp=$(mktemp /tmp/svxlink-XXXXXX)
convert "$1" > $tmp
process $tmp | endian_conv | encode
rm -f $tmp
;;
esac