updated for pipewire with pw-cat
[feisty_meow.git] / scripts / multimedia / sound_play.sh
index f499d30ba349a28b4d868c7c4ab48fafa2a7082f..a934799813bfd92b855ead0cc2b3a1398b5d4404 100644 (file)
@@ -2,32 +2,62 @@
 
 # play the sound files specified.
 
-source "$FEISTY_MEOW_SCRIPTS/core/functions.sh"  # provides psfind.
+source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh"
 
 if [ $# -lt 1 ]; then
   #echo no sound file specified.
   exit 0;
 fi
 
-export PLAYCMD=/usr/bin/play
-if [ ! -f "$PLAYCMD" ]; then
-  PLAYCMD=echo
-fi
+export BASIC_PLAY_CMD='echo Unknown basic sound player...'
 
-if [ ! -z "$(psfind artsd)" ]; then
-  # we see artsd running...
-  PLAYCMD=artsplay
-elif [ ! -z "$(psfind esd)" ]; then
-  # we see esd running...
-  PLAYCMD=esdplay
+if [ -f "/usr/bin/play" ]; then
+#echo we see /usr/bin/play available...
+  BASIC_PLAY_CMD=/usr/bin/play
 elif [ ! -z "$WINDIR" ]; then
-  # kludge for win32; we provide our own sound player.
-  PLAYCMD=playsound
+#echo "kludge for win32; we provide our own sound player."
+  BASIC_PLAY_CMD=playsound
+elif [ ! -z "$(whichable afplay)" ]; then
+#echo we see afplay available...
+  BASIC_PLAY_CMD=afplay
+elif [ ! -z "$(psfind artsd)" ]; then
+#echo we see artsd running...
+  BASIC_PLAY_CMD=artsplay
+elif [ ! -z "$(psfind esd)" ]; then
+#echo  we see esd running...
+  BASIC_PLAY_CMD=esdplay
+elif [ ! -z "$(psfind pulseaudio)" ]; then
+#echo we see pulse running...
+  BASIC_PLAY_CMD="padsp aplay"
+elif [ ! -z "$(whichable pw-cat)" ]; then
+  BASIC_PLAY_CMD="pw-cat -p"
+else
+  echo "I don't know how to play basic sound files for this OS and sound system."
+fi
+
+export MP3_PLAY_CMD='echo Unknown mp3 player...'
+
+if [ ! -z "$(whichable mplayer)" ]; then
+  MP3_PLAY_CMD=mplayer
+else
+  echo "I don't know how to play mp3 files for this OS and sound system."
 fi
 
-# play the sounds individually; playsound can handle multiple files, but
-# "play" doesn't want to on some systems.
-for i in $*; do $PLAYCMD $i >/dev/null 2>&1; done
+# play the sounds individually; some apps like playsound can handle multiple
+# files, but "/usr/bin/play" doesn't want to on some systems.
+for filename in $*; do 
+  case "$filename" in
+    *wav)
+    $BASIC_PLAY_CMD $filename >/dev/null 2>&1;
+    ;;
+    *mp3)
+    $MP3_PLAY_CMD $filename >/dev/null 2>&1;
+    ;;
+    *)
+    echo "I don't know the file extension here: $filename"
+    ;;
+  esac
+done
 
 exit 0