nix-configs

Personal NixOS and home-manager configuration files
Log | Files | Refs

pbx.nix (1840B)


      1 {pkgs, ...}:
      2 
      3 let
      4   pbx = pkgs.writeShellScriptBin "pbx" ''
      5 
      6 set -euo pipefail
      7 
      8 usage() {
      9 local prog=''${0##*/}
     10 cat <<EOF
     11 Usage:
     12   $prog <model> <input> [output] [--volume N]
     13 
     14 Examples:
     15   $prog samsung greeting.mp3
     16   $prog samsung greeting.mp3 output.wav
     17   $prog gamma prompt.flac --volume 0.8
     18   $prog webex prompt.wav output.wav --volume 0.75
     19 EOF
     20 exit 1
     21 }
     22 
     23 VOLUME=""
     24 POSITIONAL=()
     25 
     26 while [[ $# -gt 0 ]]; do
     27 	case "$1" in
     28 		--volume)
     29 			[[ $# -ge 2 ]] || {
     30 				echo "--volume requires a value"
     31 				exit 1
     32 			}
     33 			VOLUME="$2"
     34 			shift 2
     35 			;;
     36 		-h|--help)
     37 			usage
     38 			;;
     39 		*)
     40 			POSITIONAL+=("$1")
     41 			shift
     42 			;;
     43 	esac
     44 done
     45 
     46 set -- "''${POSITIONAL[@]}"
     47 
     48 [[ $# -ge 2 && $# -le 3 ]] || usage
     49 
     50 MODEL=$(tr '[:upper:]' '[:lower:]' <<<"$1")
     51 INPUT="$2"
     52 
     53 if [[ $# -eq 3 ]]; then
     54 	OUTPUT="''${3%.*}.wav"
     55 else
     56 	OUTPUT="''${INPUT%.*}.wav"
     57 fi
     58 
     59 [[ -f "$INPUT" ]] || {
     60 	echo "Input file not found."
     61 	exit 1
     62 }
     63 
     64 case "$MODEL" in
     65 	samsung|3cx|webex) CODEC_ARGS=(-codec:a pcm_s16le -ab 128k) ;;
     66 	lg-emg|lg-ucp|panasonic|gamma) CODEC_ARGS=(-codec:a pcm_mulaw -ab 64k) ;;
     67 	lg-hosted) CODEC_ARGS=(-codec:a pcm_s16le -ab 64k) ;;
     68 	*) echo "Unknown model '$MODEL'" && exit 1 ;;
     69 esac
     70 
     71 FFMPEG_ARGS=()
     72 
     73 if [[ -n "$VOLUME" ]]; then
     74 	FFMPEG_ARGS+=(-af "volume=$VOLUME")
     75 fi
     76 
     77 # Avoid overwriting the input if converting an existing WAV.
     78 if [[ "$(realpath "$INPUT")" == "$(realpath -m "$OUTPUT")" ]]; then
     79 	BACKUP="''${INPUT%.wav}.original.wav"
     80 
     81 	if [[ -e "$BACKUP" ]]; then
     82 		i=1
     83 		while [[ -e "''${INPUT%.wav}.original.''${i}.wav" ]]; do
     84 			((i++))
     85 		done
     86 		BACKUP="''${INPUT%.wav}.original.''${i}.wav"
     87 	fi
     88 
     89 	mv "$INPUT" "$BACKUP"
     90 	INPUT="$BACKUP"
     91 
     92 	echo "Original renamed to $BACKUP"
     93 fi
     94 
     95 ${pkgs.ffmpeg}/bin/ffmpeg -i "$INPUT" -ar 8000 -ac 1 "''${CODEC_ARGS[@]}" "''${FFMPEG_ARGS[@]}" "$OUTPUT"
     96 
     97 echo "Created $OUTPUT"
     98 
     99   '';
    100 in {
    101   environment.systemPackages = [pbx];
    102 }