2009/10/28(水)Windows7

しばらく Windows7 64bit を使ってます。
UO は 2D も SA も動く。UOA も動く。落ちたりもしない。

互換性はかなり出来がいい。今の所、動かなかったアプリケーションはない。得体の知れないフリーウェアを多用していない、というのはあるけども。
ドライバもかなり対応が進んでいるようだ。

アプリケーションが 64bit 対応しているか、はさほど問題にならない。32bit アプリケーションはそのまま動く。32bit アプリ実行の互換性は超よくできてる。Linux や FreeBSD でアレコレやらないといけないことと比べて、やっぱり商用 OS はすごいわ、と思う。OS にとっては厄介な仕事であってもユーザーはそんなこと考えなくていい。
そういう意味では FreeBSD amd64 の 64bit 版 firefox で 32bit 版の Linux 版 Flash プラグインが動くっていうのは超すごいと思った。

アプリケーションそのものが動かなかったことはないが、アプリケーションのプラグインで動かないものはあった。DTM ソフトの VST, DXi プラグインの一部と foobar2000 のプラグインの一部。
どうやら DLL によっては 32bit アプリケーションから 32bit DLL を読む場合でも動かない場合があるっぽい。呼び出し規約とかの問題だろうか?ただの勘だけど。


Flash プラグインが 64bit 対応しないっつー文句をよく見かけるんだけど、俺が中の人ならすでに完成してても Windows8 まで出さない。Windows が標準で使うブラウザが 64bit になるまで出さない。64bit 対応しろって言ってるやつほど真っ先にハマりそうで超うざそうだから。

2009/10/27(火)SofTail .Net版

.Net Framework に正規表現関数があるようだ。
ならば GUI も Windows Form で書き直して SofTail .Net版にするか!と思いたった。
正直、やってみよう、と思った時にはちょっとワクワクした。

