アーカイブ : 2013年 2月

[Java&LWJGL]OGGをストリーム再生出来ない時がある

どうも、hide92795です
エンジンの作成を進めていた時にBGMなどの長めの音声を生成する際にやけに処理が重くなっているのに気づきました。
(ちなみにSoundlyという外部APIを使っています)
調べてみたところ1-2秒も処理がかかっていました・・・
①この時の仕組みはCipherInputStreamから内容すべてをbyte[]に格納
②ローダーに渡してXSound生成
という感じでした(考えてみればMB級のファイルをすべて読み込むというのはすごく非効率)
1は別スレッドで行なっているので問題なかったのですが、2で時間がかかっている模様・・・
Javadocを眺めているとXStreamingSoundというクラスが有り、URL指定でストリーミング再生が出来るとのこと
実際にそちらの方で簡単にプログラムを作ってみたところ0.002秒ほどで2と同等の処理が終わりました
しかし、実際に使うとなるとCipherInputStreamをかませなければ暗号化されているので読み込めない・・・
というわけでSoundlyを改造してInputStreamも引数に取れるように改造しましたw
SoundlyはGPLv3なのでこちらで公開しています。
しかし、ここで新たな問題に直面しました
特定のOGGファイルだけ再生が開始できなくなってしまうという現象が発生するようになってしまいました(´・ω・`)
そのファイルとは
softalk及び棒読みちゃんなどのゆっくりボイスです
テスト用に適当に見繕ったのですが、自作・ニコニコモンズ上のもの両方でダメでした
また、改変したInputStreamの引数ではなく元々のURL指定でもダメでした。
ちなみにストリーミングせず従来の方式ではちゃんと再生されました
変換には同じソフト同じ設定でやっているので差異は無いはずなんですが(そもそも従来方式では再生できていたので再生自体は出来るはずなのに。。。。)
誰か情報を知っている人がいれば教えていただけると助かります><
とりあえずデフォルトはストリーミング、ファイル作成時にユーザーが従来方式のも選べるようにしておきますかね・・・
ではノシ