head 1.2; access; symbols; locks ahuxley:1.2; strict; comment @# @; 1.2 date 2000.03.24.15.26.14; author ahuxley; state Exp; branches; next 1.1; 1.1 date 2000.03.19.12.17.59; author ahuxley; state Exp; branches; next ; desc @PLAY MP3's ON XTERM AT ESO @ 1.2 log @added wav and au support @ text @#!MARKER_SHELL_CMD #shpp include ../paths.shpp PATH=/bin:/usr/bin:/sbin:/usr/sbin PROGNAME=`basename $0` RCS_ID='$Header: /home/ahuxley/dev/small/bin/RCS/esoplaymp3.shpp,v 1.1 2000/03/19 12:17:59 ahuxley Exp ahuxley $' VERSION_SCHEME=rcs ############################################################################### # # CONFIGURABLE STUFF # ############################################################################### MPG123_CMD=/home/ahuxley/bin/HP-UX/mpg123 SOX_CMD=/home/ahuxley/bin/HP-UX/sox SENDSOUND_CMD=/opt/audio/bin/send_sound OLD_ENWARE_HOST=ins6 SEQNO_WIDTH=2 ############################################################################### # # END OF CONFIGURABLE STUFF # ############################################################################### QUEUE_DIR=$TMP_DIR/$PROGNAME.$$ MAXQLEN=3 usage() { { echo "Usage: $PROGNAME " } >&2 exit 1 } main() { while [ "X$1" != X ]; do case $1 in -V) echo "$PROGNAME version $VERSION" exit 0 ;; -v) VERBOSE_LEVEL=3 ;; -d) [ "X$$2" = X ] && usage VERBOSE_LEVEL=$2 shift ;; --) break ;; -*) usage ;; *) break ;; esac shift done [ "X$1" = X ] && usage UNAMEN=`uname -n` { [ $UNAMEN != $OLD_ENWARE_HOST ] && MODE=remote; } || MODE=local info "performing sanity checks ..." [ "X$DISPLAY" = X ] && error "DISPLAY not set" [ "X$TMP_DIR" = X ] && error "you must set TMP_DIR to something under your home" expr "$TMP_DIR" : "$HOME/" > /dev/null || error "you must set TMP_DIR to something under your home" if [ $MODE = remote ]; then LOCAL_XTERM=`expr $DISPLAY : '\(.*\):0.0'` [ "X$LOCAL_XTERM" = X ] && internal "LOCAL_XTERM could not be calculated, please report this!" [ "X`remsh $OLD_ENWARE_HOST -n echo ok 2>/dev/null`" != Xok ] && error "remsh access to $OLD_ENWARE_HOST" fi engine $* } queue() { typeset FILE ID SEQNO FILE=$1 SEQNO=$2 SEQNO=`printf "%0${SEQNO_WIDTH}d" $SEQNO` BASE_FILE=`basename $FILE` case $BASE_FILE in *.mp3) SRC_FORMAT=mp3 BASENAME=`basename $BASE_FILE .mp3` ;; *.wav) SRC_FORMAT=wav BASENAME=`basename $BASE_FILE .wav` ;; *.au) SRC_FORMAT=au BASENAME=`basename $BASE_FILE .au` ;; *) error "unrecognised format ($FILE)" ;; esac debug 5 "queue: queuing $BASE_FILE ..." case $SRC_FORMAT in mp3) DST_FORMAT=wav info "converting $BASE_FILE to $DST_FORMAT format ..." # mpg123 cannot write to a pipe, but can write to stdout (WAV rewind error) $MPG123_CMD -q -w - - < $FILE > $QUEUE_DIR/$SEQNO.W.$BASENAME.$DST_FORMAT 2>/dev/null ;; wav) DST_FORMAT=au info "converting $BASE_FILE to $DST_FORMAT format ..." $SOX_CMD $FILE $QUEUE_DIR/$SEQNO.W.$BASENAME.$DST_FORMAT ;; au) DST_FORMAT=au cp $FILE $QUEUE_DIR/$SEQNO.W.$BASENAME.$DST_FORMAT ;; esac #debug 5 "queue: transferring $FILE to play host ..." #remsh $OLD_ENWARE_HOST ksh -c "\"cat > $QUEUE_DIR/$SEQNO.$W.$ID\"" < $QUEUE_DIR/W.local.$ID mv $QUEUE_DIR/$SEQNO.W.$BASENAME.$DST_FORMAT $QUEUE_DIR/$SEQNO.S.$BASENAME.$DST_FORMAT debug 5 "queue: $FILE has been queued" } dequeue() { typeset SEQNO ID SEQNO=$1 SEQNO=`printf "%0${SEQNO_WIDTH}d" $SEQNO` ID=`cd $QUEUE_DIR && expr $SEQNO.S.* : "$SEQNO.S.\(.*\)"` debug 5 "dequeuing $ID ..." mv $QUEUE_DIR/$SEQNO.S.$ID $QUEUE_DIR/$SEQNO.R.$ID case $ID in *.wav) FORMAT=wav ;; *.au) FORMAT=au ;; esac case $FORMAT in wav) FORMAT_OPS=-wav ;; au) FORMAT_OPS= ;; esac info "playing $ID ..." if [ $MODE = local ]; then $SENDSOUND_CMD $FORMAT_OPS $QUEUE_DIR/$SEQNO.R.$ID else remsh $OLD_ENWARE_HOST -n ksh -c "\"DISPLAY=$DISPLAY; export DISPLAY; $SENDSOUND_CMD -server $LOCAL_XTERM $FORMAT_OPS $QUEUE_DIR/$SEQNO.R.$ID; rm -f $QUEUE_DIR/$SEQNO.R.$ID\"" fi rm -f $QUEUE_DIR/$SEQNO.R.$ID debug 5 "dequeue: $ID has been dequeued" } queuelen() { ls -1 $QUEUE_DIR | egrep -c "^[0-9][0-9]\.$1\." } jobstat() { typeset SEQNO STATUS SEQNO=$1 SEQNO=`printf "%0${SEQNO_WIDTH}d" $SEQNO` STATUS=`ls -1 $QUEUE_DIR | sed -n "s/^$SEQNO.\([RSW]\)\..*/\1/p"` STATUS=${STATUS:-N} echo $STATUS } queuestats() { { ls -1 $QUEUE_DIR } | info -f - } engine() { typeset ID FILE WRITE_SEQNO READ_SEQNO trap 'echo "$PROGNAME: WARNING: clearing up ... \\c" >&2; rm -fr $QUEUE_DIR; echo "done" >&2; exit 1' 1 2 15 mkdir -p $QUEUE_DIR WRITE_SEQNO=0 READ_SEQNO=0 while :; do #queuestats QLEN_ALL=`queuelen .` QLEN_STATIC=`queuelen S` QLEN_BEINGREAD=`queuelen R` QLEN_BEINGWRITTEN=`queuelen W` if [ $# != 0 -a $QLEN_ALL -lt $MAXQLEN ]; then FILE=$1 [ -r $FILE ] || error "$1 not accessible" shift queue $FILE $WRITE_SEQNO & # this is necessary or the queue appears empty in the next test WRITE_SEQNO=`expr $WRITE_SEQNO + 1` elif [ $QLEN_ALL = 0 ]; then debug 5 "engine: all queues are empty, presumably all done" break # this '&&' instead of '-a' stops second half being pointlessly evaluated elif [ $QLEN_BEINGREAD = 0 ] && [ `jobstat $READ_SEQNO` = S ]; then dequeue $READ_SEQNO & READ_SEQNO=`expr $READ_SEQNO + 1` fi sleep 1 done rm -fr $QUEUE_DIR } #shpp include utils.sh.shpp #shpp include gep.sh.shpp @ 1.1 log @Initial revision @ text @d5 1 a5 1 RCS_ID='$Header: /home/ahuxley/dev/work/eso/console/bin/RCS/console.shpp,v 1.7 2000/03/14 07:52:40 ahuxley Exp $' d15 1 a16 1 TMP_DIR=${TMP_DIR:-/var/tmp} d18 1 d26 3 d56 2 a57 2 LOCAL_WAV_FILE=$TMP_DIR/$PROGNAME.$$.local.wav REMOTE_WAV_FILE=$TMP_DIR/$PROGNAME.$$.remote.wav d61 8 a68 4 LOCAL_XTERM=`expr $DISPLAY : '\(.*\):0.0'` [ "X$LOCAL_XTERM" = X ] && internal "LOCAL_XTERM could not be calculated, please report this!" [ "X`remsh $OLD_ENWARE_HOST echo ok 2>/dev/null`" != Xok ] && error "remsh access to $OLD_ENWARE_HOST" [ -r $1 ] || error "$1 not accessible" d70 2 a71 1 trap 'echo "$PROGNAME: WARNING: clearing up ... \\c" >&2; rm -f $LOCAL_WAV_FILE; remsh $OLD_ENWARE_HOST rm -f $REMOTE_WAV_FILE; echo "done" >&2; exit 1' 1 2 15 d73 3 a75 3 info "converting to wav ..." # mpg123 cannot write to a pipe, but can write to stdout (WAV rewind error) $MPG123_CMD -q -w - - < $1 > $LOCAL_WAV_FILE 2>/dev/null d77 2 a78 2 info "transferring to play host ..." remsh $OLD_ENWARE_HOST ksh -c "\"cat > $REMOTE_WAV_FILE\"" < $LOCAL_WAV_FILE d80 11 a90 2 info "playing ..." remsh $OLD_ENWARE_HOST -n ksh -c "\"DISPLAY=$DISPLAY; export DISPLAY; $SENDSOUND_CMD -server $LOCAL_XTERM -wav $REMOTE_WAV_FILE; rm -f $REMOTE_WAV_FILE\"" d92 120 a211 1 rm -f $LOCAL_WAV_FILE @