2009/11/04(水)棒読みちゃん

SofTail の音声再生に棒読みちゃんを使えるようにしてみた。
棒読みちゃんは自分で起動しておく必要あり。
ちらっと置いた 0.9.5 は外部コマンドとして Remotetalk.exe を呼んでいたけど、0.9.7 で棒読みちゃんクライアントライブラリを使うようにした。ライブラリ化されているとは素晴らしい、すげぇ楽。

棒読みちゃんのメリットは、
  • 初期状態でも英単語などをよく読んでくれる
  • チャットから辞書登録ができる
    • ニコニコ生放送で 教育 とか 忘却 とかやってるアレです
  • 文字数が多い場合に自動加速で読み上げ速度を上げてくれるので、チャットの流れが速くてもある程度安心
などなど。

2009/11/03(火)続SofTail.Net

結局 SofTail.Net を作ることにしました。初 C#、初 Windows Form。勉強しました。

割とまともなものが出来た気がしてます。
SofTail
.Net Framework が必要です。SofTalk の VB.Net版が動いているなら気にしなくていいと思います。

SofTalk の「引数をファイル名/オプションとして処理する」のチェックは不要にしました。
日付を読み飛ばせるようにしました。
その他いろいろ改善してます。
オプションを保存するようになったら ver.1.0 になると思います。

Widows7 と Windows2000 with .Net Framework 2.0 で動いたので XP でも動くと思います。
98? シラネ。


UOSA をテストで動かすためにビデオカードを引っ張り出しました。オンボードの GeForce 8xxx だったのが GeForce7600 になりました。ぬるぬる動くようになりました。


Fight Not Found で配布されている 棒読みちゃん には学習コマンドとかがあるらしい。
ライブラリとして利用できるのでこちらの方がよさそう。
そして何物か SofTail0.95.zip

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 クライアントはダメだ。
-> 多分ずっとそう。

ということがわかった。

2009/10/23(金)BOD管理CGI

UOA のベンダーエージェントデータによる一括入力を、本日 10/23 のパッチでローカライズされた分に対応しました。
以前からそうですが、ローカライズされていないデータも受け入れ可能です。

ページ自体の表記もローカライズに対応したほうがいい気がしてますが、女性用皮鎧のローカライズが入ってバルクオーダーに使われるアイテムの全てがローカライズされたらやります。
この変更を実装する際にはちょっとめんどくさい作業を行う予定なので、今のように気づいたら 10分足らずで作業完了というわけにはいかないはずです。
うまい方法を考え付くか、ローカライズデータを外部ファイルにしてデータ構造を自動生成するというめんどくさい方法でやるか、単純に 日本語->英語 と 英語->日本語 の2つの辞書をハードコードで持つようにするかを本気度 0% で悩み中です。

2009/10/22(木)UOSA のチャットログ

UOSA ではカスタムUI というユーザーがインタフェースをカスタマイズできる枠組みがある。
で、あれやこれや出来ないかと考えてました。
UO のチャットの内容をゆっくりさんが読み上げたら面白いんじゃないか、と。

いろいろ調べて、出来るんじゃないかなーと思ったのですが、(まだ?)カスタムUI について充分な文書が公開されてないようでよくわからん。XML エレメントの親子関係からしてよくわからん。

が、どうも UOSA はチャットログがまともに動くようで、書き出しのタイミングもかなり緻密に逐次書き出している。相変わらず UTF-16-LE ではあるが、ざっと見たところ正しい UTF-16-LE であるようだ。
であれば、FindFirstChangeNotification() でログファイルを見張って更新があったらゆっくりさんに渡す、という外部プログラムでやるのが簡単なんじゃないかと気づいてしまった。
で、その手の「ファイルを見張ってゆっくりさんが読む」という類のものはすでに誰かが作っているだろう、とも。

UOSA のカスタムUI でやるとしたら:
Interface.lua で
hYukkurisan = io.popen("SofTalk.exe", "w") 
しておいて、
UO_ChatWindow/Source/ChatWidows.lua の ChatWindow.UpdateNewTextAlert() を改造して、
numLogEntry = TextLogGetNumEntries("Chat")
LogEntry = TextLogGetEntry("Chat", numLogEntry)
LogText = WStringToString(LogEntry.text)
hYukkurisan:write(LogText)
hYukkurisan:flush()
追記: SofTalk.exe は標準入力を食べないのでこれじゃダメ。

みたいな?と思ったけどさすがに io や os モジュールは使えないようだ。package とかも無理だった。
外部プログラムを呼び出せるようなものは禁止されてるようなので、「カスタムUI でゆっくりさんにしゃべらせよう」計画はこれでおしまい。


ちなみに UO のカスタム UI は、
  • 見た目は XML
  • 動作は Lua
でいじれる。Lua インタープリタのバージョンは 5.1 でした。

カスタムUI をいじる場合は、
<Include file="Source/DebugWindow.xml" />
<Script file="Source/Debug.lua" />
WindowSetShowing("DebugWindow", true)
DebugWindow.logging = true
しておくと便利だと思います。