月別アーカイブ: 2016年3月

Open JTalk version1.09で音声合成

音声合成は2年ほど前に実験を行っていました。 Open JTalkとAquesTalkPiを比較し、聞きやすさの点でAquesTalkPiの方が良かったと記録しています。 久しぶりに確認すると、Open JTalkのバージョンは1.09となっていました。(以前の実験時は1.05) USBオーディオアダプタでサウンド機能の向上したRaspberryPiで、改めて実験してみました。

IMG_0390[1]

Raspberry Piにしゃべらせてみた を、参考にさせていただき、最新のOpen JTalk version1.09をインストールします。

・パッケージ管理 paco のインストール
# apt-get install paco

・hts_engine API version 1.10 のインストール
# wget http://sourceforge.net/projects/hts-engine/files/hts_engine%20API/hts_engine_API-1.10/hts_engine_API-1.10.tar.gz
# tar zxvf hts_engine_API-1.10.tar.gz


# cd hts_engine_API-1.10
hts_engine_API-1.10# ./configure
hts_engine_API-1.10# make
hts_engine_API-1.10# paco -lD "make install"
hts_engine_API-1.10# cd ..
#

・Open JTalk version 1.09 のインストール
# wget http://sourceforge.net/projects/open-jtalk/files/Open%20JTalk/open_jtalk-1.09/open_jtalk-1.09.tar.gz
# tar zxvf open_jtalk-1.09.tar.gz


# cd open_jtalk-1.09
open_jtalk-1.09# ./configure --with-charset=UTF-8
open_jtalk-1.09# make
open_jtalk-1.09# paco -lD "make install"
open_jtalk-1.09# cd ..
#

・パッケージ一覧の確認
# paco -a
# hts_engine_API-1.10 open_jtalk-1.09

・辞書ファイルの配置
# wget http://sourceforge.net/projects/open-jtalk/files/Dictionary/open_jtalk_dic-1.09/open_jtalk_dic_utf_8-1.09.tar.gz
# tar zxvf open_jtalk_dic_utf_8-1.09.tar.gz
# mkdir /usr/local/share/open_jtalk
# mv open_jtalk_dic_utf_8-1.09 /usr/local/share/open_jtalk/


・MMDAgent音声ファイルの配置
# wget http://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.6/MMDAgent_Example-1.6.zip
# unzip MMDAgent_Example-1.6.zip
# mkdir /usr/local/share/hts_voice
# mv MMDAgent_Example-1.6/Voice/mei /usr/local/share/hts_voice/


・シェルスクリプトの作成(エディタで点線内のスクリプトファイルを作成)
nano /usr/local/bin/jsay

---------------------------------------------------------
#!/bin/sh
 
