Top > ガイダンス送信pgm

***ガイダンス送信pgm [#y9695552]
【送信pgm】
># nano /etc/asterisk/scripts/dmr_monitor6.sh
<
 中身は次の通り
>
 #!/bin/bash
 
 # 設定
 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 /var/log/mmdvm/MMDVM_Bridge-*.log | 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が空でなく、3.0秒未満の場合に処理実行
        if [ -n "$duration" ] && [ "$(echo "$duration < 3.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]
 StartLimitIntervalSec=0
 Description=DMR Monitor and ASL3 TTS Playback Service
 After=asterisk.service
 
 [Service]
 Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 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
<
 自動起動はcron -e で
 5 9 * * * /usr/bin/systemctl stop dmr-monitor.service && /usr/bin/sleep 5 && /usr/bin/systemctl start dmr-monitor.service
 
&color(Red){''以下まだ工事中''};

リロード   新規 下位ページ作成 凍結解除 差分 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS