日本語環境Windows11におけるPersonal Dictionaryの英語による人工音声再生対応(暫定対応版)

Personal Dictionary(PDIC)には「人工音声再生」という音声読み上げ機能があります。

PDIC Home Page

日本語環境のWindows11でこの人工音声再生機能を使用したところ、どうやっても日本語(Haruka)でしか読み上げできません。私は英語の発音確認用に英語で読み上げてほしいのです。Windows10だとコントロールパネルから設定できた、合成音声の設定ができなくなっているようです。
設定アプリ(という名称が正しいかわかりませんが)のアクセシビリティなども確認してみましたが、こちらからも設定できませんでした or 設定方法がわかりませんでした。

ということでWindows上の設定による対応をあきらめて、AutoHotkeyとJScriptによって英語読み上げするスクリプトを書いてみました。

今回動作確認した環境は以下の通りです。
・Windows 11 Home 24H2 (OSビルド 26100.2161)
・AutoHotkey V1.1.37.02
・PDIC/Unicode Ver.5.14.18 試作版 2023/9/18


1.AutoHotkey(*V1系でのみ動作確認済み、V2系では未確認)

#IfWinActive , ahk_exe PDICU.EXE
    ;読み上げ
    ^r::
        send , ^w
        sleep , 50
        ;1で最大1秒待つ
        ClipWait , 1
        run , "C:\Windows\System32\wscript.exe" "C:\bin\say.js" %Clipboard%
    return
#IfWinActive

PDICがアクティブの時にCtrl+R押下で英語読み上げ用のスクリプト(say.js、後述)を呼び出します。既存のPDICの人工音声再生のショートカットキー(Ctrl+R)を上書きしているので、必要であれば別のキー(例えばWindows+R)に変更してください。Ctrl+RはPDICの登録語編集等の画面でも実行可能なので、気になるようだったらIfWinActiveの条件をウィンド名に変更するなどの修正を行ってください。
PDICのWORD部分を全選択してコピー(Ctrl+A後にCtrl+C)、クリップボードを読み上げ用スクリプトに渡す、という挙動です(=見出し語の読み上げではありません)。 →  見出し語をクリップボードに格納(Ctrl+W)して読み上げ用スクリプトに渡す、に変更しました。
マシンの環境/スペックなどによっては、sleepの時間を増やさなければ読み上げに不具合が出るかもしれません。

このスクリプトのアレンジで、PDIC以外のアプリから読み上げを行うことも可能です。例えばメモ帳で選択中の文字列を読み上げる場合は

#IfWinActive , ahk_exe Notepad.exe
    ^r::
        send , ^c
        sleep , 50
        ClipWait , 1
        ;操作ミスに備えて50文字(≠50バイト)で切り捨て
        Clipboard := SubStr(Clipboard, 1, 50)
        ClipWait , 1
        run , "C:\Windows\System32\wscript.exe" "C:\bin\say.js" %Clipboard%
    return
#IfWinActive

とか。ここでは操作ミス(例えばCtrl+A後にCtrl+R)による多量の読み上げを抑止するため、50文字で切り捨てしています。


2.say.js

var args = [];
for(var i = 0; i < WScript.Arguments.length; i++)
    args.push(WScript.Arguments.Item(i));

var sapi = new ActiveXObject('SAPI.SpVoice');
sapi.Voice = sapi.GetVoices().item(1);
sapi.Volume = 10
sapi.Speak(args.join(' '));

読み上げを行うスクリプトです。このスクリプトはこちらこちらから引用させてもらいました。
このスクリプトは C:\bin\say.js と設置されることを前提としているため、別ファイル名/別パスにする場合は上記AHKスクリプト内のパスも書き換えてください。
sapi.GetVoices().item(数値)の数値部分を変更することで読み上げを行う音声を変更できます。日本語版Windows11の場合、OSインストール直後は0→Haruka(日本語、女性)、1→Zira(US英語、女性)、2→David(US英語、男性)のようです。
Volume(0~100)は自分の環境にあわせて増減させてください。rate(読み上げ速度、-10~10)も変更可能です。

当初読み上げを行うスクリプトはPowerShell(say.ps1)で記述していたのですが、実行時に一瞬表示されるPowerShellのウインドが消せなかったためJScriptに変更しました(他スクリプトから呼び出すことでウインド表示を抑止する方法はあるようです)。


ちなみにnatural voicesは現状スクリプトからは使用できないようです。

Edgeでnatural voicesが使用できる、ということはAHKによってEdgeからnatural voicesを使用する、ができるかもしれません(*本記事記述時点では未確認)。

【了】


いいなと思ったら応援しよう!