2016-07-27
■[Java]Javaでテキストをしゃべらせる
はじめに
システムがカットオーバーされると、それまで運用してきた旧システムは撤去することとなります(基幹系では新システムがトラブルになった場合の備えとして残しておくことがあるかもしれません)。情報システム関連の仕事には、この旧システムの撤去もあります。サーバーを収容するラックは耐震上がっちり設置されているので、これを取り外して普通の床面に戻すのは工事が必要で、取り外したものを運び出すには運送が必要です。このような作業はITエンジニアでは行えないので、それぞれ施工会社や輸送会社などにお願いすることとなります。そのためには見積もり、手配、現地の下調べなどのお仕事があります。
先々月に異動になった部署では、カットオーバーする新システムのインフラストラクチャーの見積もり、手配、据え付けなどを行うのですが、それに伴う旧システムの撤去も扱っていたのです。
というところで、ここしばらくこの見積もりのためにExcelと戯れ、いろいろな会社さんに見積もりをお願いするといったことをしています。まいった、門外漢度120%な仕事です。フルスタックエンジニアどころかフルライフサイクルエンジニア(造語)になってしまいそう( ;∀;)。
これまでずっとソフトウェア開発に携わり、社内でも勉強会を主催してソフトウェア技術の発信や啓蒙、などの活動をしてきたので、異動した部署や今の仕事の内容とは関わらず、ソフトウェア関係の質問をいろいろ聞かれます。こうした相談事には個人ベースで乗っていくのがエンジニアの姿と確信していますし、今の組織に所属し続けるとしてソフトウェア開発から縁が切れないようにするにも必要なことと思っています。で、今回は給湯室で「Javaでテキストをしゃべらせたいんだけど、英語でいいから」という相談が舞い込みました。
Javaのプログラムでテキストをしゃべらせたい
1998〜1999年ごろに、Javaでとあるシミュレーターを開発したときに、音声合成を実装していました。そのときは、Java Speech APIという音声認識・合成のためのAPIと、Java Speech APIを実装する音声認識・合成エンジン(このときはIBMのViaVoice)を使いました。まだJavaのAPI標準を決めるJCPが設立される前なので、Java Speech APIにはJSR番号はありません。
さて、あれからもう17年がたっているのかぁ、今はどうなっているのだろう?と調べてみました。
まずAPIについて、Java Speech APIは健在で、いくつか実装系があるようです。
また、JSR 113: Java Speech API 2.0 という仕様改訂版が2009年にリリースされていました。
そこで、まず音声合成でJava Speech API(1.0または2.0)の実装を探してみました。
Java Speech APIの実装系あれこれ
J.A.R.V.I.S.(Java-Speech-API)
https://github.com/lkuza2/java-speech-api
Googleサービスを使って音声認識・合成と翻訳までやってしまうという実装系です。マイクロフォンから音声をキャプチャしてWAVEファイルに変換、Googleの音声認識サービスを使ってテキスト化することと、テキストをGoogleの音声合成サービスを使ってMP3にするなどの機能が用意されています。
インターネット接続が前提になると思われるので今回は対象外ですが、興味深いですね。
ライセンスはGPL3のようです。
TalkingJava SDK with Java Speech API implementation
http://www.cloudgarden.org/JSAPI/index.html
Windows OS上で、SAPI4/SAPI5互換の音声合成、音声認識を行うとあります。
非商用利用は無償。2010-01-01 Ver.1.7.0リリース
SAPI(Speech API)とは、Microsoftの音声認識・合成エンジンとそのAPIです。最近のWindows OSには標準で搭載されているようです。
FreeTTS
http://freetts.sourceforge.net/docs/index.php
音声合成の実装系です。音声認識はないようです。Javaで実装されており、クロスプラットフォームなライブラリです。しゃべる言語は英語だけの模様。旧Sun Microsystems社とカーネギーメロン大学の共同開発です。
BSDライセンス。2009-03-09 Ver.1.2.2リリース
The Festival Speech Synthesis System
http://www.cstr.ed.ac.uk/projects/festival/
C++で実装されたエンジンをJavaから呼び出します。C++は、GCC 4でビルドするのでWindowsの場合Cygwinを使うとあります。
X11ライセンス(商用利用OK)。2015-01-06 Ver.2.4リリース
Java Speech API以外の情報メモ
Webサービスでの音声認識・合成
メジャーなものでは、GoogleとIBM Watsonの2つが音声認識・合成のサービスを提供しています。
WindowsのSAPI5
sapi.dllを介して実現します。
次のブログで紹介されている、2行のWSHスクリプトを記述して実行すると音声合成が簡単に実現できました。
Javaから利用するなら、COMブリッジ(com4j)を使うと簡単ではないかと思います。ただし、Windowsでしか動かないプログラムになってしまうので、Windowsのみでよい!という戦略があるときのみの対処です。
Javaからしゃべらせてみる
英語でしゃべるのでよく、音声認識はなくてもよく、インターネット接続環境が不要で、商用利用可能なライブラリとなると、FreeTTSが今のところ候補になります。
参考になりそうな記事・ブログ等を調べました。
- Java API、使ってますか? (20) 音声認識/合成のためのAPI - Java Speech APIとJSR 113 | マイナビニュース
- FreeTTSを使ってJavaプログラムで音声合成する
- Javaで英文読み上げ
FreeTTSを使ってJavaでしゃべるプログラムの作成は、次のWikiに書いています(現在執筆中)。
- 319 https://www.google.co.jp/
- 122 https://www.google.co.jp
- 43 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwix5Kzut5XOAhUHG5QKHc8xA_MQFggcMAA&url=http://d.hatena.ne.jp/torutk/20140624/p1&usg=AFQjCNENQL37LGR1bgf7U6A-BQG4k_jxxg&bvm=bv.128153897,d.dGo
- 30 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0ahUKEwjX1eLrupXOAhVCnJQKHafyDxwQFggiMAE&url=http://d.hatena.ne.jp/torutk/20151004/p1&usg=AFQjCNEbg9etv1pCvrvKopopu5LkNvkSsg
- 12 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&sqi=2&ved=0ahUKEwjWtsrGu5XOAhWBjJQKHb4EBsAQFggwMAM&url=http://d.hatena.ne.jp/torutk/20081204/p1&usg=AFQjCNFNP4I_x8Dr5nN2HvACtPfQnAuuJA&bvm=bv.128153897,d.dGo
- 11 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0ahUKEwj52P_MuJXOAhWDqJQKHWCjAuEQFggrMAI&url=http://d.hatena.ne.jp/torutk/20080910/p1&usg=AFQjCNEl4qFHEfK9AX5MQHQZaKQ6ZMbkKQ
- 7 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&ved=0ahUKEwjl8Py7wpXOAhXQQpQKHbzkB-gQFghAMAQ&url=http://d.hatena.ne.jp/torutk/20131110/p1&usg=AFQjCNEC_wz2y5D5QMJLC0YGwiBGslxO0w&bvm=bv.128153897,d.dGo
- 7 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=6&cad=rja&uact=8&ved=0ahUKEwiotOzcx5XOAhVII5QKHRdfBoAQFghCMAU&url=http://d.hatena.ne.jp/torutk/20160605/p1&usg=AFQjCNFGRkYLCf9uV1Eq8bR8j2R5ZVH3tg&bvm=bv.128153897,d.dGo
- 6 http://b.hatena.ne.jp/
- 6 http://d.hatena.ne.jp/keyword/Java Development Kit