KancolleSnifferをしゃべらせようとしたら

最近はKancolleSnifferという艦これの支援ツールを開発している。このツールは艦これのプロトコルをのぞいて、遠征などの終了を知らせるタイマーを自動設定したり、普通のクライアントでは表示できないステータスを表示したりする。

もともと艦これやるとき便利なやつを気に入って使っていたが、開発が止まってしまい最近のプロトコルでは動かなくなってしまった。この手のツールは他にもいろいろあるが、これが一番気に入っていたので、よく似たものを自作した次第。

艦これやるとき便利なやつの次に気に入っていたのが提督さん!時間ですよ!!。これがいいのはタイマーの時間がくると「入渠していた艦の修理が完了しました」とかしゃべってくれる。ほかのことに集中しているときでも、何が起こったのか実にわかりやすい。

そこでKancolleSnifferもしゃべらせることにした。音声合成ソフトの生成したサウンドファイルを再生するだけなら難しくないので。

音声合成にはOpen JTalkを使った。CeVIOという無料の音声合成ソフトがよさそうだったけど、音声ファイルのライセンスがGPLと相性が悪かったので、CC BYのOpen JTalkを使った。

Open JTalkの生成したWAVEファイルを.NET Frameworkで再生するのはとても簡単なので、あっという間にKancolleSnifferをしゃべらせることができた。それでしゃべるバージョンをリリースしようとして、WAVEファイルが大きすぎることに気付いた。4つ合計で800kB。ソフトウェア本体の5倍もある。絶対的には大きくないが相対的に大きすぎる。

サイズを小さくするためにサンプリングレートを大きく下げてみたら、それほど品質の高くない音声合成のデータなのに明らかに劣化してしまった。そこでMP3に変換することにした。ビットレートを32kbpsにしてもほとんど品質は変わらず、サイズは約1/30になった。

.NET FrameworkでMP3を再生する方法はいくつかあって、一番簡単なのがWindows Media Playerコントロールを使う方法だ。しかし、この方法では.NET Framework SDKの生成した二つのDLLをアプリケーションに同梱する必要がある。

問題はこのDLLのライセンスが不明で、アプリケーション本体のGPLとの兼ね合いがわからない。どうしたらいいかGPL FAQを読んでみても、「Windowsで自由なソフトウェアを開発しようとするからだバーカ」みたいな答えしかない(´・ω・`)

最終的には、この生成されるDLLを使わずにWindows Media Playerコントロールを使う技を発見して何とかなった。この技はQiitaに書いておいた

難しくないと言ったな。あれは嘘だ。