2020/09/23(水) [n年前の日記]
#1 [raspberrypi] Raspberry Pi Zero WでOpenJTalkを使って音声合成
Raspberry Pi Zero W + Raspbian Buster で、OpenJTalk を使って音声合成をしてみたり。
以下、参考ページ。
_Speaker pHAT 単体で音楽再生+Bluetoothボタン制御
_Raspberry Pi | ラズパイに喋ってもらう作戦(Open JTalk1.08のインストールと音声出力設定) - たぷん日記
必要なパッケージをインストール。OpenJTalk、男性の声のデータ、辞書をインストールする。
音声合成を指示するためのスクリプトを新規作成。OpenJTalkに音声データや辞書を指定してwavファイルを作成して、ソレを鳴らしてから、wavファイルを削除、という処理をしているらしい。
スクリプトに実行権限を追加。
再生確認。
女性の声も鳴らしてみる。
以下、参考ページ。
_Speaker pHAT 単体で音楽再生+Bluetoothボタン制御
_Raspberry Pi | ラズパイに喋ってもらう作戦(Open JTalk1.08のインストールと音声出力設定) - たぷん日記
必要なパッケージをインストール。OpenJTalk、男性の声のデータ、辞書をインストールする。
sudo apt install open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001
音声合成を指示するためのスクリプトを新規作成。OpenJTalkに音声データや辞書を指定してwavファイルを作成して、ソレを鳴らしてから、wavファイルを削除、という処理をしているらしい。
vi jsaym.sh
#!/bin/sh TMP=/tmp/jsay.wav echo "$1" | open_jtalk \ -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice \ -x /var/lib/mecab/dic/open-jtalk/naist-jdic \ -ow $TMP && \ aplay --quiet $TMP rm -f $TMP
スクリプトに実行権限を追加。
chmod +x jsaym.sh
再生確認。
./jsaym.sh "hello world talk test"男性の声で音声が鳴った。
女性の声も鳴らしてみる。
mkdir ~/temp cd ~/temp wget --content-disposition https://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.8/MMDAgent_Example-1.8.zip/download unzip MMDAgent_Example-1.8.zip sudo cp -R ./MMDAgent_Example-1.8/Voice/mei /usr/share/hts-voice/ cd ..
vi jsayf.sh
#!/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=/var/lib/mecab/dic/open-jtalk/naist-jdic VOICE=/usr/share/hts-voice/mei/mei_normal.htsvoice echo "$1" | open_jtalk \ -m ${VOICE} \ -x ${DIC} \ -ow ${TMPFILE} && \ aplay --quiet ${TMPFILE} rm -f ${TMPFILE} exit 0
chmod +x jsayf.sh
./jsayf.sh "新しい朝が来た 希望の朝だ"女性の声で音声が鳴った。
[ ツッコむ ]
#2 [raspberrypi] Raspberry Pi Zero Wでやりたいことは一通りできたとメモ
作業目的と結果について一応メモ。
自分は睡眠時間や犬の散歩をした時間を毎日メモしているのだけど。一々メインPC上でエディタを立ち上げてメモするのはちょっと面倒臭い。何かしらのボタンを押すだけで時間の記録ができればいいのになと思えてきて、Raspberry Pi Zero W を使ってそのへんどうにかできないかと最近色々試してたわけで。
ということで…。
ちなみに、Bluetoothスピーカで音を鳴らすことも試したけど、それはちょっと厳しいなと。
さておき。一応実現はできたものの、時刻をメモするというただそれだけのために、5V,2Aという少ない消費電力で動くとはいえ、Raspberry Pi Zero W を24時間365日電源入れっぱなしにするのもなんかアレだなと…。大体にして、そのへんにメモ用紙とシャープペンシルでも転がしておいてその都度メモすれば圧倒的低コストで済んでしまう話でもあり…。てなわけで、実現はできると分かったけれど、今回試したこの仕組みは今後使わないだろうなと。
そもそもメインPC上でも、自作のPerlスクリプトを実行すれば現在時刻が記録できるようになっていて…。後はそのスクリプトを呼び分けるためのショートカットファイルをデスクトップにいくつか置いておけば済んでしまう…。
もしスマホがあれば、任意のタイミングで現在時刻を記録するスマホアプリが存在するらしいので、そういうアプリを使えば目的は叶ってしまうのだろうなと。まあ、自分はスマホ持ってないからその手は使えないのだけど。
とりあえず、こういうことができると分かっただけでも一応勉強にはなったから、これはこれで。
自分は睡眠時間や犬の散歩をした時間を毎日メモしているのだけど。一々メインPC上でエディタを立ち上げてメモするのはちょっと面倒臭い。何かしらのボタンを押すだけで時間の記録ができればいいのになと思えてきて、Raspberry Pi Zero W を使ってそのへんどうにかできないかと最近色々試してたわけで。
ということで…。
- ダイソーで購入した Bluettothシャッターリモコンを Raspberry Pi Zero W と接続して、リモコンのボタンを押すと Raspberry Pi Zero W が現在時刻をログファイルに追記。
- 時刻を追記すると同時に、USB接続スピーカ経由で何か音を鳴らして、追記処理ができたことを伝える。
- Webサーバ lighttpd + PHP 経由で、ログファイルをWebページとして閲覧。リンクをクリックするとログファイルをクリア。
ちなみに、Bluetoothスピーカで音を鳴らすことも試したけど、それはちょっと厳しいなと。
- ずっと放置しておくとスピーカの電源が自動でオフになる。
- バッテリー容量の関係で稼働時間も限られてる。
- 音を鳴らし始めた最初のあたりがちゃんと鳴ってくれない。
さておき。一応実現はできたものの、時刻をメモするというただそれだけのために、5V,2Aという少ない消費電力で動くとはいえ、Raspberry Pi Zero W を24時間365日電源入れっぱなしにするのもなんかアレだなと…。大体にして、そのへんにメモ用紙とシャープペンシルでも転がしておいてその都度メモすれば圧倒的低コストで済んでしまう話でもあり…。てなわけで、実現はできると分かったけれど、今回試したこの仕組みは今後使わないだろうなと。
そもそもメインPC上でも、自作のPerlスクリプトを実行すれば現在時刻が記録できるようになっていて…。後はそのスクリプトを呼び分けるためのショートカットファイルをデスクトップにいくつか置いておけば済んでしまう…。
もしスマホがあれば、任意のタイミングで現在時刻を記録するスマホアプリが存在するらしいので、そういうアプリを使えば目的は叶ってしまうのだろうなと。まあ、自分はスマホ持ってないからその手は使えないのだけど。
とりあえず、こういうことができると分かっただけでも一応勉強にはなったから、これはこれで。
[ ツッコむ ]
以上、1 日分です。