見出し画像

eSpeak NG Text-to-Speech

以下の記事を参考にして書いてます。

espeak-ng/espeak-ng

1. eSpeak NG

eSpeak NG」は、Linux、Windows、Android、およびその他のOS向けのコンパクトなテキスト読み上げシンセサイザーです。100以上の言語とアクセントをサポートします。これは、Jonathan Duddingtonによって作成されたeSpeakエンジンをベースにしています。

「eSpeak NG」は「フォルマント合成」(formant synthesis)を使用しています。これにより、多くの言語を小さなサイズで提供できます。音声は明瞭かつ高速に使用できますが、人間の音声録音に基づく大型シンセサイザーほど自然で滑らかではありません。また、「Klattフォルマント合成」および「バックエンド音声シンセサイザー」として「MBROLA」を使用する機能もサポートしています。

2. 利用方法

「eSpeak NG」の利用方法は、次のとおりです。

・ファイルまたは標準入力からテキストを読み上げるコマンドライン
(Linux、Windows)
・他のプログラムで使用するための共有ライブラリ
(WindowsではDLL)
・Windows用のSAPI5。
・SolarisやMacOSなど、他のプラットフォームに移植されている。

3. 特徴

「eSpeak NG」の特徴は、次のとおりです。

・特性を変更できる様々なボイスが含まれている。
・音声出力をWAVファイルとして生成可能。
・SSMLのサポート。
・サイズが小さい。

多くの言語を含むプログラムとそのデータは、合計で約数MB。
MBROLA diphone voicesのフロントエンドとして利用可能。
eSpeak NGは、テキストをピッチと長さの情報を含む音素に変換。
・テキストを音素に変換できるため、別の音声合成エンジンのフロントエンドとして適合させることが可能。
・他の言語の可能性。

4. 対応プラットフォーム

対応プラットフォームは、次のとおりです。

・Linux
・BSD
・Android 4.0
・Windows Windows 8
・Mac

5. ドキュメント

ドキュメントは、次のとおりです。

ユーザーガイド : コマンドラインまたはライブラリとしてeSpeak NGの使用方法を説明。
構築ガイド : ソースからeSpeak NGをコンパイルおよび構築方法を説明。
インデックス : 開発者向けの詳細情報を説明。
貢献ガイド : 貢献方法を説明。
eSpeak NGロードマップ : eSpeak NGの開発の参加に必要な情報を説明。

6. eSpeakとの互換性

espeak-ngバイナリは、espeakと同じコマンドラインオプションを使用しますが、出力オーディオデバイス名の指定など、いくつかの追加機能があります。ビルドは「espeakからespeak-ng」および「speakからspeak-ng」のシンボリックリンクを作成します。

espeakのspeak_lib.hはespeak-ng/talk_lib.hにあり、オプションのシンボリックリンクはespeak/speak_lib.hにあります。このファイルには、espeak 1.48.15 APIが含まれており、Windowsでのビルドを修正するためにESPEAK_APIマクロが変更され、ドキュメントのコメントが若干変更されています。このCAPIは、espeakと互換性のあるAPIおよびABIです。

espeakとの競合を避けるために、espeak-dataはespeak-ng-dataに移動しました。音声、辞書、音素ファイルに様々な変更が加えられ、espeakとの互換性がなくなりました。

espeak-ngプロジェクトには、espeakeditプログラムは含まれていません。辞書、音素、イントネーションのバイナリファイルをespeak-ngコマンドラインとCAPIからアクセスできるlibespeak-ng.soファイルに構築するロジックを移動しました。

7. 歴史

このプログラムは元々「speak」として知られており、1995年にJonathan DuddingtonによってAcorn/RISC_OSコンピュータ用に作成されました。これは拡張され、2007年に「eSpeak」として書き直されました。これには、元のメモリと処理能力の制約が緩和され、言語サポートも追加されています。

2010年、Reece H. DunnはGitHubで「eSpeak」の保守を開始しました。これはPOSIXシステムでの「eSpeak」のビルドを容易にするように設計しており、2012年にビルドシステムをautotoolsに移植しました。2015年後半に、このプロジェクトは正式に新しいプロジェクト「eSpeak NG」にブランチしました。「eSpeak NG」は既存コードをクリーンアップし、新機能も追加されています。

historicalブランチには、Subversionに含まれていない元のeSpeakの利用可能な古いリリースが含まれています。

1.24.02はSubversionに表示される「eSpeak」の最初のバージョンですが、1.05から1.24までのリリースはここで入手できます。

これらの初期リリースは、1.24.02リリースを最後のエントリとして、historicalブランチにチェックインされています。これにより、gitの置換機能を使用して以前の履歴を確認できます。

git replace 8d59235f 63c1c019
【注意】 ソースリリースには、big_endian、espeak-edit、praat-mod、riskos、windows_dll、windows_sapiフォルダが含まれています。これらは後のリリースまでソースリポジトリに表示されないため、1.24.02ソースコミットとの整合性を高めるためにhistoricalコミットから除外されています。

8. インストール

