Fedoraで行こう! 〜音声合成pyttsx3編〜
久しぶり
数年ぶりに、書いてみました。諸々のScriptの調整やら何やら、ございますれば。
Fedoraは、37を使用しております。
まあ、もうすぐ、38でますけどね。
インストールしてみた
ふと、音声合成をやってみたくなり、ぐぐる先生で調べまして、pyttsx3なるものがあり、 使えますよ、と。事前で、というか、Python側ではなく、Fedora側で、インストールしておくものもある、 という感じで。
$ sudo dnf install espeak
$ pyenv> pip install pyttsx3
pyenvは、virtualenvにて、仮想的な環境を 構築した上での作業になっております。不要であれば、sudoを使って、インストールすればいいかと 思います。
libespeakのエラー
$ python
>>> import pyttsx3
>>> engine = pyttsx3.init()
>>> engine.setProperty("voice", "Japanese")
>>> engine.say("こんにちは")
>>> engine.runAndWait()
少なくとも、上記コードは問題が発生したものと同一ではないのですが、上記だと、タイトルに ありますように、libespeakでエラーになります。単純に、日本語を 解釈をしていない、ということです。
第一の問題
espeakは、日本語を解釈しません。日本語を解釈するのは、 espeak-ngになります。従って、
$ sudo dnf install espeak-ng
CLIによるespeak-ngでは、ちゃんと日本語を解釈しますが、pyttsx3の先程のコードでは 問題がクリアになりません。
グーグル先生では、libespeak-ngをlibespeakに、シンボリックリンクすることで対応 というものがでます。
マイルール的に、管理者領域では、通常のUpdateや設定以外では操作しない、と決めている ので、リンクの張り替えによる対応はしないとしました。
第二の問題
$ sudo dnf remove espeak
$ sudo dnf install espeak-ng
日本語を解釈しないespeakは不要になるので、removeし、espeak-ngのみとします。
この状態で、先程のコードを実行すると、libeseakがないという エラーに変わりはありません。
これは、pyttsx3側に問題があり、libespeakのみをロードする仕様になっているためです。
実は、
- pyttsx3 on PyPI : 2.90
- pyttsx3 on Github : 2.91
となっており、Github側のコードには、espeak-ngに対応するコードが埋め込まれています。
解決策
上記、二つの問題から、
- espeak-ngのみをインストール(espeakがあるなら、remove)
- Github版pyttsx3をインストール
を念頭に、コマンドを送ると、以下のようになります。
$ sudo dnf install espeak-ng
$pyenv> pip install git+https://github.com/nateshmbhat/pyttsx3
これで、先程のコードを実行しますと、なんとなく日本語を話してくれます。
次は
Open Jtalkも試してみないとですね。
コメント
コメントを投稿