気の向くままに辿るIT/ICT/IoT
インターネット

Asteriskガイド音声の変更を検討

ホーム前へ次へ
Asteriskとは?

Asteriskガイド音声の変更を検討

Asteriskガイド音声の変更を検討

2026/04/14

 運用中のpjsipなAsteriskに050 plus収容スマホ/パソコン/HT-813アナログ電話の音声ガイドの音声変更を模索した話。

動機

 久々の手持ち無沙汰も手伝って、ふと、思い立ったに過ぎません。

 最初、イントネーションはオリジナル音声の方が良好も自作スマートスピーカーのOpen JTalkで使っているmei(mei_happy)さんをベースに大人びさせるべく、soxとかでピッチ変える程度にしてみようと一括変換して一気に試聴。

 んー、気に入っている自身としては、mei_happyそのものもわずかにピッチを替えたバージョンも十分、許容範囲も、やっぱり、イントネーションは音声生成AIで調整、もしくはオリジナル音声作っちゃうのもありかと探すと素晴らしくうってつけなモデルを発見。

 どうしよっかな。

Asterisk音声をbash/mei_happy/soxで一括置換

 当初、小難しく考えて、あれ?意外と簡単にいかないのか?と思ったものの、スマートスピーカーで使わせてもらったjsayスクリプトに倣えば簡単なことに気づきました。

local_pc $ scp -r raspberry_pi.local:/var/lib/asterisk/sound/ja path/to/sound/
local_pc $ mkdir -p path/to/asterisk/sound/ja_mei
local_pc $ cp path/to/sound/core-sounds-ja.txt path/to/asterisk/sound/ja_mei/
local_pc $ cd path/to/asterisk/sound/ja_mei
local_pc $ vi astvoice_batch_replace.sh
#!/bin/bash
 
WAV_FILE=~/path/to/sound/jsay_${RANDOM}.wav
TARGET_DIR=~/path/to/asterisk/sound/ja_mei
 
function mkfile() {
  local line=$1
  local savefile=$2
  if [[ $line =~ .*\/.* ]]; then
    tmp_fname=`echo $line | cut -d@ -f1`
 
    dirname=`echo $tmp_fname | cut -d/ -f1`
    mkdir $TARGET_DIR/$dirname
    fname=`echo $tmp_fname | cut -d/ -f2`.wav
    ret=`sox -v 3 $savefile -r 8k $TARGET_DIR/$dirname/$fname pitch -150`
  else
    fname=`echo $line | cut -d@ -f1`.wav
    ret=`sox -v 3 $savefile -r 8k $TARGET_DIR/$fname pitch -150`
  fi
  echo ret
}
 
while read lines
do
  line=`echo ${lines} | awk -F": " '{print $1 "@" $2}'`
  b=""
  fname=""
  mkfile=""
  if [[ $line =~ \;.* ]]; then
    b=1
  elif [[ $line =~ .*\<.* ]]; then
    b=1
  elif [[ $line =~ .*\[.* ]]; then
    b=1
  fi
 
  if [ "$b" == "1" ]; then
    :
  else
    echo $line | cut -d@ -f2 | open_jtalk \
    -x /var/lib/mecab/dic/open-jtalk/naist-jdic \
    -m /usr/share/hts-voice/mei/mei_happy.htsvoice \
    -ow $WAV_FILE \
    && mkfile $line $WAV_FILE \
    && rm -f $WAV_FILE
  fi
done < $TARGET_DIR/core-sounds-ja.txt
local_pc $ chmod u+x astvoice_batch_replace.sh
local_pc $ ./astvoice_batch_replace.sh
local_pc $ aplay `find ~/path/to/asterisk/sound/ja_mei -name "*.wav"`
local_pc $

 Asteriskサーバ上のsound/jaディレクトリをローカルにコピー。

 ローカルPCに置換後の音声ファイル保存ディレクトリ用のディレクトリを作成、[ファイル名]と[音声テキスト]から成るcore-sounds-ja.txtをsound/jaからsound/ja_meiにコピー。

 sound/jaパスに移動、仮にastvoice_batch_replace.shを書き、実行権限を与えて実行し、一括置換後、alsaのaplayなり、soxのplayなりで一気に試聴、確認。

 良ければ、サーバに上げて善きディレクトリに配置するなり、どっかからソフトリンクを張るなりしてsudo chown asterisk:asteriskしておけばOK。

Irodori-TTSで音声変換や生成

 すごいの発見しちゃいました、数秒のサンプル音声や出力したい音声テキスト、加えて、どんな風な話し方にしたいかのテキスト、絵文字を使うことで感情表現できたりしつつ、こんな流暢な日本語を、しかも無料で生成できるなんてビックリと思ったのが、Irodori-TTS。

 前述のAsterisk音声ファイル一括置換スクリプトのopen_jtalkコマンド部をIrodori-TTS CLIと差し替えて--textオプション値の入力テキストを渡す程度で、一括置換自体は、いけるでしょう。

 ただ、自身のマシン環境からして推論1件に1分ちょいとしても370件程度だから精度が一貫してたとして6時間超、1件につきバッチは複数にしないとダメだろうから...となると...放置しとくにしても2桁時間突入も十分あり得る...、というわけで二の足踏み踏み中というか、先送りしようかなと。

備考

 イントネーションのことは忘れてmei_happy、時間かかってもAIで生成した音声、Asteriskのオリジナル音声...、どうしよっかな。

ホーム前へ次へ