Convert Audio Files for Asterisk

Administration -- Last reviewed 2026-06-13 audio sox music-on-hold prompts Found this useful? Upvote it. ×

Convert Audio Files for Asterisk

For traditional narrowband telephony, Asterisk most commonly uses 8 kHz, 16-bit, mono PCM (.wav or .sln). It also supports wideband and other codecs: 16 kHz signed-linear (.sln16), G.722 (.g722), GSM (.gsm), mu-law/A-law (.ulaw/.alaw), and more. Convert to the format that matches what your endpoints actually use.

Single file with sox

# WAV to Asterisk-native WAV (8kHz mono)
sox input.wav -r 8000 -c 1 -b 16 output.wav

# WAV to GSM (smaller files, lower quality)
sox input.wav -r 8000 -c 1 output.gsm

# MP3 to WAV
sox input.mp3 -r 8000 -c 1 -b 16 output.wav

If sox complains about MP3 support, install the libsox-fmt-mp3 package (Debian/Ubuntu) or use ffmpeg instead.

Single file with ffmpeg

# Any format to Asterisk WAV (narrowband, 8kHz)
ffmpeg -i input.mp3 -ar 8000 -ac 1 -sample_fmt s16 output.wav

# 16 kHz signed-linear (SLN16) — wideband PCM
ffmpeg -i input.mp3 -ar 16000 -ac 1 -sample_fmt s16 output.sln16

# Actual G.722 (ADPCM) — use .g722 extension
ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a g722 output.g722

Batch convert a directory

#!/bin/bash
# convert-sounds.sh
# Convert all audio files in a directory to Asterisk-native format.
#
# Usage: ./convert-sounds.sh /path/to/source /path/to/dest

SRC="${1:-.}"
DEST="${2:-./converted}"

mkdir -p "$DEST"

for f in "$SRC"/*.{wav,mp3,ogg,flac} 2>/dev/null; do
    [ -f "$f" ] || continue
    base=$(basename "${f%.*}")
    echo "Converting: $base"
    sox "$f" -r 8000 -c 1 -b 16 "$DEST/$base.wav" 2>/dev/null ||
        ffmpeg -y -i "$f" -ar 8000 -ac 1 -sample_fmt s16 "$DEST/$base.wav" 2>/dev/null
done

echo "Done. Files in $DEST/"

The script tries sox first, falls back to ffmpeg. Handles WAV, MP3, OGG, and FLAC input.

Batch convert MOH to multiple formats

Some MOH configurations benefit from having files in several formats so Asterisk can pick the best match without transcoding:

#!/bin/bash
# convert-moh.sh
# Convert MP3 files to WAV, GSM, and ULAW for music on hold.
#
# Usage: ./convert-moh.sh /path/to/mp3s /var/lib/asterisk/moh

SRC="${1:-.}"
DEST="${2:-/var/lib/asterisk/moh}"

mkdir -p "$DEST"

for f in "$SRC"/*.mp3; do
    [ -f "$f" ] || continue
    base=$(basename "${f%.*}")
    echo "Converting: $base"

    # WAV (best quality for ulaw/alaw endpoints)
    sox "$f" -r 8000 -c 1 -b 16 "$DEST/$base.wav"

    # GSM (smallest file size)
    sox "$f" -r 8000 -c 1 "$DEST/$base.gsm"

    # ULAW (raw G.711)
    sox "$f" -r 8000 -c 1 -t ul "$DEST/$base.ulaw"
done

echo "Done. Converted $(ls "$DEST"/*.wav 2>/dev/null | wc -l) files."

Tips

User Notes

Know a tip or gotcha for this topic? Share it below and help others.

Contribute a note

Share a tip, gotcha, or practical example. Keep it under 2000 characters. No questions (use the Asterisk community forums for support). Wrap code in backticks.

Moderated before publishing. Email never shown.
Related Snippets