File run_ices of Package ices

#!/bin/sh

# script to help automate generation of config file and startup of ices2,
# mostly useful for people trying to do things like run ices2 from cron.

# contributed by Ciaran Anscomb <ciarana@rd.bbc.co.uk>
# distributed under GPL, see LICENSE

# You will probably want to leave this commented out - I need it tho...
#LD_LIBRARY_PATH=/usr/local/ogg/lib
#export LD_LIBRARY_PATH
#PATH=/usr/local/ogg/bin:/usr/ucb:/usr/bin:/usr/etc
#cd /usr/local/ogg/bin

# Some moderately sensible defaults
samplerate=44100
channels=2
bitrate=64000
module=oss
server=localhost
port=8000
password=hackme
metadatafile=/var/tmp/metadata.$$

start_wgets() {
	while [ "x$1" != "x" ]; do
		mount=$1; shift
		outfile=$1; shift
		wget -q http://$server:$port/$mount -O $outfile &
	done
}

cleanup() {
	rm -f $metadatafile
}

trap cleanup 2 15

if [ "x$1" = "x" -o "x$1" = "x--help" -o "x$1" = "x-h" ]; then
	cat << EOF
run_ices, a script to start ices2 from the command line.
Usage: $0 [OPTION] mountpoint [-o filename] ...
Example: $0 -S localhost -P 8000 -p hackme -b 64000 path/low.ogg
		-o low.ogg -b 128000 path/high.ogg -o high.ogg

General configuration:
  -sr n		Set sample rate of audio device [$samplerate]
  -c n		Set number of channels [$channels]
  -m module	Use named ices module (oss,sun) [$module]
  -S server	Server to stream to [$server]
  -P port	Port to connect to [$port]
  -p pass	Server password
  -A title	Artist for encoding
  -T title	Title for encoding
  -t n		Finish encoding after n seconds [don't stop]

Per-instance encoding configuration:
  -b n		Set bitrate [$bitrate]
  -o filename	Spawn a wget process to write this encoding to file

When listing more than one mountpoint, you only need to override the
parameters that need changing since the last one.  Multiple encodings
come at the expense of CPU.  If you use -o, always specify it AFTER the
mountpoint, and make sure you have the GNU wget application installed.

EOF
	exit 0
fi

while [ "x$1" != "x" ]; do
	opt=$1; shift
	case $opt in
	-sr) samplerate=$1; shift; ;;
	-c) channels=$1; shift; ;;
	-m) module=$1; shift; ;;
	-S) server=$1; shift; ;;
	-P) port=$1; shift; ;;
	-p) password=$1; shift; ;;
	-T) title=$1; shift; ;;
	-A) artist=$1; shift; ;;
	-o) outdata="$mount $1 $outdata"; shift; ;;
	-t) time=$1; shift; ;;
	-b) bitrate=$1; shift; ;;
	*) mount=$opt;
		if [ "x$init" = "x" ]; then
			cat > live.xml << EOF
<?xml version="1.0"?>
<ices>
	<background>0</background>
	<logpath>/usr/local/ogg/log</logpath>
	<logfile>ices.log</logfile>
	<loglevel>1</loglevel>

	<stream>
		<metadata>
			<name>Ogg stream</name>
			<genre>misc</genre>
			<description>No description</description>
		</metadata>
		<input>
			<module>$module</module>
			<param name="rate">$samplerate</param>
			<param name="channels">$channels</param>
			<param name="device">/dev/audio</param>
			<param name="metadata">1</param>
			<param name="metadatafilename">$metadatafile</param>
		</input>
EOF
			init=1
		fi
		cat >> live.xml << EOF
		<instance>
			<hostname>$server</hostname>
			<port>$port</port>
			<password>$password</password>
			<mount>/$mount</mount>
			<encode>  
				<bitrate>$bitrate</bitrate>
				<samplerate>$samplerate</samplerate>
				<channels>$channels</channels>
			</encode>
		</instance>
EOF
	;;
	esac
done

cat >> live.xml << EOF
	</stream>
</ices>
EOF

cat > $metadatafile << EOF
ARTIST=$artist
TITLE=$title
EOF
ices live.xml &
icespid=$!
kill -USR1 $icespid
if [ "x$outdata" != "x" ]; then
	sleep 2
	start_wgets $outdata
fi
if [ "x$time" != "x" ]; then
	sleep $time
	kill -INT $icespid
else
	wait $icespid
fi
cleanup