【送信pgm】
# nano /etc/asterisk/scripts/dmr_monitor6.sh
中身は次の通り
#!/bin/bash
# 設定
log_file="/var/log/mmdvm/MMDVM_Bridge-$(date -u +%Y-%m-%d).log"
LETTERS_DIR="/usr/share/asterisk/sounds/en/letters"
DIGITS_DIR="/usr/share/asterisk/sounds/en/digits"
FIXED_FILE="/tmp/asl-tts-root/at-jj1yeg.ul"
OUTPUT="/var/lib/asterisk/sounds/final_speech.ul"
EXT=".ulaw"
echo "monitoring $log_file (sox integration version)..."
tail -n 0 -F "$log_file" | while read -r line; do
# 1. voice header 検知 (コールサインの抽出)
if echo "$line" | grep -q "received network voice header"; then
# コールサインを抽出して小文字に変換
callsign=$(echo "$line" | sed -n 's/.*from \(.*\) to TG.*/\1/p' | tr '[:upper:]' '[:lower:]' | xargs)
echo "Detected callsign: $callsign"
fi
# 2. end of transmission 検知
if echo "$line" | grep -q "received network end of voice transmission"; then
duration=$(echo "$line" | sed -n 's/.* transmission, \(.*\) seconds.*/\1/p' | tr -d '[:space:]')
# durationが空でなく、2.0秒未満の場合に処理実行
if [ -n "$duration" ] && [ "$(echo "$duration < 2.0" | bc)" -eq 1 ]; then
echo "short key detected ($duration s). generating speech for $callsign..."
# 音声ファイルリストの作成
FILE_LIST=""
for (( i=0; i<${#callsign}; i++ )); do
char="${callsign:$i:1}"
PARAMS="-t ul -r 8000 -c 1"
if [[ "$char" =~ [a-z] ]]; then
FILE_LIST="$FILE_LIST $PARAMS $LETTERS_DIR/${char}$EXT"
elif [[ "$char" =~ [0-9] ]]; then
FILE_LIST="$FILE_LIST $PARAMS $DIGITS_DIR/${char}$EXT"
fi
done
# sox で結合して一つのファイルにする
if [ -n "$FILE_LIST" ]; then
sox $FILE_LIST -t ul -r 8000 -c 1 "$FIXED_FILE" -t ul -r 8000 -c 1 "$OUTPUT"
# Asterisk で再生
echo "playing final_speech..."
asterisk -rx "rpt playback 52984 /var/lib/asterisk/sounds/final_speech"
fi
fi
fi
done
コマンドとして実行できるように
# chmod 755 /etc/asterisk/scripts/dmr_monitor6.sh
次のサービスとして登録し自動起動とする
# nano /etc/systemd/system/dmr-monitor.service
中身は
[Unit]
Description=DMR Monitor and ASL3 TTS Playback Service
After=asterisk.service
[Service]
ExecStart=/etc/asterisk/scripts/dmr_monitor6.sh
Restart=always
RestartSec=5
User=root
StandardOutput=append:/var/log/dmr_monitor.log
StandardError=inherit
[Install]
WantedBy=multi-user.target
これを起動させるが、その前に音声ファイル?を作成しておくこと。
/tmp/asl-tts-root/at-jj1yeg
以下まだ工事中