(2019-03-17 初稿 - 2021-05-12 転記 -2022-02-17 追記)
はじめに
Raspberry Pi3(ラズパイ)の電源を24時間電源ONにしているので、人が近づいて来たら「こんにちは」等とあいさつしたり、パワーポイントの資料がプレゼンできたら、さらに有効に活用できそう。
このページでは、Raspberry Pi3に Open Jtalkのライブラリを使ってしゃべってもらう設定を行う。
なお、このページを記載するにあたり、以下のページを参照した。というか、そのまま利用させていただいた(多謝)。
ネットで検索すると、他にもたくさん有益なページがあるので、ぜひ検索を。(^^)/
インストール
上記サイトの記述にあるとおり、Open Jtalkのライブラリと音声ファイルをインストールする。
sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001
上記インストールが終了したら、以下のとおりスクリプトを作成する。
mkdir ~/bin vi bin/speak
作成したスクリプト
#!/bin/bash tempfile=$(tempfile) option="-m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice \ -x /var/lib/mecab/dic/open-jtalk/naist-jdic \ -ow $tempfile" echo "$1" | open_jtalk $option aplay -q $tempfile rm $tempfile
出力先の設定
スクリプトが完成したらさっそくしゃべってもらう。
が、その前に出力先の設定を行う。
amixer cset numid=3 0 自動判別 amixer cset numid=3 1 外部スピーカー amixer cset numid=3 2 HDMI出力
ちなみに、筆者は HDMI出力で行っているが、最初の文字を話してくれない問題がある。(^_^;)
(2022-02-17 追記)
最近のRaspberry PiはPluseAudioで音声を管理しているよう。
出力先の選択は、デスクトップの右上にあるスピーカーを右クリックして選択する。
(追記終了)
音量の調節
デフォルトでは、かなり音量が小さいので、以下のコマンドで音量を調節する。
alsamixer
(2022-02-17 追記)
pavucontrolをインストールして、音量調節。
$ apt install pavucontrol $ pavucontrol
(追記終了)
しゃべってもらう
さて、準備が整いましたので、以下のとおりしゃべらせる。
./speak "こんにちは。ラズベリーパイです"
音声をメイさんに変更
デフォルトでは、男性の良い声だが、お好みに応じて以下のように、音声をメイさんに変更。
wget https://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.7/MMDAgent_Example-1.7.zip --no-check-certificate
ダウンロードしたzipファイルを解凍。
unzip MMDAgent_Example-1.7.zip
解凍したファイルのうち、メイさんのものをコピー。
sudo cp -R ./MMDAgent_Example-1.7/Voice/mei /usr/share/hts-voice/
スクリプト
インストールしたメイさんの音声を使ってしゃべらせる。
#!/bin/bash tempfile=`tempfile` option="-m /usr/share/hts-voice/mei/mei_normal.htsvoice \ -x /var/lib/mecab/dic/open-jtalk/naist-jdic \ -ow $tempfile" echo "$1" | open_jtalk $option
aplay -q $tempfile rm $tempfile
上記スクリプトを実行すると、最初の何文字かは音声にならない。(-_-;)
ネットで検索すると以下のページを見つけた。
どうも、HDMI出力では、遅延が起こって、最初の何文字かは発声されないよう。
ということで、外部スピーカーをお持ちの方は、外部スピーカーでお試しを。
たくさんのテキストをしゃべってもらう(2019年3月18日追記)
上記のスクリプトは、短いテキスト(200字以内)でしたら問題ないが、長い文章になると途中でしゃべらなってしまう。
せっかく上手にしゃべってくれるのに、残念。
そこで、長い文章でもしゃべってくれるようにスクリプトを変更。
まず最初に、soxというパッケージをインストールする。
sudo apt-get install sox
soxは、複数の wav ファイルを結合してくれる。
以下の例では、input01.wavとinput02.wavを結合して、output.wavを作成する。
sox input01.wav input02.wav output.wav
それでは、実際に話す内容を1行1文の形式で、read.txt というテキストファイルに書き込む。
$ cat read.txt こんにちは。 ラズベリーパイです。 新しいスクリプトでは、長い文章でもちゃんと読み上げることができます。 皆さんも、使ってくださいね。
最後に作成したスクリプト lot_speak を示す。
#!/bin/bash option="-m /usr/share/hts-voice/mei/mei_normal.htsvoice \ -x /var/lib/mecab/dic/open-jtalk/naist-jdic" i=0 cat "$1" | while read line do echo $line | open_jtalk $option -ow temp_$(printf %03d $i).wav i=$(($i + 1)) done /usr/bin/sox $(ls temp_*.wav) "$2" rm temp_*.wav
使い方は、以下のとおり。
$ lot_speak read.txt out.wav # 読み上げるテキストファイル 出力のwavファイル $ aplay -q out.wav # 出力されたwavファイルを読み上げる
長い文章も読み上げることができたでしょうか?
サンプルとして、以下のリンクを貼っておきますので、聞いてみてください。
おわりに
今回は、ラズパイにしゃべってもらう設定をした。しゃべってもらう内容をAIで判断すれば、かなり面白いアプリケーションができるような。
皆さんも、ぜひ、いろいろと挑戦してみて。
また、なにかわかったら、追記します。(^^)/