<div dir="ltr">This is the most compact I can make it just by tidying up your variables and playbacks:<br><br>    same => n,Set(ARRAY(minSpeech,playFile)=minutes&and,/var/lib/asterisk/sounds/en/abandon-all-hope)<br>    same => n,Gosub(setup)<br>    same => n,set(playFile=/tmp/reno_project-system)<br>    same => n,Gosub(setup)<br>    same => n,Hangup(); tidy up<br><br>    same => n(setup),Set(totalTime=$[CEIL(${STAT(s,${playFile}.alaw)} / 8000)])<br>    same => n(play),ControlPlayback(${playFile},0,3,1,045679#*,,2,o(${CPLAYBACKOFFSET}))<br>    same => n,GosubIf($["${CPLAYBACKSTATUS}"="USERSTOPPED"]?pause)<br>    same => n,GoToIf($["${CPLAYBACKSTATUS}"="SUCCESS"]?done:play)<br><br>    same => n(pause),Set(ARRAY(totalMin,totalSec,pauseTime)=$[FLOOR(${totalTime} / 60)],$[REMAINDER(${totalTime},60)],$[{CEIL(${CPLAYBACKOFFSET})} / 1000])<br>    same => n,Set(pauseTime=${MATH(${pauseTime}+0,i)})<br>    same => n,Set(ARRAY(pauseMin,pauseSec)=$[FLOOR(${pauseTime} / 60)],$[REMAINDER(${pauseTime},60)])<br>    same => n,Playback(dictate/paused&digits/at)<br>    same => n,ExecIF($[${pauseTime} > 59 ]?Playback(digits/${pauseMin}&${minSpeech}))<br>    same => n,SayNumber(${pauseSec})<br>    same => n,Playback(seconds&vm-duration)<br>    same => n,ExecIF($[${totalTime} > 59 ]?Playback(digits/${totalMin}&${minSpeech}))<br>    same => n,SayNumber(${totalSec})<br>    same => n,Playback(seconds)<br>    same => n,Return() ; continue where we left<br>    same => n(done),Set(CPLAYBACKOFFSET=0)<br>    same => n,Return()<br><br></div>