Notepad++とNppExec(※メニュー>プラグイン>PluginManager から簡単にインストールできます。)とNirCmd(※フリーのコマンドラインツールです)の組み合わせで、Windows10 では何も工夫しなくても日本語のテキストも読み上げてくれましたが、XP や Win7 ではデフォルトでは英語しかしゃべってくれなかったので、日本語を読み上げさせるためにしたことを書いておきます。(※一応、Notepad++ のプラグインにも speech というのが上がっていたのですが、自由度が低いので使いませんでした。)

先に落ちを書いておきますと、いろんな技法に手を出して回り道をして大変だったのにいざ出来てみるとしゃべって欲しいことなんて別にないわけで・・・・w

今のところPHP経由でしゃべるようにして制作中のサイトの読み込み時間を読み上げさせてページの重さを計ったり、Notepad++のNppExecでやらせた処理が終わったら声で報告するというしょーもない使い道しか思いついていません。

 

Microsoft Speechで文章を読み上げさせる手順

少し応用してNotepad++のプラグインNppExecの変数$(CURRENT_WORD)で選択文字を渡してしゃべらせる場合は、

cmd /c speak.vbs $(CURRENT_WORD)

とする。


引数渡せるならなんでもいいので、始まりはNotepad++だったけれどもはや関係ない気がする。


注意点はバージョンを揃えるだけなので下記は読み飛ばしてOK.

Microsoft Speech Platform – Runtime (Version 11) でやること

SpeechPlatformRuntime をダウンロード

SpeechPlatformRuntime をダウンロード

「Choose the download you want」 OSに合わせて選択

「Choose the download you want」 OSに合わせて選択。64bitなら両方インストールする

元のファイル名が同じだったようで、自動でリネームされていました。サイズかプロパティで見分けられます

元のファイル名が同じだったようで、自動でリネームされていました。サイズかプロパティで見分ける

Microsoft Speech Platform – Runtime Languages (Version 11) でやること

Microsoft Speech Platform - Runtime Languages (Version 11)

Microsoft Speech Platform – Runtime Languages (Version 11)

日本語発声用の「MSSpeech_TTS_ja-JP_Haruka.msi」。ついでに認識用「MSSpeech_SR_ja-JP_TELE.msi」にチェックを入れて「NEXT」を押すとダウンロード開始

日本語発声用の「MSSpeech_TTS_ja-JP_Haruka.msi」。認識用「MSSpeech_SR_ja-JP_TELE.msi」にチェックを入れて「NEXT」を押すとダウンロード開始

あとはDLしたものをクリックしててきとーにインストールなので省略。古いバージョンが既にあると怒られたら古いのをアンインストールして今回DLした新しいのを入れてバージョンを揃えればOKです。


Windows XP の Notepad++、NppExec&NirCmdの構成で「nircmd.exe speak text “abcあいうえお”」とやってみると、英語の部分しかしゃべらない。

うーん。UTF-8にしてもダメだった。Vista も Win7 でもダメだった。まったく準備なしでしゃべったWin10とこんなに違うとは・・・

何時間も格闘した末、古いWinではSAPIではなくSpeechじゃないと動かないのが原因だったので、NirCmd 経由で呼び出すのではなくバッチを書いたら動きました。

なまじっか Win10 で動いたものだから xml のパラメータで”jp-JP”や”411″と国を指定とか試していて酷い遠回りをしてしまいました。

観念して外部のVBSファイルを作ったのがこちら

speak.vbs としてNotepad++のルートフォルダとかパスの通った場所に保存

  1. Dim oParam
  2. Dim words
  3. Dim speech
  4. Set oParam = WScript.Arguments
  5. On Error Resume Next
  6. '先に Speech を試してダメなら SAPI
  7. Set words = WScript.CreateObject("Speech.SpVoice")
  8. If Err.Number <> 0 Then
  9.     Set words = WScript.CreateObject("SAPI.SpVoice")
  10. End If
  11.  
  12. If oParam.Count <> 0 then
  13.     'Argから読み込む場合。長文は厳しい
  14.     for i = 0 to oParam.Count -1
  15.     'speed と pitch は-10~10(0が標準)で指定可能。詳しくはヘルプファイルのXML TTS Tutorialの頁
  16.     speech = "<rate speed='-1'><pitch middle='7'>" + oParam(i) + "</pitch></rate>"
  17.     words.Speak speech
  18.     next
  19. Else
  20.     'クリップボードから読み込む
  21.     speech = GetClipboardText()
  22.     words.Speak speech
  23. End If
  24.  
  25. ' クリップボードのテキストを取得する
  26. Function GetClipboardText()
  27.     Dim objHTML
  28.     Set objHTML = CreateObject("htmlfile")
  29.     GetClipboardText = Trim(objHTML.ParentWindow.ClipboardData.GetData("text"))
  30. End Function

出来上がった speak.vbs にテキストファイルをドラッグ&ドロップするだけで読み上げてくれます。

Notepad++から読ませる場合はテキストを選択反転した状態で次の二行をNppExecで実行します。

SCI_SENDMSG SCI_COPY
cmd /c speak.vbs

PHPでしゃべらせるのはこの手順。

TTSのインストールまでは同じ。

X:\xampp(パスは勿論読み替えて~)\php\php.ini に下記を追加し、PHP から Windows の COM オブジェクトを使えるようにする設定を済ませます。

[PHP_COM_DOTNET]
extension=php_com_dotnet.dll

一応、PHP_COM_DOTNET で検索して、見つからなかったら場所は先頭でもかまわないので二行まるごとコピペでOK。

iniで設定して準備が済んだら、下記の内容でspeak.php を作って

X:\xampp\htdocs\scripts\speak.php

など適当な場所に設置して NppExecやコマンドラインから文字を標準入力で渡しながら呼び出します。

speak.php を作る
  1. <?php
  2. $text = $argv[1];
  3. $os = (double)(php_uname('r'));
  4. // OSリリース名が6.2のWin8未満かで区別
  5. if ($os < 6.2){
  6.     $TTS = new COM("Speech.SpVoice");
  7. }else{
  8.     $TTS = new COM("SAPI.SpVoice");
  9. }
  10. $TTS->Rate=-1;
  11. $TTS->Volume=100;
  12. $TTS->Speak("<pitch middle='6'>".$text."</pitch>");
  13. ?>
Notepad++のプラグイン、NppExec から呼び出して反転している文字を読み上げる例です。
NppExec の Executeのテキストボックスに記述します。
パスは環境に合わせて書き換えてください。
// enable $(OUTPUT) variable
NPE_CONSOLE v+ o2 i2
IF "$(CURRENT_WORD)"=="" GOTO CAUTION
echo 選択箇所をMSのTTSで読み上げます
// TTSで読みあげ
X:\xampp\php\php.exe "X:\xampp\htdocs\scripts\speak.php" "$(CURRENT_WORD)"
GOTO EXIT
:CAUTION
X:\xampp\php\php.exe "X:\xampp\htdocs\scripts\speak.php" "選択されていません"
:EXIT
NPE_CONSOLE v- o2 i2

時間があればCOM および .Net (Windows) 
詳しいインストール事情については(COMの)インストール手順

SpVoice についてはヘルプを検索して XML TTS Tutorial あたりを読めばパラメータがわかる。

Npp のコアである scintilla については http://www.scintilla.org/ScintillaDoc.html を参考に Exec でいじれる。