2023/03/12
unixコマンドの tail -f ライクな出力 + VOICEVOX等の音声合成製品による読み上げ、を実行するコマンドを作った。
何かのログやゲームのチャットログを読ませてVOICEVOXやCOEIROINK、SHAREVOX、LMROID, ITVOICE でそのテキストを発声させるコマンドプロンプト用プログラム LogWatchWanko.exe を公開する。
これはWindows用で、現時点ではWindows11(64bit)、Windows10(64bit)での動作が確認されている。
発声自体は同梱している voxsayコマンドかsapitalkコマンドをバックグラウンドで実行している。
※いずれも私が公開しているソフトウエアです。
LogWatcher から LogWatchWanko に改名された。
logwatchwanko-20230314-1.zip - 2023-03-14 公開。SAPIも使えるようにしてみた。
SAPIを使う時は何か起動する必要なし。
SAPIを使わなければ以下のいずれかを起動。
アーカイブ同梱のvoxsay.exe を以下のコマンドラインで実行。
voxsay -prod <音声合成製品> -list
利用する話者のindex番号を控える。
指定する音声合成製品
VOICEVOX を使う場合のコマンドは以下となる。
voxsay -prod voicevox -list
アーカイブ同梱のsapitalk.exe を以下のコマンドラインで実行。
sapitalk -l
利用する話者の話者番号(index番号)を控える。
全ての話者が使える訳ではないようなので事前にsapitalkで発声可能か調べておく。
LogWatcheWanko.exe.configを変更する。
LogWatcher.exe.config を持っていれば LogWatchWanko.exe.config にリネームして利用できる。
< LogWatcher.Properties.Settings ></ LogWatcher.Properties.Settings > の間のパラメタを自分の環境に合わせる。
パラメタ | 説明 |
---|---|
TtsCommand | voxsay か sapitalk を指定。 |
TargetPath | 対象ファイルの格納されるフォルダの指定。サブフォルダの検出はしない。 |
TargetFile | 対象ファイルの名称。ファイル実体の名称でもいいし、 Chat*.txt のようなワイルドカード指定でもいい。 |
CodePage | テキストファイルのコードページ。※932 がSJIS、65001 がUTF8、1200 がUTF-16LE |
FileFetchCycleMS | ファイルの更新を監視する間隔。ミリ秒を指定。※デフォルト : 2000 |
ProductID | 音声合成製品の指定。※voxsay使用時 |
SpeakerIndex | 話者のindex番号の指定。 |
SpekaerParameter | 話者へ与えるオプションの指定。 |
FilterPattern | 読上げ対象行の選択に使う正規表現。使わない場合は編集不要。※デフォルト : なし |
ChangeSpeakerPattern1 | 読上げ対象行がこの正規表現に一致する時に話者のindex番号とオプションの指定を変更する。使わない場合は編集不要。※デフォルト : なし |
ChangeSpeakerIndex1 | 正規表現ChangeSpeakerPattern1に合致した際に適用する話者のindex番号の指定。 |
ChangeSpekaerParameter1 | 正規表現ChangeSpeakerPattern1に合致した際に適用する話者へ与えるオプションの指定。 |
ChangeSpeakerPattern2 | ChangeSpeakerPattern1の正規表現に一致せず、この正規表現に一致する時に話者のindex番号とオプションの指定を変更する。使わない場合は編集不要。※デフォルト : なし |
ChangeSpeakerIndex2 | 正規表現ChangeSpeakerPattern2に合致した際に適用する話者のindex番号の指定。 |
ChangeSpekaerParameter2 | 正規表現ChangeSpeakerPattern2に合致した際に適用する話者へ与えるオプションの指定。 |
SearchPattarn | 読上げ対象行の文字列置換を行うための正規表現(置換前)。使わない場合は編集不要。※デフォルト : なし |
ReplacePattarn | 読上げ対象行の文字列置換を行うための正規表現(置換後)。使わない場合は編集不要。※デフォルト : なし |
コードページ
https://learn.microsoft.com/ja-jp/windows/win32/intl/code-page-identifiers?source=recommendations
旨くいったならファイルの追記が行われると読上げる筈。
必要な追記行だけを読上げるため、FilterPatternに選択条件となる正規表現を設定する。
選択された追記行を次の順に検証して話者を決める。
必要な場合に選択された追記行に置換を行う。
バックグラウンドで音声合成製品による読上げを行う。
FilterPatternで正規表現を指定できる。
以下にERRORもしくはFAILERが含まれている追記行のみを読上げる正規表現を示す。
FilterPattern : (ERROR|FAILER)
そのままだと冗長な追記行を正規表現で編集できる。
以下にとあるゲーム(なんとかNGS?)のログに対応した記述を示す。
SearchPattarn : ^([^\t]+\t){4}([^\t]+)[\t" a-z0-9\/]+([^\t]+)$ ReplacePattarn : $2 $3
このゲームのログは以下のような書式になっている。
タイムスタンプ<タブ>シーケンスNo<タブ>発言範囲<タブ>ID<タブ>ユーザ名<タブ>発言テキスト
UTF-16LEのエンコーディングでタブ区切りで6項目を持つファイルになっている。 この例では、追記行のテキストをユーザ名と発言テキストのみに置換している。
SearchPattarn
“^” → 行の先頭から、の意
“([^\t]+\t){4}“ → “タイムスタンプ<タブ>シーケンスNo<タブ>発言範囲<タブ>ID<タブ>” の範囲に対応
”([^\t]+)“ → “ユーザ名” の範囲に対応。$2のラベルが付与される
”[\t” a-z0-9\/]+“ → ”<タブ>発言テキスト“ の先頭にあるコマンド指定等の文字列
”([^\t]+)“ → ”<発言テキスト“ の先頭にあるコマンド指定等の文字列以降。$3のラベルが付与される
“$” → 行の最後、の意
ReplacePattarn
“$2” → $2のラベルが付与された範囲の文字列に置換える
” “ → 空白に置換える
“$3” → $3のラベルが付与された範囲の文字列に置換える
この設定の結果は
ユーザ名 発言テキスト(先頭のコマンド指定部分を除く)
となる。
なおこの指定だと数字・英小文字だけの発言はSearchPattarnにより消し込まれるので注意。