目次
VOICEROID2/CeVIO/SAPI5に翻訳結果を読み上げさせる
2019/03/27
Google翻訳のWebサイト仕様が変更されたので、このプログラムでは翻訳結果を受け取れなくなりました。そのため公開を中止します。
クリップボードの内容をGoogle翻訳してSeikaCenter経由でVOICEROID2/CeVIO/SAPI5に読み上げさせます。
ダウンロード
akatrans20181030.zip 2018/10/30公開。クリップボードの英文をGoogle翻訳で翻訳してVOICEROID2/CeVIO/SAPIに喋らせる
2018/10/30
- SeikaCenterを利用するバージョンを作成(20190324/c以前に対応)
アーカイブには以下が含まれています。
ファイル | 説明 |
---|---|
akatrans.exe | プログラム本体です。 |
akatran.json | akatrans.exeが読み込む定義ファイルです。 |
SeikaCenterAPI.dll | SeikaCenterアクセス用DLLです。 |
作者は Windows 10 Pro 64bit版 + .NET Framework 4.6.1 の環境で動作確認しています。 Windows 8 以降であれば話者に SAPIの「Microsoft Haruka Desktop」が利用可能と聞いています。SAPI指定時に実行時エラーが出てしまう場合は以下のソフトウエアを導入する事で改善された旨の報告を受けています。
- Microsoft Speech Platform - Runtime Languages (Version 11) ※読み上げの言語を増やしたい時
概要
このプログラムは、編集メニューの「コピー(C)」やショートカットCTRL+C等でクリップボードにコピーされたテキストをGoogle翻訳で翻訳した結果を SeikaCenter 経由で音声合成ソフトウエアに渡し再生します。
プログラム製作者は Windows10 Pro 64bit版上で、
- VOICEROID2
- CeVIO(CeVIO CS 6.1)
- SAPI(ASPI5)
- SeikaCenter 20190327/c
での動作を確認しました。
akache-chan so cute! https://translate.google.com/#en/ja/akache-chan so cute!
注意
- VOICEROID2やCeVIO、SeikaCenterはこのプログラム実行前に起動しておく必要があります。
- このプログラムではGoogle翻訳のWebサイトへアクセスしています。あまりに過剰なアクセスがあった場合、Googleから接続を遮断されてしまうかもしれません。常識の範囲内での利用を推奨します。
- 英文でなくてもGoogle翻訳のWebサイトにクリップボードの内容が転送されるので、機密情報を扱うような作業時には利用しない事を推奨します。
- また、エラーに関しての考慮が決定的に欠けています。ご注意ください。
始まりは過酷な労働からの解放
こちらのプロダクトをまずはこちらをご覧ください。
クリップボードを毎秒60回監視するという過酷な労働から琴葉茜ちゃんを解放するための挑戦をしてみました。
プログラムの使い方と説明
これは、echoseika版を手直しして SeikaCenter を利用するように再構成したものです。
設定
アーカイブに同梱された akatran.json を UTF-8(BOM無し)で編集可能なテキストエディタで開いてください。 akatran.jsonの“avatorConfigs”プロパティに使いたい話者のエントリを追加します。以下は話者を4人追加する例です。
{ "avatorConfigs": [ { "tkey": "英日", "cid": 1000, "alpha": 0.0, "intonation": 1.0, "pitch": 1.0, "speed": 0, "volume": 100 }, { "tkey": "英日", "cid": 2000, "alpha": 1.0, "intonation": 1.0, "pitch": 1.0, "speed":1.0, "volume": 100 }, { "tkey": "英日", "cid": 3000, "alpha": 50, "intonation": 50, "pitch": 50, "speed": 50, "volume": 100 }, { "tkey": "日英", "cid": 1005, "alpha": 0.0, "intonation": 1.3, "pitch": 1.0, "speed": 0, "volume": 100 } ], "urls": [ { "Key": "英日", "Value": "https://translate.google.com/#en/ja/{0}" }, { "Key": "日英", "Value": "https://translate.google.com/#ja/en/{0}" }, { "Key": "中日", "Value": "https://translate.google.com/#zh-CN/ja/{0}" }, { "Key": "日中", "Value": "https://translate.google.com/#ja/zh-CN/{0}" } ] }
tkey は翻訳方向を設定するプロパティです。“urls”プロパティで定義した翻訳のどれかになります。
cid はSeikaCenterで表示されている話者のcidです。
cid=1000 はMicrosoft Haruka Desktop、cid=2000 は琴葉茜、cid=3000 はさとうささら、cid=1005 はMicrosoft Zira Desktop、となります。
alpha, intonation, pitch, speed, volume, の各プロパティは音声効果パラメタです。
音声合成製品毎に範囲が異なりますので、SeikaCenter オプションの説明 をご確認ください。なおemotionパラメータは利用できません。
起動
前提として、先に音声合成製品、SeikaCenter、が起動している必要があります。 その次にakatrans.exeを起動します。
基本機能
この状態で例えばメモ帳で書いた英文をマウスで選択、ショートカットキー CTRL+Cでクリップボードにコピーします。するとウインドウにコピーしたテキストが表示されます。
再度ショートカットキー CTRL+Cで同じテキストをクリップボードにコピーすると、3秒ほどで英文が翻訳され読み上げが行われます。
話者を切り替えればその話者で翻訳結果を読み上げします。
その他機能
翻訳しない
Google翻訳サイトとの通信を行わず、クリップボード内容をそのまま読み上げします。このプログラムのコンセプトを否定してしまう機能です。
音声を出力しない
音声合成を抑止します。このプログラムのコンセプトを否定してしまう機能です。
クリップボードを変換結果で置き換えする
チェックボックス「クリップボードを変換結果で置き換えする」をオンにしておくと、「変換テキスト」が翻訳されたタイミングでクリップボードの内容が翻訳結果に置き換わります。
ショートカットキー CTRL+Vやメモ帳等の「貼り付け」メニューで翻訳結果の貼り付けが可能です。
動作一時停止
クリップボード監視を停止します。
技術的な説明
このプログラムはGoogle本屋君の説明と同じように、IE(webBrowserコンポーネント)経由でクリップボードの内容をGoogle翻訳ページで翻訳し、その結果をSeikaCenter経由で指定の音声合成製品で読み上げさせます。
本家との差異
本家との違いは、
- 動作トリガーはショートカットキーCTRL+Cを連続2回押下。もしくはコピーを2回連続実行。
- 話者を変更できる。
- 翻訳結果を残さない(記録しない)。
- 英日以外の翻訳も可能。
- 毎秒60回の監視はしないのでPCに多少優しい。
となります。
Win API AddClipboardFormatListener()
Windows Vista以降に実装されたAPI AddClipboardFormatListener() を利用しています。
このAPIでプログラムを登録すると、クリップボードに何らかの変化があった場合にOSが登録プログラムに対してウインドウメッセージ(WM_CLIPBOARDUPDATE)を送ってくれるので、ポーリングでクリップボードの監視をする必要がなくなります。
Google翻訳呼び出しURL
Web APIを使っているわけではなく、単純にGoogle翻訳のWebページへアクセスしています。以下のURLでテキストを渡しているだけです。
“en”を“de”に置き換えれば独日翻訳、“fr”に置き換えれば仏日翻訳です。
具体的なURLは akatran.json のurlsプロパティの定義を参照してください。
デフォルトの英日、中日、独日、仏日、日英、の5つが登録されています。この構造が理解できるなら、新たな翻訳を追加したり不要な翻訳を削除することができます。
Google翻訳結果取り出し
最初に取得できるHTMLには翻訳結果は入っておらず、JavaScriptの実行により後から非同期に翻訳結果が返ってきます。
JavaScript実行とその結果生成されるDOMを操作する必要があるため、IEコンポーネントを利用しています。
ダサいロジックで翻訳終了を検知しているため、3秒ほどかかってしまいます。もう少しスマートな方法もありますが手間に見合わないのでこのままにしています。