By default, call recordings in FreePBX are captured in mono WAV format. However, modern AI-driven conversational intelligence and quality Assurance (QA) platforms typically require dual-channel (stereo) audio in lightweight formats like MP3 to accurately distinguish speakers and reduce transfer bandwidth.
With a custom post-processing script and a few minor adjustments to your global Asterisk variables, you can automatically convert FreePBX recordings to stereo MP3s without imposing significant CPU overhead on your PBX server.
NOTE: The configuration and script detailed below have been tested and verified on FreePBX 17 running on Debian 12.
Edit your globals_custom.conf file as follows:
SS=$
MONITOR_REC_OPTION = bD
MIXMON_FORMAT = raw
MIXMON_POST=/usr/local/bin/mix-stereo.sh ${SS}{CALLFILENAME}.${SS}{MON_FMT}
Create /usr/local/bin/mix-stereo.sh
#!/usr/bin/env bash
set -e
# Validate input
if [ -z "${1:-}" ]; then
echo "Error: No input file argument provided." >&2
exit 1
fi
IN_FILE="$1"
OUT_FILE="${IN_FILE%.raw}.mp3"
TODAY=$(date "+%Y-%m-%d")
DIR="/var/spool/asterisk/monitor/$(date "+%Y/%m/%d")"
# Encode to MP3 and update DB
if lame -r -s 8 --bitwidth 16 --signed --little-endian "$DIR/$IN_FILE" "$DIR/$OUT_FILE"; then
MYSQL_PWD="**********" mysql -u freepbxuser -s -N -D asteriskcdrdb -e \
"UPDATE cdr SET recordingfile='${OUT_FILE}' WHERE recordingfile='${IN_FILE}' AND calldate >= '${TODAY} 00:00:00'"
rm -f "$DIR/$IN_FILE"
else
echo "LAME encoding failed for $IN_FILE" >&2
exit 1
fi
To wrap up, execute:
$sudo chmod +x /usr/local/bin/mix-stereo.sh
$sudo chown asterisk /usr/local/bin/mix-stereo.sh
$ asterisk -rvvvvc
asterisk*CLI> dialplan reload