◆PROCESSING 逆引きリファレンス
カテゴリー:ゲーム作成
PROCESSINGで音声合成を行うには(Windows編)
【解説】
最近のスマホはよく出来ていて、人間の話し言葉を理解して、音声で受け答えしてくれます。
このような機能としてはAppleのSiriが有名ですね。
他にもGoogleのGoogleアシスタント、MicrosoftのZoやりんななど、最近のAIブームを反映して様々なものが出てきています。
人工知能はともかく、まずはPROCESSINGに喋ってもらう方法(音声合成)について、以下の条件を元に探してみました。
- 無償で利用できる事(これ、最重要:笑)
- 日本語の読み上げ・発音に対応している事(これも必須)
- 読み上げ可能な文字数に、できるだけ制限がない事(こうだと嬉しい)
- PROCESSING(Java)から利用可能な事
- Windowsから(可能であればMACやLinuxでも)利用可能な事
- ライブラリ経由(JarファイルやDLLなど)で手軽に利用できる事
ところが上記条件を満たす仕組みは、(Androidはともかく)ほとんど見当たりませんでした(都合が良すぎたかも……汗)。
幾つかの条件を満たさなくても良いのであれば、以下の仕組みが利用できるようです。
- Open JTalk を使う(コマンド形式)
- FreeTTS を使う(日本語未サポート)
- Speech Recognition を使う(オンラインでの利用が前提)
それぞれ下記のサイト様などで紹介されています。
●Open JTalk
・ 人工知能に関する断創録 様
・ takayanの雑記帳 様
●FreeTTS
・ マイナビニュース 「Java API、使ってますか?」 記事様
・ ヅラッシュ! by NI-Lab. 様
Javaにこだわらなくても良いなら
- Microsoft Speech Platform や Windows Speech Application Programming Interfaceを使う(C#、VB.NET、VC++用)
- ブラウザで Web Speech API を使う(JavaScript用)
などがあります。
無償だけど読み上げる字数に制限があっても構わない、あるいは有償でも良いなら、選択肢はもっと広がります。興味がある方は「音声合成」などのキーワードで検索してみると良いでしょう。
●Web Speech API の使い方については
・ YoheiM.NET 様
・ Qiita 様:kyotaさんの記事
などの記事が参考となります。
今回はブラウザからではなくアプリケーションから利用したかったので、Windowsに標準搭載されている(MACとLinuxユーザーの皆様、すいません:汗)Speech Application Programming Interface( Windows SAPI ) を使って文章を読み上げてみる事にしました。
以下が動作条件となります。
- Windows8 以降のOS上から利用する事
- 利用環境にJRE1.8以降がインストールされている事
- 利用環境に.NET FrameWork 4.0 以降がインストールされている事
- 利用環境にMicrosoft Visual C++ 2015ランタイムがインストールされている事
上記でよろしければ、下記に公開したライブラリを利用する事で、あなたのPROCESSING(Java)から「Microsoftハルカ」ちゃんに喋ってもらう事ができるようになります!(笑)。
OSはWindows8 以降を利用してください。
PROCESSINGからのみ利用するのであれば、JREのインストールは不要です。
Microsoft Visual C++ 2015 Redistributable のランタイムがインストールされていない場合は、下記のMicrosoft公式サイトからダウンロードし、インストールしてください。
またWindows8 以降のOSには、最初から.NET FrameWork4.0以降がインストールされている筈ですので、.NET FrameWorkに関する特別な操作は必要ないと思います。
PROCESSING、JRE、VisualC++ランタイムのbit数は全て統一してください(重要)。Javaアプリケーションから使う場合は、Eclipseなどのbit数も合わせてくださいね。
一部でも x86 と x64 が混在していると動作しないので、注意が必要です。
またWindows7 で日本語を喋らせたいという方は、下記コラム に紹介した方法で日本語音声合成エンジンと日本語音声データをインストールしてからお試しください。この操作はWindows8以降では必要ありません。
Windows7 に日本語音声合成エンジンと日本語音声データをインストールしなくても喋らせることは可能ですが、その場合は英語のみの対応となります。
ライブラリの入手と利用条件について
下記からダウンロードしていただけるプログラムとドキュメント(以下、本APと呼称)の著作権はMSLABOにあります。
本APは、以下のクリエィティブ・コモンズライセンスに従い提供されています。
利用にあたっては、必ず自己責任でお願い致します。
本APの不具合については極力善処を行う予定ですが、これを保証するものではありません。
また本APに関する情報はすべてMSLABOのHPから一方的に公開するものとし、原則として、個別の問い合わせや要望は受け付けません。
上記事項に同意頂ける方のみ、下記よりダウンロードする事が可能です。
WindowsのSAPI機能をPROCESSINGから使うためのライブラリです。Javaアプリケーションから利用することも可能です。2017/05/02:64bit版を追加しました。
MSLABO 作『WinSAPI』はクリエイティブ・コモンズ 表示 – 継承 4.0 国際 ライセンスで提供されています。
ダウンロードすると「WinSAPI_20170502.zip」というファイルが出来上がります。
以下はダウンロードファイルの構成です。
64bit版を利用される方は、code フォルダではなくx64フォルダのものを利用してください。
インストールについて
●PROCESSINGの場合
PROCESSINGから本APを利用するには、以下の手順で作業してください。
1:PROCESSINGで新規スケッチファイルを作成します。
2:空のままで良いので、スケッチを一度保存します。
3:保存したスケッチ(例:C:\processing-3.3\src\sketch_170501a)配下に、上記を解凍するとできあがる codeフォルダを、フォルダごと複写してください。
4:64bitのPROCESSINGを利用される方は、x64フォルダの方を複写し、複写後にフォルダ名を code に変更してください。
●Javaアプリケーションの場合
Javaアプリケーションから利用する場合は、code配下に出来上がるjarファイルを、あなたのプロジェクトに外部ライブラリとして追加してください。
また、WinSAPICPP.dllをパスの通った場所に配置してください。実行時の構成でPATH環境変数を指定してもOKです。
64bitのJavaアプリケーションから利用される方は、codeフォルダではなくx64フォルダの中にある jar ファイルをご利用ください。またDLLファイルは WinSAPICPP64.dll を利用してください。
下記は32bit版の例です。c:¥pleiades32¥lib に WinSAPICPP.dll が置いてある場合の環境変数設定例です。
ライブラリの動作原理について
WindowsのSAPI はC#やVB.NET、VC++から利用する前提で作られているため、Javaから直接呼び出すことはできません。
今回はVC++のCLI / DLLを用意し、それを JNR 経由でJavaから呼び出す仕組みとしています。
さらっと書きましたが、JNRもVC++も慣れていなかったため、ものすごく苦労しました(汗)。
JNRについては、下記サイト様などを参考とさせて頂きました。ありがとうございます。
- torutkの日記 様
- 今日もプログラミング 様
使い方
ダウンロードしたファイルを解凍すると出来上がる doc フォルダ配下に、リファレンス(index.html)があります。
また下記サンプルプログラムも参考としてください。
【関連記事】
サンプルプログラム
日本語を喋らせる例:
1 2 3 4 5 6 7 8 9 10 11 12 |
import WinSAPI.WinSAPI; void setup(){ WinSAPI sapi = new WinSAPI(""); sapi.setVoice("Haruka"); sapi.setSpeed(4); sapi.speakMsg("隣の客は良く柿食う客だ"); sapi.dispose(); } void draw(){ } |
Microsoftハルカが使える前提です。ハルカちゃんに早口言葉を喋ってもらえます(笑)。
<出力サンプル>
SSMLで制御する例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import WinSAPI.WinSAPI; void setup(){ WinSAPI sapi = new WinSAPI( null ); sapi.setVoice("Haruka"); String msg = "10ミリ秒休止。<break time='10ms' />"; msg = msg + "100ミリ秒休止。<break time='100ms' />"; msg = msg + "1秒休止。<break time='1s' />"; msg = msg + "5秒休止。<break time='5s' />"; msg = msg + "ちゃんと待ってた"; sapi.speakSsmlMsg( msg ); sapi.dispose(); } void draw(){ } |
通常の文章以外に、SSML記号を与えることで読み方を制御できます。
もっとも、利用可能なSSMLは1.0仕様ですので、ちょっと物足りませんがしょうがありません(汗)。
上記ではハルカちゃんが、少しずつ間隔を開けながら喋ってくれます。
<出力サンプル>
英語を喋らせる例:
1 2 3 4 5 6 7 8 9 10 11 |
import WinSAPI.WinSAPI; void setup(){ WinSAPI sapi = new WinSAPI("c:\\temp\\Greeting.WAV"); sapi.setVoice("Zira"); sapi.speakMsg("You have selected Microsoft Zira."); sapi.dispose(); } void draw(){ } |
Microsoft Zira(アメリカ人)が、それっぽく聞こえる英語で喋ってくれます。Windows8以降のOSには、HarukaとZiraが標準搭載されています。
本例では、音声をスピーカーではなくWAVファイルに出力しています。
<出力サンプル>
コラム:Windows7で日本語を喋らせるには
以下の手順で作業を行います。
途中でレジストリなども変更するため、PCの操作に自信のない方や初心者の方には、オススメできません。PCやレジストリのバックアップを採取するなど、必要な事前準備を行った上で作業してください。
また以下の手順は、MSLABOやMicrosoftが公式に動作保証するものではありません。
たまたま私の環境ではうまくいきましたが、作業する場合は必ず自己責任で行うようにお願いします。
日本語音声合成エンジンと日本語音声データをダウンロードする
以下のMicrosoft公式サイトからダウンロードします。
・エンジン
Microsoft Speech Platform – Runtime (Version 11)
・音声データ
Microsoft Speech Platform – Runtime Languages (Version 11) 2021/05 Linkが不在です
エンジンには32bit版と64bit版がありますが、作りたいアプリケーションに応じたものをダウンロードしてください。
32bit版のPROCESSINGから使うのであれば x86版を、64bit版のPROCESSINGから使うのであれば x64 版をダウンロードしてインストールします。
音声データには日本語以外にも沢山の種類が公開されています。日本語を喋らせたい場合は、「MSSpeech_TTS_ja-JP_Haruka.msi」をダウンロードしてください。これが「Microsoftハルカ」の音声データになります。
インストールする
エンジンをインストールし、続いて音声データをインストールします。特に難しいことはないと思います。
レジストリを書き換える
ここがポイントです。PROCESSINGで音声合成を行おうか・・・という読者の皆様は、ある程度PCの操作には慣れている事だとは思いますが、慎重に作業をしてください。
やるべきことは下記の2つです。
1番目:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech Server\v11.0\Voices\Tokens
上記配下にある音声情報「TTS_MS_ja-JP_Haruka_11.0」を、配下のキーを含めて丸ごと
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens
の下に複写する。
2番目:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Speech Server\v11.0\Voices\Tokens
上記配下にある音声情報「TTS_MS_ja-JP_Haruka_11.0」を、配下のキーを含めて丸ごと
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Speech\Voices\Tokens
の下に複写する。
参考URL:電脳スピーチ blog 様
基本動作確認する
ここまで出来たら、一度Windowsの標準機能で「Microsoftハルカ」に喋ってもらいましょう。
コントロールパネルから「音声認識」を開き、音声合成を選択します。
音声の選択から「ja-JP, Haruka」を選択します。
もしも音声の選択欄に「Microsoft Anna – English(United States)」しか表示されていないようなら、上記のどこかで失敗しています。
「次のテキストを使って・・・」と書かれた場所に適当な日本語を入力して、音声の再生ボタンを押してください。
無事に「Windowsハルカ」が喋ってくれれば、ひとまずはOKです。
本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。