Visual Studio で Windows Form アプリケーションの雛形にしたがって作り、よくわからないのでイベントハンドラも IDE にお任せで生成させて...。とやったんだが、ヘッダの中に実装を書け、といわんばかりにヘッダファイルが開いた。なんの陰謀だよ、とそのヘッダを読んでみるとすでに自動生成されたコンストラクタがばっちりと「実装」されていた。
何を言ってるのかわからねーと思うが俺も何をされたのかわからなかっ(ry。

旧来どおりに GUI をリソースエディタで書いて、ウィンドウプロシージャを生でさわるっていうスタイルのままで行くことにしました。

2009/10/26(月)SofTail

SofTail

SofTailNet-1.0.1.2.zip (2015/06/06)
SofTailNet-1.0.1.3.zip (2016/04/20)
MD5 (SofTailNet-1.0.1.2.zip) = 2f9e7f77ac0654dbe50cea8bc2be6367
MD5 (SofTailNet-1.0.1.3.zip) = 547fb48110a151d961ce0d8c76103b4b


棒読みちゃん用プラグイン

これは何?

ファイルの更新を見張って、追記された部分を SofTalk(通称ゆっくりさん) や棒読みちゃんに渡して再生するプログラムです。
主に、UOSA クライアントのチャットログを音声再生するために作りました。
単にしゃべる tail としてもお使いいただけます。

UNIX には tail というファイルの末尾を表示するプログラムがあり、-f というオプションをつけるとファイルの追記分を継続して出力し続けるという機能があります。SofTail はこの出力を SofTalk に渡すような動作をします。よって、SofTalk + tail = SofTail としました。

使い方

SofTalk は付属していません。SofTalk からダウンロードしておいてください。SofTalkに複数の行を読ませた際に、読み上げる順序が入れ替わってしまうバグがあります。
棒読みちゃんは 棒読みちゃんから。

.Net Framework 3.5 以上が必要です。Microsoft Update などで最新版をインストールして置いてください。
棒読みちゃんを使う場合は、再生開始前に棒読みちゃんを起動しておいてください。

起動すると以下のウィンドウが表示されます。
SofTail-1.0.1.2.png

操作方法
ファイル
読み上げさせるテキストファイルを指定します。「参照」ボタンで開きます。

文字コード
入力ファイルの文字コードを指定します。UOSA のチャットログは utf-16 です。
リストにない文字コードでも、Encoding クラス に記載されている文字コードを直接入力して指定することも可能です。

SofTalk
SofTalk を使う場合は SofTalk.exe の場所を指定します。こちらも「参照」ボタンが使えます。

音声合成ソフトウェア
どちらを使うか指定します。棒読みちゃんを使う場合はパスを指定する必要はありません。
※ 棒読みちゃんとSofTailを別々に起動するのが面倒、という要望には別の形でお応えする予定です。

UOSA chat.log の日付を省略する
UOSA の chat.log の行頭についている、[09/10/03][10:10:10] みたいな日付を省略して音声合成ソフトウェアに渡します。

Play
このボタンを押すと再生を開始します。指定されたテキストファイルが更新されると 音声合成ソフトウェアが内容を読み上げます。

Stop
再生を停止します。
Stop ボタンで再生を止めた後に再度 Play ボタンを押しても、停止中の内容は再生されません。

SofTail を終了しても SofTalk は終了しません。

動作環境

推奨環境は .Net Framework 3.5 SP1 が動作する環境 == Windows XP 以上です。
動作確認した環境は Window7 64bit, Windows XP SP3 + .NetFramework3.5SP1です。

.NetFramework2.0 及び、Windows XP 以前の環境での動作は未確認です。

よくありそうな質問

Q. 棒読みちゃんだけでは足りないの?
A. 棒読みちゃんに付属しているプラグインを見ると、内部では同じような事をしていそうですがユーザー指定のファイルを対象にしたプラグインはありませんね。そんなプラグインが追加されたらとっとと身を引きます。

Q. SofTalk が文章を読もうとする度に Windows セキュリティの警告が出ます。
A. SofTalk.exe のファイルのプロパティで ブロックを解除する を実行してみてください。

Q. 突然すごい勢いで喋り始めました
A. ファイルの末尾に追記されたのではなく、ファイルが"変更"された場合には頭から全部読むかもしれません。SofTail と音声合成ソフトを停止する他に道はありません。

Q. 再生中にグレイアウトしていない項目は変更できるってことですか?
A. 知りません。

Q. MacOSX で tail -f text.txt | saykana -f - を実行するのと何が違うんですか?
A. UNIX文化っていいですよね。

Q. このツールを使うことで EA に怒られませんか
A. SofTail は UO の情報を云々したり、ましてや UO に対してどうこうするものではないので安心してください。ていうか、単にテキストファイルをリアルタイムに読むだけのツールです。

Q. UOSA のチャットログはどこですか?
A. インストールディレクトリの logs\chat.log に置かれます。標準では C:\Program Files\Electronic Arts\Ultima Online Stygian Abyss\logs\chat.log です。

Q. UO2D クライアントのログは読み上げられませんか
A. 試していませんが、utf-16 として読めるかもしれないし、不正な utf-16 なので読めないかもしれません。

Q. UO2D クライアントのログをリアルタイムで読めませんか
A. 2D クライアントのジャーナルログ保存機能はリアルタイムではなく、かつ正しいテキストファイルではないので基本的には無理です。
2D クライアントのジャーナルをリアルタイムで読めるツールはあるので技術的には実現可能ですが、そういったツールの使用はグレーを通り越して完全に黒なので私は作りません。

既知の問題点

重大な問題があります。各機能の詳細な動作確認をしていない、という主に作っている人に起因する問題があります。おかしな動作があったらずばり言ってください。
  • Start, Stop を連打すると落ちることがある
  • SofTalk と連携できるのか、0.9.7.2以降全然確認していない
  • Harley Davidson に SofTail っていう車種があるらしい
些細な改善点
  • SofTalk やログファイルのパスは記憶させたい一応実装
  • メッセージを指定して読み飛ばす機能があるといい

変更履歴

2016.04.20 ver1.0.1.3
  • Stopしてから再度Startしようとするとクラッシュする問題に対処
2015.02.21 ver1.0.1.0
  • ファイル名に、書式指定文字列を使用できるようになりました
2012.01.18 ver1.0.0.0
  • 文字コードの指定を、リストにないものも直接入力で指定できるように変更
    • 一旦指定した文字コードは記憶されて、次回からはリストに表示されます
  • [fix] SofTalk との連携が出来なくなっていた問題を修正
  • [fix] 存在しないファイルを読む設定にした場合に、Stop ボタンを押しても動作が止まらない問題を修正
  • 内部の処理を色々変更
2012.01.04 ver0.9.7.3
  • テキストファイルを吐き出すソフトウェアがファイルを排他ロックで開いている場合に、なるべく邪魔せず邪魔されず動くように変更
    • ファイルを読むたびに開いては閉じ、権限エラーがあれば再試行したりするようにしました
    • テストはしていますが、エラー処理が漏れていたらすみません
  • 設定を記憶するようになりました
    • Vista,7では %USERPROFILE%\appData\Local\SofTail に、XPでは %USERPROFILE%\Local Settings\Application Data\SofTail に保存されます
  • アイコンを付けました/Aboutダイアログを変えました
    • 落書きたのしー
  • ビルドターゲットを .NetFramework3.5 から .NetFramework3.5ClientProfile に変更しました
    • 対応環境が広がったという事になりますが、実質的には何も変わらないと思います
  • .NetFramework2.0 での動作確認をやめました
2011.12.31 ver0.9.7.2
  • SofTalk.exe のパスを指定するための[参照]ボタンが有効にならないバグの修正
2011.12.30 ver0.9.7.1
  • 棒読みちゃんのバージョンアップに伴い、ライブラリを入れ替え
    • 棒読みちゃん 0.1.10.0 に付属のBouyomiChanClient.csを使用しています
  • 指定したテキストファイルが存在しない場合に不正終了する問題を修正
    • 存在しない場合はエラーになるのではなく、ファイルが生成されるまで待つ
  • 読み上げソフトに棒読みちゃんを選択した場合に、SofTalkのパスを指定する「参照」ボタンを無効化する
  • デフォルトの値を、自分用のUOSA向けパラメータから変更して一般的と思われる値に変更
  • 内部の処理をちょっと変更
    • .NetFramework 2.0 で動かなくなっていたらごめんなさい
2009.10.5 ver0.9.7
  • 棒読みちゃんをライブラリ経由で使用するようになった
  • 再生したままプログラムを閉じようとしたときに正常終了できない場合の処理をちゃんとした。
2009.10.4 ver0.9.5
  • 棒読みちゃんを利用できるようになった
  • 修正: 再生したままプログラムを閉じようとすると正常終了できない場合があったのを修正
2009.10.3 ver0.9
  • C# + .Net Framework で作成して公開

  • C++ Win32 API 版があった

2009/10/26(月)ゆっくりしっぽ

UOSA のカスタムUI からはゆっくりさんにしゃべらせることはできなかったが、あきらめ切れなかったのでなんとなく作った。
Softail-0-1.png

サイドメニューの「ツール」からダウンロードしてください。

指定したファイルを見張り、追加された内容をゆっくりさんに渡す。
ゆっくりさんに [freebsd:jman:tail] -f させるから SofTail。

使い方:
ゆっくりさん は自分で用意してください。
  1. SofTalk の設定で、「引数をファイル名/オプションとして処理する」にチェックを入れておく
  2. 上の段の「入力ファイル」にゆっくりさんに読ませたいテキストファイルを指定します
  3. 下の段の 「SofTalk」に SofTalk.exe の場所を指定します
  4. Play ボタンを押すとファイルを見張ってゆっくりさんにしゃべらせ始めます
  5. Stop ボタンを押すと止まります
一番下の欄はデバッグメッセージです。気にしないでください。

要するに、UOSA のチャットログを指定するとゆっくりさんがそれをしゃべる。

他の用途に使えるかどうかは知らない。UOSA のログが UTF-16 で、SofTalk が UTF-16 を受け入れてくれるのでそのまま食わせてるだけ。漢字コードの変換や特殊な操作は何もしてない。

大事な注意:
β版どころかパイロット版です、エラー処理もバグ出しもしてません。たとえばテキストファイル、SofTalk.exe を指定しないで Play ボタンを押すと不正終了したりするかもしれません。
Play 状態のままファイルを切り替えるとよくないことが起きる気がしてます。
64bit 版 Windows7 で作りました。一応 32bit プログラムとしてコンパイルしていますが、他の環境で動くかどうか知りません。
SofTalk のオプションの変更はしないほうが実は簡単だけど、使い方をよくわからないまま作り始めたのでこうなってるだけ。
UTF-16 のファイルしか試してません。ていうか UTF-16 と他の文字コードを共存させるのって関数ごとちがうから超めんどくさそうで俺には無理っぽいんだけどなんかいい方法あるの?
たった今動くものができてろくに確認もせずに公開してます。

そんなモノですが試して笑っていただけると幸いです。



使ってみた。

UOSA のログは頭に日付、時間が付いているのでそれを読み上げられて邪魔。
-> なんとかしたいけど、PCRE と Boost の regex とどっちが便利なん?
ゆっくりさんのしゃべるスピードよりログが流れるスピードの方がものすごく速い。ヘイブンにいたらあっという間に5分くらい置いてかれた。
-> どうにもならんね
UO のキャラ名は英語だけど、ゆっくりさんは英語の人名の読み方なんて知らない。魔法のスペルなんて知る由もない。俺だって読めない。
-> 地道に辞書を編集するか、どこかで辞書を拾ってきてゆくりさんが読めるようにしてつっこむか。
そもそも SA クライアントはダメだ。
-> 多分ずっとそう。

ということがわかった。