forked from sox_ng/sox_ng
This is the hard fork, allowing old sox and sox_ng to coexist on the same system. Any distro wishing to switch to sox_ng just needs to make symlinks from the old file names to the new. This also removes the Debian-specific files rather than trying to update them, as Debian uses its own version of them.
251 lines
5.5 KiB
Bash
Executable file
251 lines
5.5 KiB
Bash
Executable file
#!/bin/sh
|
|
# create WAV-Files that can be used to create an audio Test CD
|
|
#
|
|
# The intent of this Test CD is to allow you to test the reproduction
|
|
# quality and response of an audio system by playing back audio
|
|
# of various frequencies and power levels. Browse through the
|
|
# script comments to see what all audio files are created.
|
|
#
|
|
# all files are created in the current directory
|
|
#
|
|
# Command Line options:
|
|
# testcd.sh filename_prefix audio_length
|
|
#
|
|
# filename_prefix is what each soundfile starts with. Defaults to
|
|
# using testcd as the prefix.
|
|
# audio_length is the length of audio data in seconds. Defaults to 30
|
|
# seconds.
|
|
|
|
|
|
# length of sample file in seconds
|
|
|
|
if [ "$2" = "" ] ; then
|
|
LENGTH="30"
|
|
else
|
|
LENGTH=$2
|
|
fi
|
|
# use 'fade' effect for smooth start and end of tone
|
|
FT="0.05"
|
|
|
|
# a different default volume
|
|
VOL=""
|
|
|
|
#output file type
|
|
OFT=".wav"
|
|
|
|
#our binary
|
|
SOX=../src/sox_ng
|
|
|
|
# filenameprefix
|
|
if [ "$1" = "" ] ; then
|
|
PRE="testcd"
|
|
else
|
|
PRE=$1;
|
|
fi
|
|
# 2 channel 16 bit signed linear int with CD sampling rate
|
|
SOXOPT="-c 2 -r 44100 -e signed-integer -b 16 -n"
|
|
|
|
# file with list of filenames
|
|
LST="${PRE}.lst"
|
|
|
|
|
|
#summarise seconds
|
|
TC="0"
|
|
#summarize file numbers
|
|
FC="0"
|
|
|
|
|
|
newname()
|
|
{
|
|
FC="$(( $FC + 1 ))"
|
|
LEN="$2"
|
|
FADE=" fade $FT $LEN $FT"
|
|
|
|
TC="$(( $TC + $LEN ))"
|
|
|
|
if [ $FC -lt 10 ] ; then
|
|
NAME="${PRE}_0${FC}_${1}${OFT}"
|
|
else
|
|
NAME="${PRE}_${FC}_${1}${OFT}"
|
|
fi
|
|
echo -n -e " \t$1"
|
|
echo "$NAME" >>$LST
|
|
}
|
|
|
|
#empty / delete list file
|
|
echo "" >$LST
|
|
|
|
|
|
#
|
|
# ok, lets start with the actual creation of the files
|
|
#
|
|
|
|
#
|
|
# fixed frequencies,
|
|
FREQ=" 19.4 23.1 27.5 32.7 38.9 46.2"
|
|
FREQ="$FREQ 55.0 64.4 77.8 92.5 110.0 130.8 155.6 185.0"
|
|
FREQ="$FREQ 220.0 261.6 311.1 367.0 440.0 523.3 622.3 740.0"
|
|
FREQ="$FREQ 880.0 1046 1245 1480 1760 2093 2489 2960"
|
|
FREQ="$FREQ 3520 4186 4978 5920 7040 8372 9956 11840"
|
|
FREQ="$FREQ 14080 16744 19912"
|
|
#FREQ="5 10 20 50 100 200 500 1000 2000 5000 10000 20000"
|
|
echo "\n--- different frequencies"
|
|
for f in $FREQ; do
|
|
newname "${f}hz" $LENGTH
|
|
$SOX $SOXOPT $NAME synth $LEN sine $f $FADE $VOL
|
|
done
|
|
|
|
|
|
|
|
#
|
|
# frequency sweep
|
|
# need some mark every octave
|
|
#
|
|
FREQ="220-3520" #4
|
|
FREQ="55-14080" # 8 oct
|
|
FREQ="13.75-28160" # 10 oct
|
|
OCT=10
|
|
TOCT=10
|
|
TGES="$(( $OCT * $TOCT ))"
|
|
MARKFREQ=622
|
|
echo "\n--- frequency sweep range $FREQ"
|
|
newname ${FREQ}hz $TGES
|
|
$SOX $SOXOPT $NAME synth $LEN sine $MARKFREQ synth square amod 0.1 0 97 94 vol -3 db synth $LEN sine mix $FREQ $VOL
|
|
|
|
FREQ="3520-220"
|
|
FREQ="28160-13.75" # 9 oct
|
|
newname ${FREQ}hz $TGES
|
|
$SOX $SOXOPT $NAME synth $LEN sine $MARKFREQ synth square amod 0.1 0 97 94 vol -3 db synth $LEN sine mix $FREQ $VOL
|
|
|
|
# CD frequencies
|
|
FREQ="22050 11025 5512.5 "
|
|
echo "\n--- different frequencies $FREQ"
|
|
for f in $FREQ; do
|
|
newname "cd${f}hz" $LENGTH
|
|
$SOX $SOXOPT $NAME synth $LEN sine $f $FADE $VOL
|
|
done
|
|
|
|
|
|
#
|
|
# similar frequencies
|
|
#
|
|
FREQ1="9000"
|
|
FREQ2="10000"
|
|
echo "\n--- similar frequencies"
|
|
newname ${FREQ1}_${FREQ2} $LENGTH
|
|
$SOX $SOXOPT $NAME synth $LEN sine $FREQ1 synth sine mix $FREQ2 $FADE $VOL
|
|
FREQ1="440"
|
|
FREQ2="445"
|
|
newname ${FREQ1}_${FREQ2} $LENGTH
|
|
$SOX $SOXOPT $NAME synth $LEN sine $FREQ1 synth sine mix $FREQ2 $FADE $VOL
|
|
|
|
#
|
|
#noise
|
|
#
|
|
echo "\n--- noise"
|
|
newname whitenoise $LENGTH
|
|
$SOX $SOXOPT $NAME synth $LEN whitenoise $FADE $VOL
|
|
newname pinknoise $LENGTH
|
|
$SOX $SOXOPT $NAME synth $LEN pinknoise $FADE $VOL
|
|
newname brownnoise $LENGTH
|
|
$SOX $SOXOPT $NAME synth $LEN brownnoise $FADE $VOL
|
|
|
|
|
|
|
|
#
|
|
# square waves
|
|
#
|
|
FREQ="100 1000 10000"
|
|
echo "\n--- square waves at $FREQ"
|
|
for f in $FREQ; do
|
|
newname ${f}_square $LENGTH
|
|
$SOX $SOXOPT $NAME synth $LEN square $f vol -12 db $FADE
|
|
done
|
|
|
|
|
|
#
|
|
# different volumes at a few frequencies
|
|
#
|
|
FREQ="100 1000 10000"
|
|
DB="0 12 24 36 48 60 72 84 96"
|
|
echo "\n--- different volumes $DB db at Frequencies $FREQ"
|
|
for f in $FREQ; do
|
|
for d in $DB; do
|
|
newname ${f}_${d}db $LENGTH
|
|
$SOX $SOXOPT $NAME synth $LEN sine $f vol -$d db $FADE
|
|
done
|
|
done
|
|
|
|
# silence
|
|
echo "\n-- silence"
|
|
newname silence $LENGTH
|
|
$SOX $SOXOPT $NAME synth $LEN sine 1000 vol 0
|
|
|
|
|
|
|
|
|
|
#
|
|
# volume sweep at different frequencies
|
|
#
|
|
|
|
FREQ="100 1000 10000"
|
|
MARKFREQ=662
|
|
DB=100 # 10sec for 10db
|
|
echo "\n--- volume sweep 0..100% at Frequencies $FREQ"
|
|
for f in $FREQ; do
|
|
newname ${f}_dbsweep 200
|
|
$SOX $SOXOPT $NAME synth $LEN sine $f synth exp amod 0.005 0 0 50 $DB
|
|
done
|
|
|
|
|
|
#
|
|
# offset test - a 1K sine with 1Hz square offset of 10%
|
|
#
|
|
echo "\n--- offset test, 1KHz tone with 1HZ 10% offset"
|
|
newname offset $LENGTH
|
|
$SOX $SOXOPT $NAME synth $LEN square 1 vol 0.1 synth sine mix 1000 $FADE $VOL
|
|
newname offset1 $LENGTH
|
|
$SOX $SOXOPT $NAME synth $LEN square 1 0 0 square 1 vol 0.1 $FADE
|
|
|
|
|
|
|
|
# effects for different channels
|
|
#
|
|
# silence on one channel, full power on the other - different frequencies
|
|
FREQ="100 1000 10000"
|
|
echo "\n--- single channel"
|
|
for f in $FREQ; do
|
|
newname ${f}leftchan $LENGTH
|
|
$SOX $SOXOPT $NAME synth $LEN sine $f synth square amod 0 100 square amod 0 0 $Fade $VOL
|
|
newname ${f}rightchan $LENGTH
|
|
$SOX $SOXOPT $NAME synth $LEN sine $f synth square amod 0 0 square amod 0 100 $Fade $VOL
|
|
done
|
|
|
|
# phase error between channels
|
|
FREQ="100 1000 10000"
|
|
# equal phase/ 24 degrees / 90 degrees / 180 degrees
|
|
PHASE="25"
|
|
echo "\n--- phase error test between channels at $FREQ "
|
|
for f in $FREQ; do
|
|
for p in $PHASE; do
|
|
newname ${f}hz_phase${p} $LENGTH
|
|
$SOX $SOXOPT $NAME synth $LEN sine $f 0 0 sine $f 0 $p $FADE $VOL
|
|
done
|
|
done
|
|
|
|
#
|
|
#
|
|
# end - show statistics
|
|
#
|
|
|
|
echo "\n------------------\ncreated $FC files with prefix $PRE type $OFT"
|
|
MIN="$(( $TC / 60 ))"
|
|
echo "total length is $TC sec = $MIN min"
|
|
#---------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|