MMIO を爆発させる
WAVEファイルの解析にMMIO使ってましたけど、あれに依存するのもなんだか嫌になってきたので手動でガリガリ解析することにしました。
昔は面倒だったんですが、今見ると全然普通でしたね。
WAVEFORMATEXの全データをfmtチャンクから取れるんですが、拡張フォーマットの場合を考えてWAVEFORMATEXは拡張部分のサイズを取れるようになってます。
しかし、WAVEのフォーマットでは拡張が無い場合にはそのサイズの記録すらもないので、データ開始位置より+2バイトずれてます。
そこをしっかり調整しないとまずいんですが、単純に-2バイトシークするだけとかになってたりして悲しい。
まあ、ファイルフォーマットは決まっているので問題無いといえば無いので安心ですが。
後しっかり作ったらOggVorbisが何故かデコード途中でフリーズする問題も解決しました。
これで当初の予定通りWAVE,OggVorbis,MP3の再生を準備することが出来た訳です。
・・・MP3ってゲームのサウンドライブラリに要るんだろうか。
OggVorbisも最近普通に使われるようになりましたし、必要無い気がするんですけどね。後、XAudio2のヘッダとACMのヘッダが干渉して困るとかもあったり。
MP3じゃなくて、他のフリーな、FLACとかをサポートしたほうが後々嬉しい気がします。