◆Open JTalk 読み上げ
文字数制限1024バイト
・インストール
sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001
Ubuntu Open JTalk その1 - Open JTalkをインストールする・Open JTalkのテストを行う - kledgeb
Ubuntu Open JTalk その2 - open_jtalkコマンドの説明 - kledgeb
Ubuntu Open JTalk その3 - MMDAgentのmeiの音声データを利用する・meiの音声データの使い方・ meiの音声で文章を読み上げるシェルスクリプト - kledgeb
◆xsel
選択範囲の文字を渡すのにはxselというコマンドを利用します。Xセッションのクリップボードを管理するコマンドで、-oオプションを指定することで選択範囲の文字列が利用できます。
・インストール
sudo apt install xsel
使用例 選択範囲の文字列が表示されます。
$ echo "$(xsel -o)"
◆sox
Open JTalk は文字数制限1024バイトの制限がある為改行で分割して音声ファイルを作成した後、合成する
音声の合成
・インストール
$ sudo apt install sox
選択した文字列を読み上げる
meiの音声データを使用していますので
ブラウザーで「MMDAgent」のページを開き、「MMDAgent "Sample Script"」の「Contents package」をクリックすれば、「MMDAgent」のサンプルをダウンロードできます。
解凍するとmeiホルダが有りますのでホームディレクトリに置いてください
下記ファイルをホームディレクトリに置いてください。
ファイルは 実行可能ファイルに変更してください。
mei.sh
#!/bin/bash
echo "hiroko"
text="$(xsel -o)"
#text="$(xsel --clipboard --output)"
#echo "$text"
text=`echo "$text" | sed s/"Ubuntu"/"ウブントゥ"/g`
text=`echo "$text" | sed s/"Linux"/"リナックス"/g`
text=`echo "$text" | sed s/"LibreOffce"/"リブレオフィス"/g`
text=`echo "$text" | sed s/"LibreOffice"/"リブレオフィス"/g`
text=`echo "$text" | sed s/"Global"/"グローバル"/g`
text=`echo "$text" | sed s/"package"/"パッケージ"/g`
text=`echo "$text" | sed s/"Contents"/"コンテンツ"/g`
text=`echo "$text" | sed s/"Script"/"スクリプト"/g`
text=`echo "$text" | sed s/"Sample"/"サンプル"/g`
text=`echo "$text" | sed s/"mei"/"メイ"/g`
text=`echo "$text" | sed s/"if"/"イフ"/g`
text=`echo "$text" | sed s/"for"/"フォー"/g`
text=`echo "$text" | sed s/"TEST"/"テスト"/g`
text=`echo "$text" | sed s/"test"/"テスト"/g`
text=`echo "$text" | sed s/"sed"/"セド"/g`
text=`echo "$text" | sed s/"PATH"/"パス"/g`
text=`echo "$text" | sed s/"chmod"/"チェンジモード"/g`
text=`echo "$text" | sed s/"ls"/"エルエス"/g`
text=`echo "$text" | sed s/"bin"/"ビン"/g`
text=`echo "$text" | sed s/"獣医師"/"ジュウ医師"/g`
text=`echo "$text" | sed s/"獣医"/"ジュウイ"/g`
text=`echo "$text" | sed s/"SPEED"/"スピード"/g`
text=`echo "$text" | sed s/"蓮舫"/"レンホウ"/g`
text=`echo "$text" | sed s/"嘉典"/"ヨシノリ"/g`
text=`echo "$text" | sed s/"Dimension"/"デミジョン"/g`
text=`echo "$text" | sed s/"Radial"/"ラジアル"/g`
text=`echo "$text" | sed s/"空対地ミサイル"/"クウ対地ミサイル"/g`
text=`echo "$text" | sed s/"なられた数多く"/"なられたカズ多く"/g`
text=`echo "$text" | sed s/"御霊(みたま)"/"御霊"/g`
text=`echo "$text" | sed s/"捧(ささ)"/"捧"/g`
#echo "$text"
dictionary=/var/lib/mecab/dic/open-jtalk/naist-jdic
if [ -z "$text" ]; then
echo "日本語の文章を指定してください。"
exit
fi
function talk(){
mkdir --p dum_mei
local voiceFile=~/mei/mei_$1.htsvoice
#textを改行で分割
IFS_ORIGINAL="$IFS"
IFS='
'
arr=($text)
IFS="$IFS_ORIGINAL"
count=0
for division_text in "${arr[@]}"; do
count=`expr $count + 1`
if [ 2 = `echo $count | wc -m` ]; then
noconut="00"$count
fi
if [ 3 = `echo $count | wc -m` ]; then
noconut="0"$count
fi
wavFile=~/dum_mei/open_jtalk_mei_$noconut"_"$1.wav
echo $wavFile
echo $division_text | open_jtalk -x $dictionary -m $voiceFile -ow $wavFile
done
if [ -f $wavFile ]; then
cd dum_mei
sox `ls *.wav` out.wav
aplay out.wav
rm -f *.wav
else
echo "WAVファイルの生成に失敗しました。"
fi
}
#talk angry
#talk bashful
#talk happy
talk normal
#talk sad
STOP.SH
#!/bin/bash
ARRY="$(ps aux | grep 'aplay out.wav')"
#ARRY='hiroko mayu ayano'
IFS=' '
set -- $ARRY
echo "${ARRY[0]}"
#echo $1
kill $2