mieki256's diary



2024/09/19(木) [n年前の日記]

#1 [linux][ubuntu][python][dtm] 音声合成ソフトespeakを試用

Linux上で音声合成をして鳴らすことができる、espeak というプログラムがある。Python + pyttsx3 で音声合成する時に呼び出されるのだとか。VMware + Ubuntu Linux 20.04 LTS や、実機上の Ubuntu Linux 22.04 LTS上ででインストールして試用してみた。

インストール :

sudo apt install espeak libespeak-dev

Ubuntu Linux 20.04 LTS の場合、espeak 1.48.04 が、22.04 LTS の場合、espeak 1.48.15 が入った。

libespeak1 というパッケージもインストールされる。pyttsx3 を利用する時は、このパッケージが必要になるらしい。

_Debian -- bookworm の libespeak1 パッケージに関する詳細
_Debian -- パッケージのファイル一覧: libespeak1/bookworm/amd64

espeak はメジャーな言語(英語等)しかサポートしてなくて、日本語はサポートされていない。日本語も利用したい時は、espeak-ng を使うといいらしい。espeak をアンインストールしてから、espeak-ng をインストールしてみた。
sudo apt purge espeak libespeak-dev libespeak1
sudo apt install espeak-ng libespeak-ng-dev libespeak-ng1

Ubuntu Linux 20.04 / 22.04 LTS上では espeak-ng 1.50 が入った。

動作確認 :

使い方は以下。
espeak "Hello world"
or
espeak-ng "Hello world"

機械的な男性の声で、「ハローワールド」と喋ってくれた。

声の種類というか言語の指定は「-v hoge」をつける。また、男女の声を選び分ける時は、言語指定の後に、「+m2」「+f2」等をつける。「+f1」から「+f4」まで指定して、声質が変わることを確認した。

また、「-s xxx」をつけることで、速度が変わる。デフォルトは175、らしい? 一定時間に何語喋るかを指定するそうで、指定した数値が少なければ遅くなり、多ければ早くなる。

espeak, espeak-ng で、英語、かつ、女性の声を指定するなら以下になる。
espeak -v "english-us+f2" -s 150 "hello world"
or
espeak-ng -v "English (America)+f2" -s 150 "hello world"

espeak と espeak-ng で、言語指定時の文字列が違っているのがちょっと面倒かもしれない。

一応、選択できる言語の種類を出力してみた。

_voices_espeak.txt
_voices_espeak-ng.txt

pyttsx3から利用 :

Python + pyttsx3 で利用してみる。VMware + Ubuntu Linux 20.04 LTS上で動作確認した。

ユーザのホームフォルダに pyttsx3 をインストール。
python3 -m pip install pyttsx3

利用できるボイス種類の一覧は、以下で表示できる。
import pyttsx3
engine = pyttsx3.init()
voices = engine.getProperty('voices')
for voice in voices:
    print(f"Voice: {voice.name}")

動作確認用スクリプト。
import pyttsx3
import time

engine = pyttsx3.init()

# engine.setProperty("voice", "english-us+f2")
engine.setProperty("voice", "English (America)+f2")

engine.setProperty("rate", 200)

engine.say("hello world. Speaker test. Left, center, right.")
engine.runAndWait()

time.sleep(2)

ただ、VMware + Ubuntu Linux 20.04 LTS 上では、音声再生が途中で打ち切られてしまった…。実機なら正常に動作するのだろうか?

実機(Ubuntu Linux 22.04 LTS, Python 3.10.12, pyttsx3 2.97) でもダメだった。やはり音声再生が途中で打ち切られてしまう…。

espeak-ng を単独で呼び出した場合は最後まで再生されるのだけど、pyttsx3 経由だと音声が最後まで流れてくれない。

espeak-ng を使ってるのがマズいのかと、espeak をインストールし直してみたけれど、改善しなかった。

Windows10 x64 22H2 + Python 3.10.10 64bit + pyttsx3 2.97 なら、最後まで再生される。ちなみに Windows10 x64 22H2上で動かすと、Windowsにインストールされてる音声合成エンジン(SAPI5)を使ってくれるらしい。

余談。python3-espeakパッケージ :

Ubuntu Linux (or Debian Linux) では、Python3 から espeak を呼び出せる、python3-espeak というパッケージも用意されているらしい。こちらを使ったら、また違う動作になるのだろうか…?

_Debian -- bookworm の python3-espeak パッケージに関する詳細

余談その2。Python 2.7の場合 :

Windows10 x64 22H2 + Python 2.7の場合、pyttsx3 2.6 をインストールしたら動いてくれた。

_pyttsx3 - PyPI
pip install pyttsx3==2.6

参考ページ :

2024/09/20追記 :

pyttsx3 が正常に動作しない原因が分かった。pyttsx3 2.97 のバグっぽい。

  • espeak-ng ではなく、espeak をインストール。
  • pyttsx3 をアンインストールして pyttsx3 2.88, 2.91, 2.95 をインストール。
この状態で動作確認してみたら、ちゃんと最後まで音声が鳴ってくれた。

sudo apt purge espeak-ng libespeak*
sudo apt install espeak libespeak-dev
python -m pip uninstall pyttsx3
python -m pip install pyttsx3=2.95

あるいは、espeak-ng をそのまま使うこともできるらしい。libespeak-ng.so.1 を libespeak.so.1 としてリンクを張ればいい模様。
sudo apt install espeak-ng libespeak-ng-dev libespeak-ng1
cd /usr/lib/x86_64-linux-gnu
ln -s libespeak-ng.so.1 libespeak.so.1

以上です。

過去ログ表示

Prev - 2024/09 -
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project