2012/02/09(木)棒読みちゃんプラグイン版 SofTail

SofTailを棒読みちゃんのプラグインにしました。
Plugin_SofTail

使いながら、「こいつには画面の僅かな面積すら占有する資格は無いよな」「棒読みちゃんが最初からこの機能を持ってればいいのに」と思っていたので、まさに理想のSofTailができました。

棒読みちゃんのプラグインの作り方を把握するのにダラダラと時間がかかりました。
PBase ってインタフェースに明示されてないのかよ、とか。

ファイルを追いかける実装はSofTailと一緒です。一緒というか、コア部分はDllにしてあって、プラグインのインタフェースを作って ILMerge でガチャコンとくっつけてるだけ。
SofTailの方もダイアログフォームを作ってガチャコンとくっつけてるだけ。

2012/02/09(木)Plugin_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

Ver.1.0.1.1から、単体プログラムとプラグインを同梱するようにしました。

概要

棒読みちゃん用のファイル読み上げプラグインです。
棒読みちゃんでこのプラグインを有効にすると、指定したファイルを見はって、追記された内容を読み上げます。

インストール方法

ダウンロードした zip ファイルを展開するとフォルダが出来ます。その中に
ある Plugin_SofTail.dll を棒読みちゃんと同じディレクトリに置いてくだ
さい。
棒読みちゃんを再起動すると、プラグインが追加されます。

使い方

[その他]タブの中の、[プラグイン]タブで 有効/無効 や設定を変更できます。
Bouyomi-with-1.0.1.2.png


"SofTail" を選択して色が付いている状態で、右下のレンチのアイコンをクリッ
クすると設定画面が表示されます。
設定画面で、読み上げる対象のファイルとそのファイルの文字コードを指定し
てください。
Plugin_SofTail_config.png

ファイル名に含まれる日時を動的に指定することができます。
指定する場合は、書式指定文字列を "<>" で括ってください。複数指定することも可能です。
例えば、<yyyyMMdd>.log と指定することで、2/21のうちは 20150221.log を読み、日付が変わった時点から 20150222.log を読み上げる事ができます。

大まかに、以下のように記述できます。Mの大文字小文字に気を付けてください。
yyyy/MM/dd HH:mm.ss
2015/02/21 22:37.54
例)
C:\Users\teak\OmorohGame\<yyyy>年-<MM>月<dd>日.txt
山かっこの中に、書式指定文字列以外の文字が入っている場合は正しく解釈できません。再生が始まらない場合は、記述が正しいかもう一度確認してみてください。

書式指定文字列のさらに詳しい内容はマイクロソフトの技術情報を参考にしてください。このページで説明している書式指定文字列が使用できます。
https://msdn.microsoft.com/ja-jp/library/8kb3ddd4(v=vs.110).aspx


プラグインが有効になっていると、[合成音声]タブに "ねこのしっぽ" のよう
なものが描かれたボタンが表示されます。このボタンをクリックすることで再
生と停止を切り替えます。
再生中は緑色、停止中は黒い背景になります。
BouyomiChan-MainPanel.PNG


ファイルの文字コードには、.Net Framework の Encoding クラスが扱える文
字コードを指定する事ができます。
※言語によっては棒読みちゃんが読み上げられない場合があります

2012/01/16(月)SofTail

  • 型定義だけのDllをコアモジュール内部に戻した
型定義を外に出したのは、VSがSetting.csで使う型は自プロジェクトの定義からは参照出来ないという制限を回避するのが目的だったので、GUIとコアモジュールに分けた時点で型定義なモジュールを外に出す意味はなくなってたのね。

さて、プラグインを書くか、引き続きSofTailのApplicationSettingsクラスの足りない部分を書くか。スレッドをスレッドらしく書きなおすっていう宿題も残ってるか...。

お仕事でプログラムを組んでた時、複雑なシステムを相手にそこそこ戦えたのは先人達が整理されたコードで書いていてくれていたお陰だった、といろんなコードを見るにつけ思うので、なるべくそういうコードを書けるようになりたい。
あんなデカくて複雑なものをパフォーマンスの犠牲もコメントもなしで、でも見たらすぐに意図を汲める、なんていうクオリティには日曜プログラムを何年続けても到達できる気がしないが。

2012/01/13(金)続・SofTailNet

ただの作業メモ:
昨日
  • 存在しないファイルを読む設定にした場合に、[STOP]を押しても実は止まってない場合がある問題を修正
  • 型定義だけ入ったモジュールをDLLに追い出した
今日
  • メインの機能とGUIのガワをDLLに分割した
    • プロジェクトに分けてDLLを作成して、最終生成物は ILMerge で結合
    • フリーソフト程度のものは exe 単体で済んだほうがいいじゃん?
    • app.config に保存するデータ型を自前で定義する場合に、自プロジェクトで定義した型は使えない、というVSの仕様上のバグとしか思えない点も解決できてよかった
      • この一点だけでも ILMerge は有用なのでは?
ILMerge.exe の呼び出しは、ビルドイベントに入れておく。マクロが必要十分なだけ揃ってるのでこんな風に書けた。※一行です

"C:\Program Files (x86)\Microsoft\ILMerge\ILMerge.exe" $(TargetPath) $(SolutionDir)SofTailCore\$(OutDir)SofTailCore.dll $(SolutionDir)\SofTailTypes\$(OutDir)SofTailNet.Types.dll /out:SofTail.exe /log:ILMerge.log

いろんなツールでマクロが多すぎて使いづらかったり、逆に少なくて要求を満たさなかったりする事が多いので、少ないマクロで必要十分揃ってるっていうのは素晴らしいと思った。クリーンの時の動作も定義できるといいな。


機能の分割にこんなに時間を食うとは思わなかったけど、ついでにコードの整理もできたのでヨシとする。

追記:
  • TODO: 文字コードの指定でユーザー指定のものをリストに追加する際には、重複チェックを行う
  • WISH: ユーザー指定の文字コードは履歴を残す
    • セーブのタイミングを変えないと、最後に指定した物以外は残らない
    • めんどいから設定用のオブジェクトから内部オブジェクトに変数をコピーするのやめようか

2012/01/11(水)SofTail 0.9.7.4

公開はしてないけど作業メモ。
  • SofTalk.exe を起動できなかったので対処
    • /W オプション無しだとうまくいかないっぽい
    • "コマンドをファイル名として~" あたりの設定の初期値が変わったのかな?
  • 派生アプリを作りたいので使いまわせるようにコードを色々整理
  • 文字コードを色々指定できるように
SofTalk の対応を治してみたものの、
  • SofTalk.exe を呼び出すと大量にログが流れた時に渋滞を起こす
  • SofTalkw.exe を呼び出すと重なって再生されるので渋滞どころか無法地帯と化す
    • 無法地帯を治めるには...SofTailを親プロセスにして、プロセスツリーごと殺せた方がいいのかも
  • 俺が何か間違えた可能性があるけど、複数行を渡した時の動作がLIFOっぽい
    • FIFOじゃないの...
対処はめんどくさいのであんまり対応したくない感じ。
いつからか、/X: オプションが追加されてバッチ起動をしやすくなっていたのはありがたい。

構想してる派生アプリは棒読みちゃんのプラグイン。
単体アプリとして作るのは用途の割には大仰な気がしてたので、プラグインにした方がいい。出だしが SofTalk との連携で始まったので単体として作ったけど、棒読みちゃんならサードパーティプラグインを作れる。