▼ 2011/12/04(Sun) C#とかの.NET言語で Ogg Vorbis デコードする DLL
ゲームのBGM用にOggのデコーダが欲しいじゃない?
2011.12.04 更新
- 長らく更新をほったらかしていたので手元の最新版にアップデートしました。
- ついでに、サンプルとドキュメント(嘘)を整備しました。
- 実はずいぶん前からループ終了位置も指定できるようになってました。
Ogg Vorbis Decoder DLL for .NET
(.NETからOggVorbisデコードするDLL)
by つーさ http://tu3.jp/
■概要
C#などの.NET言語からOggVorbisをデコードするライブラリです。
libogg 1.3.0, libvorbis 1.3.2 を用いています。
http://www.xiph.org/ より入手可能です。
・あたかもPCMストリームを扱っているいるようなOggDecodeStreamクラス。
・ストリームを渡せるので、暗号化ファイルやメモリ上のファイルなどに対応可能。
・ループポイントを指定して自動的にループデコードしちゃう機能を搭載。
1ループ分の波形データだけで、途切れないBGM再生が可能になります。
■ライセンス
ライブラリ(DLLファイルなど)は修正BSDライセンスで提供されます。
再配布を行う場合は、ライセンス文を配布物の中に含めるようにしてください。
詳しくはREADME.txtを読んでください。
■Special ThanX!!
J-SONさん J-SONさんのサイト (コールバックの呼び出し方法について助言をいただきました)
C#でOgg Vorbis - DLLのビルド (.NET Claimwork 3.0) (ライブラリの使用方法の参考にさせていただきました)
■ダウンロード
Download: OggVorbis.zip (2.41MB)
C#によるBGMループのサンプルコードとDLLそのもののソースコードも中に入ってます。
liboggとlibvorbisつけたらでっかくなっちゃった。
DLLそのものは184KBくらいです。

loading...
1: Su 2009年05月24日(Sun) 午前2時56分
大変有用なライブラリ、ありがとうございます。
Managed DirectXはそろそろフェードアウト気味みたいなのですが、ストリーム再生する場合、他の手段をご存知でしょうか?
2: つーさ 2009年05月24日(Sun) 午前5時38分
コメントありがとうございます。
結局のところ現状の.NETでその手の機能がサポートされてないので、MDXを使わないとなると、
SDLを使うとか → http://yanesdkdotnet.sourceforge.jp/
(何らかのwrapperを通して)FMOD、BASSなどのネイティブDLLに頼るか、
MDX2.0とも言われるxnaに乗り換えるかという話になると思います。
このVorbisのDLLも、結局は中にNativeなコードを含んでいるので、
Managedにこだわる理由はどこにもなくなってしまいますが、
それでも扱いが楽という意味ではDirectSoundは選択肢になるかと思いまして。
私は、MDXがフェードアウトと言っても、開発終了してるだけでスペック的には十分で、
実行環境がObsoleteされてしまうまでは、今後も使っていこうかなぁと考えていますがー。
3: kanryu 2009年07月14日(Tue) 午後3時47分
ライブラリの公開ありがとうございます。
現在商用のPC向けゲームエンジンを開発しているところですが、
そちらで採用させていただく予定です。(動作確認は済ませました)
BSDライセンスということで、せっかくなのでソースコードを公開されてはいかがでしょうか。
ogg/vorbisのAPI周りは比較的枯れていますが、
それでもバージョンごとに若干の差異がありますので
ソースコードが公開されていればそのような場合になってもユーザー側で修正が行えるようになります。
P.S.
.NetでDirectXを使うなら、SlimDXを使ったほうがいいと思いますよ。
4: つーさ 2009年07月17日(Fri) 午後3時49分
思わずコメントが遅くなりましたが、コメントありがとうございます。
そういえば、ソースコード公開してなかったのですね。
ライブラリのソースをダウンロードして static な.lib でビルドして、
それリンクして(分量的に)ちょろっと書いただけだったので、別に公開しなくてもいいかぁ的に考えていた部分があったかもしれません。
確かに、このライブラリの仕様、完全に私用というかで、人によってはかなり使いにくく感じるのだろうなぁと思います。
修正というよりは、参考にして新しく作った方がいいものができるでしょうなぁ……
というか、大概の人が言われずもがなそうしそう(笑)
SlimDXは知りませんでした。
私はもう、ずいぶん前からManagedDirectXベースの自分用ラッパライブラリを書いていて(→GSDKなど)乗り換えはわかりませんが、今進行中のプロジェクトが終わったらまた弄ってみたいと思います。