aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2014-08-22 09:17:12 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2014-08-22 09:17:12 +0200
commit5c788a71b5a426c93b305bc01183d65f49c64c43 (patch)
tree0de6e2dd24db555191d6728bd4dec8a462492af1
parent67ce1de8f92ae239f33171dc9e6ce14b4b6c50a7 (diff)
downloaddab-scripts-5c788a71b5a426c93b305bc01183d65f49c64c43.tar.gz
dab-scripts-5c788a71b5a426c93b305bc01183d65f49c64c43.tar.bz2
dab-scripts-5c788a71b5a426c93b305bc01183d65f49c64c43.zip
Create encode jack with and without DLS
-rwxr-xr-xencode-jack-dls.sh292
-rwxr-xr-xencode-jack.sh66
2 files changed, 300 insertions, 58 deletions
diff --git a/encode-jack-dls.sh b/encode-jack-dls.sh
new file mode 100755
index 0000000..44eb62a
--- /dev/null
+++ b/encode-jack-dls.sh
@@ -0,0 +1,292 @@
+#!/bin/bash
+#
+# Encode programme using mplayer, connect through JACK
+# to dabplus-enc or toolame
+#
+# Read webstream from URL using mplayer
+# Launch dabplus-enc or toolame encoder
+# connect both through JACK
+# monitor processes, and restart if necessary
+# Optionally send an email when restart happens
+#
+# Extract ICY Text from stream and use it for DLS
+
+printerr() {
+ echo -e "\033[01;31m$1\033[0m"
+}
+
+printmsg() {
+ echo -e "\033[01;32m$1\033[0m"
+}
+
+set -u
+
+# check number of arguments
+if [[ "$#" < 3 ]] ; then
+ echo "Usage $0 url jack-id destination [volume] [encoder]"
+ echo "The volume setting is optional"
+ exit 1
+fi
+
+if [[ "$#" > 2 ]] ; then
+ URL=$1
+ ID=$2
+ DST=$3
+fi
+
+if [[ "$#" == 4 ]] ; then
+ VOL=$4
+ ENC="dabplus-enc"
+elif [[ "$#" == 5 ]] ; then
+ VOL=$4
+ ENC=$5
+else
+ VOL="0"
+ ENC="dabplus-enc"
+fi
+
+
+BITRATE=80
+RATE=32 #kHz
+
+if [[ "$ENC" == "toolame" && "RATE" == "32" ]] ; then
+ echo "32kHz not supported for toolame"
+ exit 1
+fi
+
+DLSDIR=site/dls
+SLIDEDIR=site/slide
+
+encoderalive=0
+mplayerpid=0
+encoderpid=0
+motencoderpid=0
+running=1
+
+mplayer_ok=0
+encoder_ok=0
+
+# The trap for Ctrl-C
+sigint_trap() {
+ printerr "Got Ctrl-C, killing mplayer and encoder"
+ running=0
+
+ if [[ "$mplayerpid" != "0" ]] ; then
+ kill -TERM $mplayerpid
+ sleep 2
+ kill -KILL $mplayerpid
+ fi
+
+ if [[ "$encoderpid" != "0" ]] ; then
+ kill -TERM $encoderpid
+ sleep 2
+ kill -KILL $encoderpid
+ fi
+
+ if [[ "$motencoderpid" != "0" ]] ; then
+ kill -TERM $motencoderpid
+ sleep 2
+ kill -KILL $motencoderpid
+ fi
+
+ printmsg "Goodbye"
+ exit
+}
+
+trap sigint_trap SIGTERM
+trap sigint_trap SIGINT
+
+while [[ "$running" == "1" ]]
+do
+ if [[ "$mplayerpid" == "0" ]] ; then
+ if [[ "$VOL" == "0" ]] ; then
+ mplayer -quiet -af resample=${RATE}000:0:2 -ao jack:name=$ID $URL | \
+ ./icy-info.py $DLSDIR/${ID}.dls $DLSDIR/${ID}-default.dls &
+ mplayerpid=$!
+ else
+ mplayer -quiet -af resample=${RATE}000:0:2 -af volume=$VOL -ao jack:name=$ID $URL | \
+ ./icy-info.py $DLSDIR/${ID}.dls $DLSDIR/${ID}-default.dls &
+ mplayerpid=$!
+ fi
+
+ printmsg "Started mplayer with pid $mplayerpid"
+
+ # give some time to mplayer to set up and
+ # wait until port becomes visible
+ timeout=10
+
+ while [[ "$mplayer_ok" == "0" ]]
+ do
+ printmsg "Waiting for mplayer to connect to jack ($timeout)"
+ sleep 1
+ mplayer_ok=$(jack_lsp $ID:out_0 | wc -l)
+
+ timeout=$(( $timeout - 1 ))
+
+ if [[ "$timeout" == "0" ]] ; then
+ printerr "mplayer doesn't connect to jack !"
+ kill $mplayerpid
+ break
+ fi
+ done
+ else
+ printmsg "No need to start mplayer: $mplayerpid"
+ fi
+
+ if [[ "$mplayer_ok" == "1" && "$encoder_ok" == "0" ]] ; then
+ if [[ "$ENC" == "dabplus-enc" ]] ; then
+ dabplus-enc -j ${ID}enc -l \
+ -p 34 -P $DLSDIR/${ID}.pad \
+ -b $BITRATE -r ${RATE}000 -f raw -a -o $DST &
+ encoderpid=$!
+ elif [[ "$ENC" == "toolame" ]] ; then
+ toolame -b $BITRATE -s $RATE \
+ -p 34 -P $DLSDIR/${ID}.pad \
+ -j ${ID}enc $DST &
+ encoderpid=$!
+ fi
+
+ # give some time to the encoder to set up and
+ # wait until port becomes visible
+ timeout=10
+
+ encoder_connected=0
+
+ while [[ "$encoder_connected" == "0" ]]
+ do
+ printmsg "Waiting for encoder to connect to jack ($timeout)"
+ sleep 1
+ encoder_connected=$(jack_lsp ${ID}enc:input0 | wc -l)
+
+ timeout=$(( $timeout - 1))
+
+ if [[ "$timeout" == "0" ]] ; then
+ printerr "encoder doesn't connect to jack !"
+ kill $encoderpid
+ break
+ fi
+ done
+
+ if [[ "$encoder_connected" == "1" ]] ; then
+ jack_connect ${ID}:out_0 ${ID}enc:input0 && \
+ jack_connect ${ID}:out_1 ${ID}enc:input1
+ connect_ret=$?
+
+ if [[ "$connect_ret" == "0" ]] ; then
+ encoder_ok=1
+ else
+ encoder_ok=0
+ fi
+
+ if [[ "$encoder_ok" == "1" ]] ; then
+ printmsg "Started encoder with pid $encoderpid"
+ else
+ if [[ "$encoderpid" != "0" ]] ; then
+ kill -TERM $encoderpid
+ fi
+ fi
+ fi
+ fi
+
+ if [[ "$encoder_ok" == "1" && "$motencoderpid" == "0" ]] ; then
+ # Check if the slides folder exists, and start mot-encoder accordingly
+ if [[ -d "$SLIDEDIR/$ID" ]] ; then
+ mot-encoder -o $DLSDIR/${ID}.pad -t $DLSDIR/${ID}.dls -p 34 -v \
+ -e -d $SLIDEDIR/${ID} &
+ motencoderpid=$!
+ else
+ mot-encoder -o $DLSDIR/${ID}.pad -t $DLSDIR/${ID}.dls -p 34 -v &
+ motencoderpid=$!
+ fi
+
+ printmsg "Started mot-encoder with pid $encoderpid"
+ fi
+
+
+ sleep 5
+
+ checkloop=1
+ while [[ "$checkloop" == "1" ]]
+ do
+ sleep 2
+
+ kill -s 0 $mplayerpid
+ if [[ "$?" != "0" ]] ; then
+ # mplayer died
+ # we must kill jack-stdout, because we cannot reconnect it
+ # to a new mplayer, since we do not know the jack-stdout name.
+ # And it has no cmdline option to set one, Rrrrongntudtjuuu!
+ if [[ "$encoderpid" != "0" ]] ; then
+ kill -TERM $encoderpid
+ fi
+
+ if [[ "$motencoderpid" != "0" ]] ; then
+ kill -TERM $motencoderpid
+ fi
+
+ # mark as dead
+ mplayerpid=0
+ mplayer_ok=0
+ encoderpid=0
+ encoder_ok=0
+ motencoderpid=0
+
+ checkloop=0
+
+ printerr "Mplayer died"
+ fi
+
+ if [[ "$encoderpid" != "0" ]] ; then
+ kill -s 0 $encoderpid
+ if [[ "$?" != "0" ]] ; then
+ # the encoder died,
+ # no need to kill the mplayer, we can reconnect to it
+
+ if [[ "$motencoderpid" != "0" ]] ; then
+ kill -TERM $motencoderpid
+ fi
+
+ motencoderpid=0
+ encoderpid=0
+ encoder_ok=0
+
+ checkloop=0
+
+ printerr "Encoder died"
+ fi
+ fi
+
+ if [[ "$motencoderpid" != "0" ]] ; then
+ kill -s 0 $motencoderpid
+ if [[ "$?" != "0" ]] ; then
+ # mot-encoder died
+ # let's try restarting it
+
+ motencoderpid=0
+
+ checkloop=0
+
+ printerr "mot-encoder died"
+ fi
+ fi
+ done
+
+ MAILTO=$(cat site/mail-warning.txt)
+
+ if [[ "$MAILTO" != "" ]] ; then
+ NOW=$(date)
+
+ mail -s "Encoder $ID restart $URL" $MAILTO << EOF
+The encoder id:$ID
+encoding $URL -> $DST using encode-jack-dls was restarted at
+$NOW
+
+mplayer ok? $mplayer_ok
+
+EOF
+
+ fi
+ sleep 5
+
+done
+
diff --git a/encode-jack.sh b/encode-jack.sh
index ab6aa3a..e8fd63c 100755
--- a/encode-jack.sh
+++ b/encode-jack.sh
@@ -8,8 +8,6 @@
# connect both through JACK
# monitor processes, and restart if necessary
# Optionally send an email when restart happens
-#
-# Extract ICY Text from stream and use it for DLS
printerr() {
echo -e "\033[01;31m$1\033[0m"
@@ -47,15 +45,16 @@ fi
BITRATE=80
-RATE=48 #kHz
+RATE=32 #kHz
-DLSDIR=site/dls
-SLIDEDIR=site/slide
+if [[ "$ENC" == "toolame" && "RATE" == "32" ]] ; then
+ echo "32kHz not supported for toolame"
+ exit 1
+fi
encoderalive=0
mplayerpid=0
encoderpid=0
-motencoderpid=0
running=1
mplayer_ok=0
@@ -78,12 +77,6 @@ sigint_trap() {
kill -KILL $encoderpid
fi
- if [[ "$motencoderpid" != "0" ]] ; then
- kill -TERM $motencoderpid
- sleep 2
- kill -KILL $motencoderpid
- fi
-
printmsg "Goodbye"
exit
}
@@ -95,12 +88,10 @@ while [[ "$running" == "1" ]]
do
if [[ "$mplayerpid" == "0" ]] ; then
if [[ "$VOL" == "0" ]] ; then
- mplayer -quiet -af resample=${RATE}000:0:2 -ao jack:name=$ID $URL | \
- ./icy-info.py $DLSDIR/${ID}.dls $DLSDIR/${ID}-default.dls &
+ mplayer -quiet -af resample=${RATE}000:0:2 -ao jack:name=$ID $URL &
mplayerpid=$!
else
- mplayer -quiet -af resample=${RATE}000:0:2 -af volume=$VOL -ao jack:name=$ID $URL | \
- ./icy-info.py $DLSDIR/${ID}.dls $DLSDIR/${ID}-default.dls &
+ mplayer -quiet -af resample=${RATE}000:0:2 -af volume=$VOL -ao jack:name=$ID $URL &
mplayerpid=$!
fi
@@ -131,12 +122,10 @@ do
if [[ "$mplayer_ok" == "1" && "$encoder_ok" == "0" ]] ; then
if [[ "$ENC" == "dabplus-enc" ]] ; then
dabplus-enc -j ${ID}enc -l \
- -p 34 -P $DLSDIR/${ID}.pad \
-b $BITRATE -r ${RATE}000 -f raw -a -o $DST &
encoderpid=$!
elif [[ "$ENC" == "toolame" ]] ; then
toolame -b $BITRATE -s $RATE \
- -p 34 -P $DLSDIR/${ID}.pad \
-j ${ID}enc $DST &
encoderpid=$!
fi
@@ -183,21 +172,6 @@ do
fi
fi
- if [[ "$encoder_ok" == "1" && "$motencoderpid" == "0" ]] ; then
- # Check if the slides folder exists, and start mot-encoder accordingly
- if [[ -d "$SLIDEDIR/$ID" ]] ; then
- mot-encoder -o $DLSDIR/${ID}.pad -t $DLSDIR/${ID}.dls -p 34 -v \
- -e -d $SLIDEDIR/${ID} &
- motencoderpid=$!
- else
- mot-encoder -o $DLSDIR/${ID}.pad -t $DLSDIR/${ID}.dls -p 34 -v &
- motencoderpid=$!
- fi
-
- printmsg "Started mot-encoder with pid $encoderpid"
- fi
-
-
sleep 5
checkloop=1
@@ -215,16 +189,11 @@ do
kill -TERM $encoderpid
fi
- if [[ "$motencoderpid" != "0" ]] ; then
- kill -TERM $motencoderpid
- fi
-
# mark as dead
mplayerpid=0
mplayer_ok=0
encoderpid=0
encoder_ok=0
- motencoderpid=0
checkloop=0
@@ -237,11 +206,6 @@ do
# the encoder died,
# no need to kill the mplayer, we can reconnect to it
- if [[ "$motencoderpid" != "0" ]] ; then
- kill -TERM $motencoderpid
- fi
-
- motencoderpid=0
encoderpid=0
encoder_ok=0
@@ -250,20 +214,6 @@ do
printerr "Encoder died"
fi
fi
-
- if [[ "$motencoderpid" != "0" ]] ; then
- kill -s 0 $motencoderpid
- if [[ "$?" != "0" ]] ; then
- # mot-encoder died
- # let's try restarting it
-
- motencoderpid=0
-
- checkloop=0
-
- printerr "mot-encoder died"
- fi
- fi
done
MAILTO=$(cat site/mail-warning.txt)
@@ -273,7 +223,7 @@ do
mail -s "Encoder $ID restart $URL" $MAILTO << EOF
The encoder id:$ID
-encoding $URL -> $DST using mplayer and jack was restarted at
+encoding $URL -> $DST using encode-jack was restarted at
$NOW
mplayer ok? $mplayer_ok