◎ Linux
Debian(Ubuntu、Mintなど)の場合、以下のコマンドを実行します。

$ sudo apt-get install espeak-ng

RedHat(CentOS、Fedoraなど)の場合、以下のコマンドを実行します。

$ sudo yum install espeak-ng

◎ Windows
リリースページを開き、「Latest release」をクリックしてから、適切な「*.msi」をダウンロードして実行します。
【例】 espeak-ng-20191129-b702b03-x64.msi

9. espeak-ngコマンド

◎ オプション

-h, --help : ヘルプ。
--version : バージョンと音声データの場所。
-f <text file> : テキストファイル入力。
--stdin : 標準入力。

-fも--stdinも指定されていない場合は、パラメータの<words>が読み上げられるか、テキストが標準入力から読み上げられ、1行ずつ読み取ります。

-d <device> : オーディオデバイスの指定。
-q : 発話しない(-xで役立つ)。
-a <integer> : 振幅(0〜200, デフォルト:100)
-g <integer> : 単語ギャップ。デフォルト速度で10ms単位の単語間で一時停止。
-k <integer> : 大文字を次のように指定(1=音, 2 =capitals, それ以上=ピッチの増加)
-l <integer> : 行の長さ。ゼロでない場合、その長さより短い行を句の終わりと見なす。
-p <integer> : ピッチ調整(0〜99, デフォルト:50)。
-s <integer> : 1分あたりの単語数で表した速度(デフォルト:175)。
-v <voice name> : espeak-ng-data/voicesからこの名前の音声ファイルを使用。バリアントは、af+m3などの+を使用して指定できる。
-w <wave file name> : 直接話すのではなく、このWAVファイルに出力を書き込む。
--split=<minutes> : -wと共に使用して、オーディオ出力を<minutes>で記録されたチャンクに分割。
-b : 入力テキストエンコーディング (1=UTF8, 2=8ビット, 4=16ビット)。
-m : テキストにSSMLまたはその他のXMLタグが含まれていることを示す。
サポートされているSSMLタグが解釈される。<hr><h2><li>などの一部のHTMLタグがスピーチの中断を保証することを除いて、HTMLを含む他のタグは無視される。
-x : 音素ニーモニックを標準出力。
-X : 音素ニーモニックと変換トレースを標準出力。ルールファイルが--compile = debugで作成されている場合は、行番号も表示される。
-z : テキストの最後で最後の文が一時停止することはない。
--stdout : 標準出力。
--compile=voicename : 現在のディレクトリの発音ルールと辞書をコンパイル。<voicename>はオプションであり、コンパイルする言語を指定。
--compile-debug=voicename : 上記のように現在のディレクトリの発音規則と辞書をコンパイルするが、-Xが使用されたときに表示される行番号を含める。
--ipa : International Phonetic Alphabetを使用して音素を標準出力(--ipa=1: tiesを利用, --ipa=2: ZWJを利用, --ipa=3: _で区切る)。
--tie=<character> : -xおよび--ipa出力で複数文字の音素を結合するために使用する文字。
--path=<path> : espeak-ng-dataディレクトリを含むディレクトリを指定。
--pho : mbrola音素データ(.pho)を標準出力または--phonoutのファイルに出力。
--phonout=<filename> : -x -Xおよびmbrola音素データからの出力をこのファイルに書き込む。
--punct="<characters>" : 話すときに句読文字の名前を話す。 <characters>を省略すると、全ての句読点が読み上げられる。
--sep=<character> : 音素を-xおよび--ipa出力から分離する文字。
--voices[=<language code>] : 利用可能な音声を一覧表示。<language code>が存在する場合、その言語に適した音声のみがリストされる。xx-yy言語コードが渡されると、xx言語バリアントのyyを持つ音声が、xxよりも高い優先度で表示される。バリアントが渡されると、すべての音声バリアントが表示される。mbまたはmbrolaが渡されると、MBROLA音声シンセサイザーを使用するすべての音声が表示される。全てが合格すると、全てのeSpeak NG音声、音声バリアント、MBROLA音声が表示される。
--voices=<directory> : 指定されたサブディレクトリ内の音声を一覧表示。

◎ 使用例
・デフォルトの英語の音声を使用して「This is a test」を発話。

$ espeak-ng "This is a test"

・デフォルトの英語の音声を使用して、hello.txtの内容を発話。

$ espeak-ng -f hello.txt

・デフォルトの英語の音声を使用して、hello.txtの内容を発話。

$ cat hello.txt | espeak-ng

・デフォルトの英語の音声を使用して「hello」という単語を発話、発話した音素を出力。

$ espeak-ng -x hello

・アメリカ英語の声を使って音素「h@'loU」を発話。

$ espeak-ng -ven-us "[[h@'loU]]"

・eSpeakでサポートされているすべての音声を一覧表示。

$ espeak-ng --voices

・英語(en)を話すすべての声を一覧表示。

$ espeak-ng --voices=en

・MBROLAボイスシンセサイザーを使用して全てのボイスを一覧表示。

$ espeak-ng --voices=mb

この記事が気に入ったらサポートをしてみませんか?