音声合成プログラムのインストール
音声合成エンジン「openJTalk」をインストールするためのシェルスクリプト「setup_tts.sh」を実行しましょう。途中で続けるかどうか聞かれたら、「Y」(はい)と答えてください。
sh setup_tts.sh
#! /bin/bash # 音声合成プログラムopenJTalk(日本語)とflite(英語)のインストール echo "Step1=openJTalk標準パッケージのインストール" sudo apt-get -y install open-jtalk # プログラム本体 sudo apt-get -y install open-jtalk-mecab-naist-jdic # 辞書 sudo apt-get -y install hts-voice-nitech-jp-atr503-m001 # 音響モデル。標準の男性声。 echo "Step2=MMD Agentから音響モデルMeiを取得" # MMD Agent(http://www.mmdagent.jp/) cd /tmp # カレントディレクトリーを /tmp に移動。 wget http://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.7/MMDAgent_Example-1.7.zip # MMDAgent_Example-1.7.zip の取得 unzip MMDAgent_Example-1.7.zip MMDAgent_Example-1.7/Voice/* # MMDAgent_Example-1.7.zip の展開 sudo cp -r MMDAgent_Example-1.7/Voice/mei/ /usr/share/hts-voice # Meiの音響データを/usr/share/hts-voiceへコピー echo "Step3=/var/openjtalkディレクトリーが存在していなければ作成する" if [ ! -e /var/openjtalk ]; then sudo mkdir /var/openjtalk # /var/openjtalkディレクトリー作成 sudo chown pi.pi /var/openjtalk # 所有者 pi、所有グループ pi を指定 fi echo "Step4=fliteのインストール" sudo apt-get -y install flite echo "設定完了"
音声合成サンプルの実行
音声合成できるかどうか、試してみましょう。サンプルプログラム「sample_talk1.py」を実行してみてください。「こんにちは」「Hello!」と声がしたら成功です。Ctrl+Cで終了してください。
python3 sample_talk1.py
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Sample Code : 音声合成サンプル # モジュールのインポート from time import sleep # ウェイト処理 import subprocess # 外部プロセスを実行するモジュール import sys # 変数 ttsJpn = "exec_talkJpn.sh" # 日本語発話シェルスクリプトのファイル名 ttsEng = "exec_talkEng.sh" # 英語発話シェルスクリプトのファイル名 # メインループ try: while (True): cmds = ['sh',ttsJpn, 'こんにちは'] # コマンドリストの作成 proc = subprocess.Popen(cmds, stdout=subprocess.PIPE) # コマンドの呼び出し proc.communicate() # コマンド実行プロセスが終了するまで待機 cmds = ['sh',ttsEng, 'Hello'] # コマンドリストの作成 proc = subprocess.Popen(cmds, stdout=subprocess.PIPE) # コマンドの呼び出し proc.communicate() # コマンド実行プロセスが終了するまで待機 except KeyboardInterrupt: print (' 終了しました') sys.exit(0)
日本語をしゃべらせる
上記プログラムの中で利用しているシェルスクリプトを利用すれば、直接コマンドラインから喋らせることもできます。
sh exec_talkJpn.sh "おはよう"
#!/bin/bash # 音声合成(Open JTalk)起動スクリプト # メッセージがない場合は終了 CMD=`basename $0` if [ $# -lt 1 ]; then echo "Usage: ${CMD} <message>" exit 1 # エラーコード 1で終了 fi HTSVOICE=/usr/share/hts-voice/mei/mei_normal.htsvoice # 音声データファイル名 DICDIRE=/var/lib/mecab/dic/open-jtalk/naist-jdic/ # 形態素解析ソフトMeCabの辞書ディレクトリ名 VOICEDATA=/tmp/voice.wav # 生成する音声合成データファイル名 sudo echo "$1" | open_jtalk \ -x $DICDIRE \ -m $HTSVOICE \ -ow $VOICEDATA \ -s 55000 \ -b 0.0 \ -r 1.0 \ -fm 0.0 \ -u 0.0 \ -jm 1.0 \ -jf 1.0 \ -z 10000 aplay -q -D plughw:0,0 $VOICEDATA # sudo rm -f $VOICEDATA exit 0
英語をしゃべらせる
英語も簡単に音声合成できます。下記のようにコマンドに続けてシングルクォーテーションで囲って英語を記述するだけです。
sh exec_talkEng.sh 'Hello'
#!/bin/bash # 音声合成(flite)起動スクリプト VOICEDATA=/tmp/voice.wav sudo espeak -v "english"+f3 -p 99 -w $VOICEDATA $1 aplay -D plughw:0,0 $VOICEDATA #sudo rm -f $VOICEDATA
もっと大きな音を出す
左記の位置に100kΩの抵抗をハンダづけすることで、音量を2倍にすることができます。