Raspberry Pi Zero 2 W上での「TTS音声からDMR RF送信」構築作業について、エラー回避や注意点をふまえた「完全再現手順(保存版)」


🎯【作業手順まとめ】

〜 TTS → PCM → AMBE → Analog_Bridge →(MMDVM_Bridge)→ RF送信 〜


【前提環境】

  • SBC: Raspberry Pi Zero 2 W
  • OS: Raspberry Pi OS(32bit Lite)
  • ユーザー名: pi-star
  • AMBE変換: md380-emu ソフトウェアエミュレーション
  • 目的: テキストから自動ID音声生成しDMRで自動送出

1️⃣ ディレクトリとユーザー権限の準備

sudo mkdir -p /opt/voice-id /opt/Analog_Bridge /opt/DVSwitch
sudo chown pi-star:pi-star /opt/voice-id /opt/Analog_Bridge /opt/DVSwitch

/opt配下はroot所有が多いので最初に自分の所有権に変更
→ 以降の操作で「許可がありません」エラーを回避


2️⃣ TTSエンジン(open_jtalk)/SoX のインストールと確認

sudo apt update
sudo apt install open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001 sox

soxはraw/pcm変換対応版
open-jtalkの辞書や音声ファイルの場所も要確認。


3️⃣ TTS〜PCM変換スクリプトの作成

/opt/voice-id/generate_pcm.sh

#!/bin/bash
MESSAGE="こちらはJJ2YYK尾張旭DMRデジピーターです"
WAV="/opt/voice-id/id.wav"
PCM="/opt/voice-id/id.pcm"

/usr/bin/open_jtalk \
  -x /var/lib/mecab/dic/open-jtalk/naist-jdic \
  -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice \
  -r 1.0 -s 48000 -ow "$WAV" <<< "$MESSAGE"

sox "$WAV" -r 8000 -c 1 -b 16 -e signed-integer -t raw "$PCM"

[ -s "$PCM" ] && echo "PCMファイルの生成に成功しました: $PCM" || echo "PCMファイルの生成に失敗しました。"

soxで「pcmエラー」対策→-t rawオプション必須!
MESSAGE部分を自由に変えてOK。

chmod +x /opt/voice-id/generate_pcm.sh
/opt/voice-id/generate_pcm.sh

4️⃣ md380-emu(AMBE変換エミュレータ)導入・ビルド

4-1. DMRToolsディレクトリ作成

mkdir -p ~/DMRTools
cd ~/DMRTools

4-2. Travis Goodspeed版md380toolsクローン

git clone https://github.com/travisgoodspeed/md380tools.git
cd md380tools/emulator

4-3. Makefile修正

CC=arm-linux-gnueabi-gccCC=gccに変更

nano Makefile
# CC=gcc -static -g  ←へ修正

sedコマンドでは置換されないこともあるので手動編集推奨

4-4. Python2インストール(ファームアンパック用)

sudo apt install python2

これがないとアンパックで「/usr/bin/env: python2: そのようなファイルやディレクトリはありません」エラーになる

4-5. シングルジョブでビルド(-j2禁止)

make clean all

「md380-emu.oが無い」エラー回避のため並列ビルドせず必ずシングルで実行!
2回目のmake allで全部揃う場合あり。

4-6. 実行ファイル確認

ls -l md380-emu

5️⃣ PCM→AMBE変換テスト

~/DMRTools/md380tools/emulator/md380-emu -e -i /opt/voice-id/id.pcm -o /opt/voice-id/id.ambe
ls -l /opt/voice-id/id.ambe

ファイルサイズが0でなければ成功


6️⃣ Analog_Bridgeの導入(GitHubクローン)

cd /opt/Analog_Bridge
git clone https://github.com/DVSwitch/Analog_Bridge.git src
cd src/bin
# Pi Zero 2 Wなら
cp Analog_Bridge.armhf /opt/Analog_Bridge/Analog_Bridge
chmod +x /opt/Analog_Bridge/Analog_Bridge

makeは不要。bin/にバイナリ同梱
必ず自分の権限でcp/chmod。root配下で直接作業しない。


7️⃣ Analog_Bridge設定ファイル配置・編集

cd /opt/Analog_Bridge
cp src/Analog_Bridge.ini Analog_Bridge.ini
nano Analog_Bridge.ini

ポイントのみ修正例:

[GENERAL]
decoderFallBack = true
useEmulator = true

[AMBE_AUDIO]
gatewayDmrId = 4401505   ;自局のDMRID
repeaterID   = 440150501 ;推奨
txTg         = 9         ;テスト時TG9
txTs         = 2         ;TS2
colorCode    = 1

useEmulator = true必須(md380-emu連携)
AMBE_AUDIO, USRPセクションのポート番号が後述のMMDVM_Bridgeと一致していることを確認


8️⃣ Analog_Bridge起動&送信テスト

cd /opt/Analog_Bridge
./Analog_Bridge Analog_Bridge.ini -e /opt/voice-id/id.ambe

-cオプションは不要、iniファイル名を最初に指定する
マクロファイルやsubscriberエラーは無視でOK


9️⃣ MMDVM_Bridge導入の準備(次ステップ)

  • 上記Analog_BridgeでAMBE送信パケット生成まで成功
  • RF送信にはMMDVM_Bridgeの設定・起動が必要

【本日つまずきやすいポイントまとめ】

  • /opt配下のパーミッションエラー対策:最初にsudo chown推奨
  • Makefile編集は手動推奨(sed効かないことあり)
  • python2インストール必須
  • md380-emuのビルドは-j無し(並列NG)
  • Analog_Bridgeは同梱バイナリ利用(make不要)
  • iniファイルのファースト引数指定・-c不要
  • 警告やsubscriber IDファイルエラーは無視してOK

📝【この続きは…】

  • MMDVM_Bridgeの導入→設定→RF送出(次工程)
  • ご希望に合わせてさらに詳細な手順を順次ご案内可能です!

このまとめを**そのまま「手順書」や「再現作業用メモ」としてご利用いただけます。
追加で書いておきたいポイントや、「ここをもっと細かく」といったご要望があればお伝えください!