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も試してみないとですね。

コメント

このブログの人気の投稿

Tabulatorで行こう! 〜ダイバー編〜

Tabulatorで行こう! 〜違うじゃん編〜