# 引数チェック
CMDNAME=`basename $0`
if [ $# -lt 1 ]; then
 echo "Usage: ${CMDNAME} [ text ]" 1>&2
 exit 1
fi
 
 
# 定数定義(出力ファイル名、辞書の場所、音声データの場所)
TMPFILE=`mktemp /tmp/tmp.XXXXXXXX.wav`
DIC=/usr/local/share/open_jtalk/open_jtalk_dic_utf_8-1.09/
VOICE=/usr/local/share/hts_voice/mei/mei_normal.htsvoice
 
 
# 音声データ生成
echo "$1" | open_jtalk \
-x ${DIC} \
-m ${VOICE} \
-ow ${TMPFILE} && \
 
 
# 生成した音声データを再生する
aplay --quiet ${TMPFILE}
 
 
# 生成した音声データを削除する
rm -f ${TMPFILE}
 
# 終了
exit 0
---------------------------------------------------------

・実行権限の付与
# chmod +x /usr/local/bin/jsay

・発声テスト
# jsay おはようございます。

以前のバージョンに比べ、発声がはっきりし、アクセントが改善されているように感じました。 「日本語の上手い外国人」といった印象で、テキストを確認しなければ聞き取れないということは、ほぼありません。 これは使えます。

簡単な、天気概況読み上げスクリプトを作成しました。

<?php
//weather.php 2016.3.27
//都市コード:http://weather.livedoor.com/forecast/rss/primary_area.xml
$city = "130010";
$url = "http://weather.livedoor.com/forecast/webservice/json/v1?city=$city";
$json = file_get_contents($url, true);
$json = json_decode($json, true);
$description = $json["description"]["text"]; //天気概況
$description = preg_replace('/】/','、',$description); //閉じ括弧を半濁点に変換
$description = preg_replace('/(【|\[|\]|\(|\)|〈|〉|「|」|[\.\?\-!&;:=~\r\n\s]+)/','',$description); //括弧と記号などを除去
echo $description."\n";
exec( "jsay 天気概況、".$description );
?>

php weather.php

で、最新の天気概況を読み上げます。 長い文章になると、変換時間もかかりますので、このあたりの改善が必要ですね。

 

参考にさせて頂いたサイト

Raspberry Piにしゃべらせてみた(OpenJTalk 1.08、.htsvoiceファイル対応)
http://raspi.seesaa.net/article/415482141.html

pacoでソースビルドをパッケージっぽく管理する
http://qiita.com/pasela/items/9c6cd7b9e477ed0501c8

 

 

USB オーディオアダプタでサウンド機能をアップグレード

サウンド機能を追加されたハウスローバーは、毎日のようにBGMとしてインターネットラジオ受信機になっています。 デスクトップPCで聞けばいいようなものですが、専用機(?)はいいものです。 最初から音質に期待はしていないとはいうものの、さすがにRaspberryPiの標準音声出力では、ノイズの多さが気になってきました。 そこで、USB オーディオアダプタを試してみることにしました。 ハウスローバー内部に組み込んでも邪魔にならない小型の製品を比較し、Plugable USB オーディオ変換アダプタ を、購入しました。

Plugable USB オーディオ変換アダプタ

Plugable USB オーディオ変換アダプタ

3センチ角程のコンパクトな筐体で、つくりもしっかりしています。 形状から事前に予想していましたが、USBポート直挿しの為 RaspberryPiに装着の際には他のポートと干渉します。 近所の店で、ちょうどいいものがありましたので、予め購入。

USB方向転換アダプタ

USB方向転換アダプタ

あらゆる方向にグリグリ回ってしまう便利な USB方向転換アダプタ です。 実際に組み込むとこんな感じになりました。

IMG_0389

スッキリ収まりました。

設定については、メーカーのブログを参考に行いました。 私の環境では、 cat /proc/asound/modules で装着前に確認した時に、すでに snd_usb_audio が表示されていました。 USBカメラのマイク(?)のようですが、 /etc/modprobe.d/alsa.base.conf には以下のように記述しました。 (存在しませんでしたので新規に作成)

options snd slots=snd_usb_audio,snd_usb_audio,snd_bcm2835
options snd_usb_audio index=0
options snd_usb_audio index=1
options snd_bcm2835 index=2

snd_usb_audio が2行になってしまい、どちらがどちらかわかりませんが、これでUSB オーディオアダプタを再優先とすることができました。

さて、使用感ですが、感動レベルの改善に驚きです。 耳障りだったホワイトノイズは無くなり、サーボやDCモーターなどからの影響も低減しました。 ヘッドホンやデスクトップ用スピーカーを繋いでみましたが、RspberryPiとは思えない音の厚みを感じられるようになりました。 また、アンプの特性と諦めていた、起動後最初の再生時に発生する大きなポップノイズも消滅したのです。 何もかも良いこと尽くめ。 もはや、音楽再生機レベルに到達している感じです。(絶賛!)

今回は、マイク入力などは試していませんが、サウンド機能の向上により、今後、音声認識機能なども実験してみたいと思います。

参考にさせて頂いたサイト

RASPBERRY PI で PLUGALBE USB オーディオ変換アダプタを使用する方法
http://plugable.com/jp/how-to-switch-to-usb-audio-on-raspberry-pi

ALSA使用時のデフォルトサウンドカード設定法のまとめ(&同時再生問題の解決法)
http://d.hatena.ne.jp/gin135/20140502/1399022358