2014年6月21日土曜日

AviUtl歌詞表示支援ツール開発日記

女医ハックなるソフトで
歌詞のタイミングを記録することはできることがわかったわけなのですが、
exoファイルになればいいのになぁと
exoファイルをテキストエディタで開いてみると、
見れます。
書いてあることも何となくわかります。
女医ハックもテキストなので
形式にのっとったテキストを出せばexoとして上手くいきそうです。

exoファイルの構造は[]のブロックがあり
ヘッダがあって
オブジェクトは[]の中の頭の数字を増やしていけばよさそうです。
start=
end=
がはじめと終わりのフレーム数
ここにタイムコードから計算したフレーム数を入れて[]内の数字を増やしていく

でやってみると
あれ、変なところで区切れている…

デフォルトとして使うexoファイル
これは単純にテキストオブジェクトを置いたもので、
色やフォントを変えられるようにファイルを読み込む形にしたのですが

読み込んで[のところで分離して
再構築してるだけのはずなのに、なぜ?


よく見てみると「自動スクロール」の途中で分離しています
え?
漢字なんだけど…
これはSjisです
あ、漢字コードのなかにも[と同じ0x5bが含まれていたのです。
原因は[のコード0x5bだけで分離していたからです

ああ、
確か漢字の始まりのコードと終わりのコードがあって…
ちょっと面倒だなぁ
んー
とexoファイルを眺めて
あ、
じゃぁ…
改行+[
でサーチして分離でどうだ。
上手くいきました。

AviUtlで読ましてみます。
いけそうです。
テキストはそのままですがタイミングはとれます。
これでも使えるといえば使えるのですが

テキストも入れたいところです

text=
が内容だということはわかります。
その後は、16進数ッぽい
ということはバイナリをテキストにしたものらしい
コードはユニコードっぽい
歌詞をテキストエディタでユニコードに変換したものを作って
比較してみます
どうも、そうらしい

ならと、それを実装してみることにしました
MultiByteToWideChar
という関数でSjisからユニコードに変換して…
しかし
微妙に違います
それらしいことはやっているのに
んー

女医ハックのテキストはSjisで
テキストエディタで変換してやればユニコードが得られるのだから
この変換ならあっているようなのでこのファイルを使えば…。
しかし、これをユーザーにやらせるのは…

待てよ。
Windowsにそのくらいできるツールが入ってるんじゃないか
と調べてみると
batファイルで出来ることがわかりました。
コードがあっているか確かめて
あってるっぽい

これなら一連のことはbatファイルで行うことができます。
プログラムをユニコード対応にしてテキストはそのままバイナリを
16進文字列にしてやれば
ということで一応できました。

で、ちょっとだけバージョン上げました
複数のオブジェクトが設定できたり、midファイルから展開できたり

0 件のコメント: