11 сент. 2025 г.

Asterisk sequence of audio files playback

The directory for every queue contains sequence of greetings named as 1.wav, 2.wav, 3.wav, etc.
Required to play those files before enter queue, in ascending order.


[subPlaySequence]
exten => start,1,NoOp(Play sequence from announce/queue/${ARG1})
   same => n,Set(i=1)
   same => n,While($[${i} < 15])
   same => n,Set(exists=${STAT(e,${ASTDATADIR}/sounds/ru/announce/queue/${ARG1}/${i}.wav)})
   same => n,ExecIf($[${exists} = 1]?Playback(announce/queue/${ARG1}/${i}))
   same => n,Set(i=$[${i} + 1])
   same => n,EndWhile
   same => n,Return

[incoming]
exten => 600,1,NoOp(${CALLERID(num)} Call to ${EXTEN})
 same => n,Answer()
 same => n,GoSub(subPlaySequence,start,1(callcenter))
 same => n,Queue(callcenter,120)

Asterisk mp3 mono monitor vs stereo monitor (left channel - one side, right channel - another)

[macro-recording]
exten => s,1,GoToIf($["${RECORDING}" = "1"]?yes:no)
exten => s,n(yes),Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
exten => s,n,Set(FULL_DIR=${DIR_RECORDS}${STRFTIME(${EPOCH},,%Y)}/${STRFTIME(${EPOCH},,%m)}/${STRFTIME(${EPOCH},,%d)}/)
exten => s,n,Set(monopt=nice -n 19 /usr/bin/lame -b 32  --silent "${FULL_DIR}${fname}.wav"  "${FULL_DIR}${fname}.mp3" && rm -f "${FULL_DIR}${fname}.wav" && chmod o+r "${FULL_DIR}${fname}.mp3");
exten => s,n,Set(CDR(filename)=${fname}.mp3);
exten => s,n,Set(CDR(realdst)=${ARG2});
exten => s,n,MixMonitor(${FULL_DIR}${fname}.wav,b,${monopt});
exten => s,n(no),Verbose(Exit record);

[macro-stereorecording]
exten => s,1,GoToIf($["${RECORDING}" = "1"]?yes:no)
exten => s,n(yes),Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
exten => s,n,Set(FULL_DIR=${DIR_RECORDS}${STRFTIME(${EPOCH},,%Y)}/${STRFTIME(${EPOCH},,%m)}/${STRFTIME(${EPOCH},,%d)}/)
exten => s,n,Set(monwav=nice -n 19 /usr/bin/sox -M "${FULL_DIR}${fname}-in.wav" "${FULL_DIR}${fname}-out.wav" "${FULL_DIR}${fname}-joint.wav" && );
exten => s,n,Set(monmp3=nice -n 19 /usr/bin/lame -b 32 --silent "${FULL_DIR}${fname}-joint.wav" "${FULL_DIR}${fname}.mp3" && );
exten => s,n,Set(moncleanup=rm -f ${FULL_DIR}${fname}*.wav && chmod o+r "${FULL_DIR}${fname}.mp3");
exten => s,n,Set(CDR(filename)=${fname}.mp3);
exten => s,n,Set(CDR(realdst)=${ARG2});
exten => s,n,MixMonitor(${FULL_DIR}${fname}.wav,bSr(${FULL_DIR}${fname}-in.wav)t(${FULL_DIR}${fname}-out.wav),${monwav}${monmp3}${moncleanup});
exten => s,n(no),Verbose(Exit stereo record);