Riff chunked oggを使った曲を再生しようとすると、DTXManiaが強制終了する
フォーラムのほうにも書きましたが、おそらく発生条件は以下の3つの条件のアンドです。
# たまたまRIFF chunked OGG, mode 1, "Xiphophorus libVorbis I 20011231"のデータを所持しており、それはOKでした
取り急ぎ応急処置として、以下の対応を両方実施して回避できることを確認済み。
本来は、oggに関してのみ、SoundDecoder.dll相当のモジュールを作るべきですが、取り急ぎは上記で問題回避できると思います。
もう少し調べてみた。
https://github.com/kunitsyn/ogg-acm-codec
ここのreadme.txtやdevelopper.txtを見る限り、 ogg vorbisをWAVのRIFF chunkとして取り込む方法には複数あり、それぞれ一長一短ある模様。
で、私の環境では、mode1/2+は再生できて、2/2+がダメっぽい感じです。
なので、正しい対策は、mode 2/2+(3/3+)にちゃんと対応したデコーダを使う、ことになるのですが、上記の通り、WAVのまま扱おうとすると結局はどこかで破綻するようですので、WAVからoggを抽出して、WAVファイルでなくoggファイルとして扱うようなロジックを追加して対応しようと思います。幸い実装は簡単で、fmtチャンクのWAVEFORMATEXのcbsize以降(の先頭8byte以外)と、dataチャンクの中身を丸々ぶっこ抜いてくっつければ、それでoggファイルになるはず。
Rev. 8cb598283e68b1b0fc3cc2e851b5637547842866 で修正済み。いろいろと大変だったので備忘録として以下補足を。
まだまだ未確認事項が多く、またテストも不足していますので、今後のんびり確認/テストしていきます。ビルドしたものは下記に置きました。 https://osdn.net/users/yyagi/pf/DTXMania_TestBuilds/dl/DTXMania/DTXManiaGR_fixRiffChunkedVorbisDecoder.zip
なお、
WAVからoggを抽出して、WAVファイルでなくoggファイルとして扱うようなロジックを追加して対応しようと思います。幸い実装は簡単で、fmtチャンクのWAVEFORMATEXのcbsize以降(の先頭8byte以外)と、dataチャンクの中身を丸々ぶっこ抜いてくっつければ、それでoggファイルになるはず。
これもトライしてみたのですが、曲の途中までしかデコードしてくれないデータを見つけてしまったので、没にしました。
まだまだ未確認事項が多く、またテストも不足していますので、今後のんびり確認/テストしていきます。ビルドしたものは下記に置きました。 > https://osdn.net/users/yyagi/pf/DTXMania_TestBuilds/dl/DTXMania/DTXManiaGR_fixRiffChunkedVorbisDecoder.zip
#39490の修正を含めて、同じファイル名で再度uploadしました。お一人だけ古いファイルをダウンロード済みの方がいらっしゃいましたので、お手数ですが再度ダウンロードください。
なお、.NET Core 2以上・・・はなくても本体は動作しました。
Release115に取り込み済み。
Release115に取り込み済み。
SoundDecoder.dll を「使っていない」DTXManiaで、下記の曲データをWASAPI/ASIOで再生しようとすると、WAVデータのデコード処理中にエラーが発生して、try-catchしているにもかかわらずアプリが強制終了する。従い、公開中のRel114では問題発生しないが、開発中の115で問題発生。派生本体では問題発生するものと思われる。
tps://www.dropbox.com/s/o2t8qiv1xay0u3f/TOCCATA.rar?dl=0
なおDirectSound使用時は、強制終了はしないものの、BGMが無音になる。
フォーラム ユーザフォーラム [#83387] からの引用。