From 77649fb6e63ee53b9c5da9f5de908da4217f7fff Mon Sep 17 00:00:00 2001 From: Jay Moore Date: Fri, 23 Sep 2022 20:42:43 -0400 Subject: [PATCH] new! improved! --- README.md | 17 +++++++++----- ajw.sh | 66 ++++++++++++++++++++++++++++++++++++++----------------- 2 files changed, 58 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index abf3e7d..31220f6 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ Playback logic uses internal counters to request files. This requires your files contain ONLY a track number, with or without leading zero. Only two digits for a maximum of 99 tracks are supported. Playback logic's context is called using extension pattern matching which dictates leading zero behavior -and passes some album information. +and passes information required for stand-alone playback routine to take over. ## How To Use/Setup @@ -87,9 +87,15 @@ But it is possible to use it manually with the above information. ## Asterisk Jukebox Wizard (ajw) HOWTO -The script automatically generates the album entry extensions, I've made every -effort to make sure they're in numerical order. If you want a specific order, -prefix your folder names. +The script will automatically generate a dialplan for a full jukebox. The script +has two methods of operation: + +- interactive: `./ajw.sh` +- non-interactive: `./ajw.sh name relative/jukeboxfolder introfile outrofile number-of-loops [loop-delay volume] + +You don't have to enter the loop-delay or volume arguments if you don't want; but +if you want to specify a volume, you have to specify a loop delay. Use 0 delay in +this case. The automatic nature of the script does require your folder/files to already be in place. By default, the script looks in `/var/lib/asterisk/sounds/en` for what @@ -97,7 +103,7 @@ you specify to be the jukebox root. If they are one directory deeper in your default sounds; you can specify that in the configuration. Examples: - `/var/lib/asterisk/sounds/en/jukeboxroot/albums` - All jukeboxes live in $asd -- `/var/lib/asterisk/sounds/en/astjuke/jukeboxroot/albums` - Jukebox roots live +- `/var/lib/asterisk/sounds/en/astjuke/jukeboxroot/albums` - Jukebox root live under another folder (in this case, astjuke/) You can modify the location of your Asterisk Sounds directory by modifying the @@ -172,6 +178,7 @@ pressing 0. # History ``` +24-SEP-2022: Script now takes arguments for even faster creation. 22-SEP-2022: Merge ajw repo. Make script pass shellcheck. 21-SEP-2022: Add some sanitization. Broke repositories. Fixed 'em. 14-AUG-2022: Fix cartplayer extension fallthrough. Add HOWTHISWORKS.MD. Added ajw.sh diff --git a/ajw.sh b/ajw.sh index 8138fea..490dfc8 100644 --- a/ajw.sh +++ b/ajw.sh @@ -1,39 +1,42 @@ #!/bin/bash -#ajw v1.2 - jukebox for asterisk wizard -#Jay Moore/NQ4T - https://git.pickmy.org/dewdude/ajw + +#ajw v1.50 - jukebox for asterisk wizard +#Jay Moore/NQ4T - https://git.pickmy.org/dewdude/Asterisk_Jukebox #Twitter: @Music_OnHold #Licensed under GPL-3.0-or-later +# USAGE: +# Interactive: ./ajw.sh +# Non-Interactive: ./ajw.sh name relative/path-to-juke introfile goodbye loop# [sec-delay volume] +# (sec-delay default is none. volume is -3. If you specify volume, you must at least 0 sec-delay) + # Works like this: # Put all your albums in your Asterisk sounds directory: /var/lib/asterisk/sounds/en/(jukeboxesdir)/jukebox root/album/track#.ulaw # Run script, enter prompts. (jukeboxesdir) is an optional sub-folder in case your jukeboxes are in a extra subdirectory # Copy .conf, include in extensions.conf, assign extension. # asd defines the default location of your asterisk sounds - asd=/var/lib/asterisk/sounds/en/ # main context configuation - setup() { printf "[%s-main]\nexten = s,1,Answer()\nsame =n,Set(VOLUME(TX)=%s)\nsame = n,Set(c=%s-main)\nsame = n(return),Set(m=1)\nsame = n(loop),Background(%s/%s)\n" "$name" "$vol" "$name" "$rootfolder" "$introfile" [ -n "$delay" ] && printf "same = n,WaitExten(%s)\n" "$delay" -printf "same = n,Set(m=\$[\${m} + 1])\nsame = n,GoToIf(\$[\"\${m}\" > \"%s\"]?loop)\nsame = n(goodbye),Background(%s/%s)\nsame = n,Hangup()\n\n" "$loop" "$rootfolder" "$goodbye" -} >> $name-juke.conf +printf "same = n,Set(m=\$[\${m} + 1])\nsame = n,GoToIf(\$[\"\${m}\" > \"%s\"]?loop)\nsame = n(goodbye),Background(%s/%s)\nsame = n,Hangup()\n\nexten = i,1,Playback(option-is-invalid)\nsame = n,GoTo(s,return)\n\n" "$loop" "$rootfolder" "$goodbye" +} >> "$name"-juke.conf # album selections - album() { printf "exten = _%02dXX,1,Set(aa=%s/%s)\n" "$a" "$rootfolder" "$folder" [ -z "$ld" ] && printf "same = n,GoToIf(\$[\"\${EXTEN:-2}\" = \"00\"]?8track-player,#%s,1)\n" "$tc" || printf "same = n,GoToIf(\$[\"\${EXTEN:-2}\" = \"00\"]?8track-player,*%s,1)\n" "$tc" -printf "same = n,GoToIf(\$[\"\${EXTEN:-2}\" > \"%s\"]?9999)\n" "$limit" +printf "same = n,GoToIf(\$[\"\${EXTEN:-2}\" > \"%s\"]?i,1)\n" "$limit" [ -z "$ld" ] && printf "same = n,GoToIf(\$[\"\${EXTEN:-2}\" < \"10\"]?cart-player,#\${EXTEN:-1},1)\n" -printf "same = n,GoTo(cart-player,*\${EXTEN:-2},1)\nsame = 9999,Playback(option-is-invalid)\nsame =n,GoTo(%s-main,s,1)\n\n" "$name" -} >> $name-juke.conf +printf "same = n,GoTo(cart-player,*\${EXTEN:-2},1)\n\n" +} >> "$name"-juke.conf # main - -printf "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n |a|j|w| - asterisk jukebox wizard\n version 1.10 - Jay Moore/NQ4T\n https://git.pickmy.org/dewdude/jaw\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\n\n" +interactive() { +printf "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n |a|j|w| - asterisk jukebox wizard\n version 1.50 - Jay Moore/NQ4T\ngit.pickmy.org/dewdude/Asterisk_Jukebox\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\n\n" printf "Pick a name/identifier for this jukebox: " read -r name printf "\nEnter the folder your jukebox roots live under. (Leave blank if they're under %s): " "$asd" @@ -50,25 +53,48 @@ printf "\nEnter the filename of your exit file: " read -r goodbye printf "\nEnter a channel volume. (I recommend -3, also the default if you leave this blank): " read -r vol -[ -n "$vol" ] && vol="-3" +[ -z "$vol" ] && vol=-3 # Change the -3 if you want a different default printf "\nWriting Basic Configuration.\n\nAuto-Generating Albums\n\n" -[ -n "$sd" ] && rootfolder=$sd/$rootfolder +[ -n "$sd" ] && rootfolder=$sd/$rootfolder setup; +loop; +bye; +} # album context loop - -dir=$(find $asd/$rootfolder -mindepth 1 -type d -printf '%f\n' | sort -n) +loop() { +dir=$(find "$asd""$rootfolder" -mindepth 1 -type d -printf '%f\n' | sort -n) a=0 for folder in $dir do -limit=$(find $asd/$rootfolder/$folder/ -name "*.ulaw" | wc -l) +ulaw=$(find $asd/"$rootfolder"/"$folder"/ -name "*.ulaw" -printf "%f\n") +limit=$(printf "%s\n" "$ulaw" | wc -l) +ld=$(printf "%s\n" "$ulaw" | awk '/^0/') tracks=$((limit + 1)) tc=$(printf "%02d" $tracks) -ld=$(find $asd/$rootfolder/$folder/ -name "*.ulaw" -printf "%f\n" | awk '/^0/') -#[ -z "$ld" ] && lz=0 || lz=1 album; a=$((a + 1)) done +} +# GTFO, BYE +bye() { printf "\n\nDone.\n\n\nYour jukebox is located at %s-juke.conf.\n" "$name" -printf "Make sure to include it and the player conf in your dial plan somewhere.\n\n\n\n" \ No newline at end of file +printf "Make sure to include it and the player conf in your dial plan somewhere.\n\n" +exit +} + +# do stuff, or don't do stuff; then do stuff. +[ -z "$1" ] && interactive; +[[ "$#" -lt 5 ]] && printf "Invalid configuration. Entire required arguments or with none for interactive mode.\n" && exit +name=$1 +rootfolder=$2 # this is the full path relative to the sounds dir +introfile=$3 +goodbye=$4 +loop=$5 +[[ -n "$6" && $6 -ne 0 ]] && delay=$6 || delay= # Delay should be null if not needed +[ -n "$7" ] && vol=$7 || vol=-3 # You can change the default volume here. +printf "|a|j|w| 1.50 - PRO USER MODE ACTIVATE\n" +setup; +loop; +bye; \ No newline at end of file