2008/05/10(土)Managed DirectSound でハマる
例の OggVorbis.dll もよく動いて、Framework系の仕事は一通りかなぁと思っていた矢先のデキゴトです。
昨日、部室に置いてあるパソコンで例のコードにより音楽を再生(ストリーミング)してみたときのデキゴトです。
音飛び しまくる。 音が飛びまくる。
え、なんで?! 俺のマシンではちゃんと動いていたし、
そもそも、このDLLここで作ってテストしたときはちゃんと動いてたんだよ?
例の OggVorbis.dll もよく動いて、Framework系の仕事は一通りかなぁと思っていた矢先のデキゴトです。
昨日、部室に置いてあるパソコンで例のコードにより音楽を再生(ストリーミング)してみたときのデキゴトです。
音飛び しまくる。 音が飛びまくる。
え、なんで?! 俺のマシンではちゃんと動いていたし、
そもそも、このDLLここで作ってテストしたときはちゃんと動いてたんだよ?
今名付けた(ぁ
今作っているもの。
サークルで作ることになりそうなゲームに使うための。
SRM401、久しぶりに。
どうでもいいことを書きます。
俺には能力がない。
……何を始めるにも遅いことはないんですよ?
いや、正直もう遅いんじゃないか。
エラー 1 fatal error LNK1257: コードの生成に失敗しました。 vorbis.net
J-SONさんありがとう! ありがとう!
というわけで、続 C++/CLI で Stream継承して Ogg Vorbis をデコードするクラスを書きたいよ
同じところで填った人のために書いておこうと思う。
要するに、コールバックされる関数は
"基本的にはStream内のメソッドを呼び出したときにしか呼ばれない" ので、メソッドの頭で pinして、
OggVorbis_File::datasource の中身を更新してからov_ナントカを呼び出せばいいというお話だった。
あぁそうなのか。datasourceの値なんて後から変更できないと思っていたよ。
Win32での開発におけるコールバックの値なんて後から変更できないことがほとんどだから、
初めてソースを見せてもらったときは、"datasourceの値がいじれるなんてそんなっ"って感じでしたが(笑
200行あまりで ref class OggDecodeStream : public Stream ができたよ!
後はこれをC#なりVB.net(使わんけど)なり、.NET言語からよ参照して呼び出してやりゃいいと。
というわけで最後にもう一度書きます。
J-SONさんありがとう! ありがとう!
賞金付きSRMも忘れて oggVorbis (というよりも、C++/CLI) と格闘。
C++/CLIで作る。System::IO::Streamを継承した、Vorbisデコーダクラス。
oggVorbisのライブラリは元ファイル読み込みにcallback関数が使える。
read_func(void *ptr, size_t size, size_t nmemb, void *datasource);
コンストラクタにVorbisのStreamを引数にとる。
Read(...)はデコードしたPCMを返す。
ことにしようと思った。
ov_open_callback から詰まった。
コールバック関数のポインタとして何をどうやって渡せばいいんだろう。
callbacks.read_func = (size_t (__cdecl *)(void *,size_t,size_t,void *)) (void*)Mashal::GetFunctionPointerForDelegate(gcnew read_func(this, &Vorbis::VorbisStream::inner_read));
こうですか? わかりません><;;
# 呼び出し規約からして怪しすぎるので、たぶんこれじゃあ動かないよなぁ……
あるいは、read_funcの最後の void* はユーザ定義の値を入れておけるんだけど、
これにManagedなクラスの参照を入れるのはpinする他は無理よなぁ……。
Unmanagedなクラスならポインタを突っ込んでおけば解決しちゃうけど。
結局……どうしようかなと思う。
OggVorbisの再生はどうしてもしたいので、
今回は普通のWin32なDLL + .NETのプラットフォーム呼び出し(C#でも使う)のか。
でも、なんか、.NETのDLL作ってみたいなと、思うんだけど。
……わかんないなぁ……。
[extasin:4840112738:蟲と眼球とテディベア / 日日日:内容(「BOOK」データベースより)
貧しいながらもケナゲに生きる高校生・宇佐川鈴音には愛する人がいた。知力、体力、財力、ルックスすべてに完璧な教師―その名は賢木愚龍。ある日あるとき鈴音が見た「林檎の夢」をきっかけに、二人は有象無象の輩にその純愛を邪魔されることとなる。それは「虫」という「個」を持たぬ謎の存在だったり、スプーンで武装(?)した「眼球抉子」なる名の猛き少女だったり―。魑魅魍魎を相手に二人は生き残れるのか?未曽有の学園ファンタジー開幕!第1回MF文庫Jライトノベル新人賞編集長特別賞受賞。]
"日日日"と書いて"あきら"と読む。