Time Tagged Lyrics Viewer 略して、えーっと Ti Ta Ly V er Titalyverなんてどうでしょう? Version 1.0.1b (2012 11/17) ■概要 lrcファイル、いわゆるタイムタグ付き歌詞ファイルを音楽に合わせて表示します。 現在foobar2000と、何となくuLilithにも対応。 専用のコンポーネント(プラグイン)を用いて再生状態や楽曲の情報を受け取ります。 独自の機能として、ルビ表示と、 カラオケタグを少し特殊に記述することで複数行を同時にワイプさせることが出来ます。 ■動作環境 .NET Framework 2.0 現状の動作確認環境はWindowsXP SP3のみ 開発環境は、WindowsXP SP3上で、 UIをVisual C# 2010 Expressで、 描画処理とプロセス間通信をVisual C++ 2010 Expressで作っています。 ■使用説明 ◆foobar2000  foobar2000のcomponentsフォルダにfoo_juna_lyrics_messenger.dllをコピーしておきます。  Titalyverを起動します。  foobar2000を起動します。  起動はどちらが先でもエラーにはなりませんが、foobar2000が既に曲を再生している状態でTitalyverを起動すると、  その曲の間、再生状態が分からないので同期表示が出来ません。一時停止→解除とすることで同期することが出来ます。 ◆uLilith  uLilith_JunaLyricsMessenger.gpiをuLilithのPluginフォルダにコピーして後は大体一緒。 デフォルトでは、歌詞ファイルは音楽ファイルと同一フォルダの同名lrcファイルを対象としています。(変更可能) 歌詞ファイルが見つからない場合は曲情報を表示します(変更可能) ■操作説明 左ドラッグ:ウインドウの移動 縁部分でウインドウサイズの変更 左右同時ドラッグ:ウインドウの移動(画面端移動制限解除) 右クリック:メニューの表示 設定:設定ウインドウの表示/非表示 タイミング:タイミング調整ウインドウの表示/非表示 タスクバー表示:タスクバー表示の切り替え タスクトレイ:通知領域のアイコン表示切り替え(現在は最小化からの復帰にのみ使用) 最前面:最前面化の切り替え 最大化:最大化表示切替 歌詞ファイルを開く:テキストエディタ(デフォルトはメモ帳)で表示中の歌詞ファイルを開く 最小化:最小化します(タスクバー表示とタスクトレイ表示のどちらかがなければ無効) 終了:終了します ホイール:歌詞表示位置のスクロール 中ボタンクリック(正確には押した時点で):ホイールスクロールをリセット ◆設定ウインドウ  ◇表示   大体見たままなのでとりあえず説明は省略します。   わからなくても変化させてみれば理解できるかと。  ◇歌詞   歌詞探索リスト:    読み込むべき歌詞ファイルを指定します。    音楽ファイルのあるフォルダ、音楽ファイル名、楽曲の情報を用いてパスを指定してください。    見つかるまで上から順番に探索します。   歌詞無し表示フォーマット:    最後まで歌詞が見つからなかったときに表示する文字列です。    探索と同じく楽曲の情報が使えます。    歌詞の代わりに表示するので行頭にタイムタグが必須です。   リスト:使用できる参照名の表示。ボタンを押すと選択文字をクリップボードにコピー   再読込:歌詞探索からやり直して、新しく読み込みなおします   タイムタグ読み込み:歌詞ファイルのタイムタグをどのように読み込むかです。    拡張子で選択:.kraのみをカラオケタグとして読み込みます    カラオケ無効:全て行頭タグとして読み込みます。行頭以外のタイムタグは読み飛ばされ表示されません。    強制カラオケ:強制的にカラオケタグとして読み込みます。   カラオケ行末タグ省略時処理:カラオケタグ時、行末にタグがない場合の処理方法です。    次の行:次の行の開始時間を終端とします。    手前のタグ:その行の最後のタイムタグの時間を終端とします。  ◇画像   背景画像    探索リスト:     背景に表示する画像を指定します。歌詞探索リストとほぼ同じです。     改行のみの行があるとそこで探索を終了します。     現在は.NETの標準機能でjpgとpngとbmpとgifのみ読み込めます。    再読込:探索からやり直して再読込します。    カラーフィルター:読み込んだ画像に色を重ねます。「背景」として使う場合に必要になると思います。    サイズ制限:表示する画像の大きさを制限します。横と縦でそれぞれ別に設定できます。アスペクト比は強制的に維持します。     画面:表示領域の大きさで制限します(リサイズ時かなり重くなります)     画像:画像のサイズで制限します。つまり拡大表示せず、常に等倍表示か縮小表示になります。     指定:横のボックスで指定したサイズで制限します。    配置:表示領域のどの辺に寄せるかを指定します。ボタンが押されていなければセンタリングになります。   枠画像    ウインドウの枠として表示する画像を指定します。    この領域にドラッグアンドドロップで画像ファイルを読み込むことが出来ます。    画像を上下左右をそれぞれ二等分に分けて四隅に配置し、その間は中間位置のピクセル色で塗りつぶします。    画像フォーマットは背景と同じ、pngであればアルファも有効です。    枠画像が表示される時は、背景色の範囲が少しだけ内側に狭くなります。  ◇配置    それぞれの表示領域を指定します。    十時ボタンで依存辺を指定して、十時ボックスでピクセル数を指定します。    実際にいろいろ変えてみると、何となく掴めると思います。   歌詞、背景画像:それぞれの表示領域を指定します。   文字:    指定した表示領域に、文字を表示できます。    歌詞無し表示と同じく、参照文字で楽曲情報を表示できます。  ◇拡張    特殊な機能をとりあえずまとめています。   カラオケ    現在行待機色:現在行の到達前の色を指定します。左がテキスト色、右が縁取り色    カラオケ専用表示モード:カラオケ表示をします。読み込んでいる歌詞がカラオケタグではない場合、通常表示になります。     底辺マージン:表示領域の下マージンです   レイヤードウィンドウ:    ウィンドウ自体の透過率を設定します。  ◇その他   タグ無し歌詞表示:タイムタグのないテキスト歌詞を表示する時の設定を指定します    上のパネルが文字色(縁取り色)    下で上下位置の設定    その他の設定(フォント、左右位置、アンチエイリアス、縁取りの有無等)は通常の歌詞表示設定に依存します   更新間隔:描画の更新間隔です。   テキストエディタ    パス:右クリックメニュー「歌詞ファイルを開く」で実行するエディタを指定します。    引数:実行ファイルに渡す引数です。読み込んだ歌詞ファイルのパスを%1で参照できます。   設定ファイル:設定ファイルのパスです。   フォルダを開く:設定ファイルがあるフォルダを開きます。   ◆タイミング調整ウインドウ  表示タイミングを調整します。この設定は保存されません  スライダを動かすことで調整できます。  左右の数値ボックスでスライダの限界を増減できます。 ■約束事  このソフトを使って、何か起こっても責任は取れません。  ただし何が起きたか伝えて貰えれば、バグであれば対処出来るかもしれません。  このプログラムの著作権はJunaにあるということにしておいてください  常識的な範囲(あいまい)で自由にしてもらっていいです  ソースも公開しているので改良等ご自由に。 ■連絡先 http://hp.vector.co.jp/authors/VA025927/ 一応掲示板があるけどあんまり見てない juna_wint@yahoo.co.jp このメールアドレスはスパムも多いので、見逃すかも。 一応スパムも全部タイトルは確認しているけど。 Juna_idlerでTwitterをやってなくもないんだが、 全然つぶやかないし、ちょくちょく見てる訳でもない。 http://juna-idler.blogspot.com/ なんとなくブログでもやってみた ■履歴 2012 11/17 Version 1.0.1b タグ無しテキスト表示の後、歌詞のない曲が再生された時に、曲情報表示位置がタグ無し状態を引きずっていたのを修正 2012 8/29 Version 1.0.0b タグ無しテキスト表示時の上下位置設定を[その他]に追加 せっかくだからついでにバージョンを1にあげておく。 2012 8/28 タグ無しテキスト表示時、とりあえず強制的に「現在行位置Top オフセット0」で表示するように修正 2012 2/10 Version 0.12.2b RKLyricsView:行数計算のミスで文字が被る事があったのを修正 2012 2/7 起動時にタスクバー、タスクトレイ共に無し状態でも最小化できてしまったのを修正 2012 1/20 [表示][現在行位置]の[オフセット]が設定値で初期化されなかったのを修正 2012 1/18 Version 0.12.1b カラオケ表示の細かいバグ修正 2011 12/24 カラオケの待機色設定を[表示]に移動 2011 12/22 Version 0.12b 枠画像表示機能を実装。 2011 12/19 表示をレイヤードウィンドウとして実装。 タスクバー表示を消すとメッセージが届かなかったのを修正。 送信側の修正があるのでプラグインのコピーし直しが必要です。 2011 12/16 Version 0.10b マルチラインカラオケタグ(仮)に対応。 開始時間が同一の連続した行をひとつの行として扱ったり、 行の終了時間を次の行の開始時間以降に設定可能。 それに対応したカラオケ専用表示モード追加。 普通に使う分にはただの一行表示モード 2011 12/13 Version 0.9b カラオケ表示で現在行以外でもワイプ表示出来るように変更。 それに伴ってカラオケ時のフェード方式も変更。 2011 12/10 ホイールで表示位置のスクロールを追加 中ボタン押しでリセット 2011 12/8 Version 0.8b 歌詞表示(C++)を整理して、カラオケも表示できるようになった。 設定画面はとりあえず思いつく必要最低限で。 レイアウトのテキスト表示のフォントを選択可能に。 2011 12/4 起動中にプレイヤー側が二度起動すると情報を更新できなかった不具合を修正 2011 11/30 Version 0.5b 微妙なところもとりあえず整えて、公開 2011 11/29 とりあえず思いついたことは大体実装 2011 11/17 命名 2011 11/6 LyricsTTEやらRKLyricsView.DLLとそのテストプログラムやらfoobar2000コンポーネントの初歩の習作やらを使って、 ちょっと形にしてみた。 ■戯言 しかし何か無駄にメモリを喰うな。C#で楽をする代償か? ShowInTaskbarを消すとHWND_BROADCASTが届かないのかよ、こいつは面倒だな。 切り替えでHWNDの値自体が変わるとは。 結局もう一つファイルマッピングを作ってHWNDを登録するのに戻した。 ShowInTaskbarで変わるのは再登録で対応。 他のプロセス間通信も考えたけど、やっぱウインドウメッセージが完成しているものに乗っかる形で楽。 レイヤードウィンドウの、NCを含めた全画面更新はむしろ渡りに船。 ToolWindowで角を丸めず、NCHITTESTでイベントを殺せばRegionで削る必要がなくなった。 ただ、最大化→最小化→最大化(元に戻す)と何故か意図せずフルスクリーンになる。 対応もよく判らないし、裏技と言うことにする。 マルチラインでとりあえずVer.1にしてもいいのだが、一部設定画面のやっつけ具合を何とかしないと。 などと考えているうちに、レイヤードウィンドウ対応もいいかなとか思ったり。 カラオケタグを上手く使えばタグだけである程度複数行表示を制御できると分かったので、 とりあえず行終了時間を次の行以降にも出来るように実装。12/13 あと同一開始時間タグで複数行同時表示が出来ればいいんだが、以外とややっこしいな。 今まで気がつかなかったが、音源が22050Hzだと何故かだんだん遅れていく。 foobarだけじゃなくてuLilithでも遅れたからこっちに何か原因があるのかと思ったけど、 計ってみるとどれも再生時間自体が短くなっている。(4:30で2秒ぐらい?) シークでズレがリセットされるし、サウンドドライバの問題か? (入力サンプル数に対して再生時間が短い) 入力したサンプル数を元にしているであろう、プレイヤーの再生時間を定期的に受け取ればいいんだろうが、 foobarのon_playback_timeだと一秒ごとだし(たいした負荷でも無いだろうが)、 uLilithだとまずスレッド作って自前でやるところからだし、 とりあえず44100では問題ないから放置宣言。 カラオケもとりあえず何とかなったし、 ホイールでスクロールをやるなら、タグ無しテキスト表示もそれほど問題ないか? フォーカスがないとホイールイベントを取れないのがアレだが。 とりあえずやりたいことはだいたい組み込んだが、やっつけで仕上げてるから、ブクブクと醜く太った豚のような有様 画像の縮小処理が適当に組んだだけなのでくそ重い。 プロパティバインディングを使うと、何故か意味不明なタイミングで謎の値変化を起こすから、頼らない方針で。 アプリケーション設定自体は使うけど、操作を徐々に置き換えてる。 もういろいろ面倒なのでBROADCASTでまき散らすのに戻した FormBorderStyleがNoneだとタスクバーのメニューが出ないのが諸悪の根元。 Regionで削ったら、それが原因で今度はSizingも自前で実装するはめに。 すると今度はMinimumSizeが小さすぎると、実行時の実際の最小サイズと一致せず無駄に悩まされた。 読みは「タイタリィヴァ」または短めに「ティタリバー」を想定 まあ音でやり取りすることもないだろうから、ぶっちゃけどうでもいい