SoundDecoder.dllとxadec.dllのソースコードの公開依頼
ほほほみうらさんおはようございます。熱が 37.8 度まで引いたFROMです。 おー。「フォーマット済みテキストブロック」wiki文法を使うと、メールでも綺麗に読めるようになるんですね。 今後ありがたく使わせていただきます。m(_ _)m 背景が灰色になるのがちょっとアレですが。 まだ死にかけなので、朝食たべたらまた寝ます。 なので、要点のみお伝えします。 ・結論にも書かれておられますが、DTXMania を x64ネイティブにすることはできません。 お察しの通り、x64 Windows では x64 アプリから x86 DLL を呼び出せない仕様になってますので、 「AnyCPU」でもアウトになります。必ず「x86」で構成する必要があります。 もちろん、xadec.dll と SoundDecoder.dll を x64 化出来れば問題有りませんが、発声遅延問題はまた 別のところに根ざしていますので、x64 ネイティブ化では解消されないことでしょう。 ・xadec.dll のソースコードは、作者の中村さんの方針で非公開になってます。 通常の xa ファイルとは異なる中村さん独自のフォーマットを使ってらっしゃるようで、 xadec.dll を我々で構築するのは容易ではないでしょう。 ・SoundDecoder.dll のソースコードは自作ですが、私のPCが死んだ際にロストしました(涙)。ごめんなさいー。 CLR だとメモリブロックやACMの操作などなどがとろくてうっとうしいので、その部分を C++ で組んだだけのシロモノです。 どなたか再構築してやってくださいー。 ・発声遅延については、DirectSound であっても、ASIO のように常時フルストリーム方式で組めば 限りなくゼロに近づけられることが判明しています。 まぁしかし、たとえ ASIO にしても、DTXMania のように「デコードしながら再生」するようにした場合は DirectSound と大差ない遅延が出てくるんですけどね。(汗
HOHOHO_MIURAです。 ものすごく早いレスありがとうございます<(_ _)>。 ご体調の悪い中のご返答、大変痛み入ります。 回答としては以下の通りということで、一旦締めたいと思います。 ・x86DLLのx64化は、ソースコードがないため、自分たちで独自実装していくしかない。 但し、発生遅延はフルx64化では解決しないのではとのこと。 ・DirectSoundからASIOへのシフトで、遅延軽減の可能性が。 ⇒ここからは私の私見ですが、確かに上記作業で軽減するかもしれませんが、 x86環境では正常に動くので、直接の原因ではないのでは?という感じです。 ・結論としてはデバッグ&ログで、どこが遅延ネックになっているか地道に調べるしかない(T0T)。 以上です。
ども。1時間ごとに目覚めてしまうFROMです。ただいま37.6度なり。 > ・DirectSoundからASIOへのシフトで、遅延軽減の可能性が。 ここがちょっと違いますね。 私が言いたいのは、 ・DirectSound でもやり方次第で発声遅延を限りなくゼロにできるよ ・DirectSound から ASIO にシフトしても、今の方法変えなきゃやっぱり遅延でるよ ということなのですよー。 DTXMania の発声遅延の問題は何年も昔からの課題なので、 ぜひ解決にご協力いただけると幸いです。
横からすみません。
の2について、「デコードしながら再生」だとやっぱり遅延がでる、つまり遅延を無くすには常時フルストリーム方式にして且つ事前にデコードしておく必要がある、というお話ですよね。
今のDTXManiaのソース(FDK/コード/03.サウンド/CSound.cs)を見る限り、オンメモリ再生分については最初の読み込み時にデコードを済ませているようですので、後はそれをストリーム再生するようにすれば遅延を小さくできる、ということかと思います。
一方、オンメモリ再生じゃないやつ(約300MB以上のサウンドファイル)は「デコードしながら再生」になってますので、遅延が発生するということになりますが、これはBGMAdjustで各自調整いただくと割り切ってしまえば、あまり悩まずに取りあえずの目的(遅延削減)は達成できるように感じました。
・・・さて、SSTのソースの勉強を始めるか・・・
ども。無理矢理寝てるので体の節々が痛くなってきたFROMです。37.2度です。 そろそろドラム叩いてもいいでしょーか? ……ダメらしい。 > 今のDTXManiaのソース(FDK/コード/03.サウンド/CSound.cs)を見る限り、 > オンメモリ再生分については最初の読み込み時にデコードを済ませているようですので、 > 後はそれをストリーム再生するようにすれば遅延を小さくできる、ということかと思います。 ええ、でも今の DTXMania のストリーム再生ではダメです。 > 一方、オンメモリ再生じゃないやつ(約300MB以上のサウンドファイル)は「デコードしながら再生」に > なってますので、遅延が発生するということになりますが、これはBGMAdjustで各自調整いただくと > 割り切ってしまえば、あまり悩まずに取りあえずの目的(遅延削減)は達成できるように感じました。 これは yyagi さんからのご指摘ですが、システムタイマを使っている限り、チップの発声時刻と実際の 発声時刻を合わせることは不可能です。 今の DTXMania のストリーム再生では特に。 > ・・・さて、SSTのソースの勉強を始めるか・・・ ええ。簡単に言えば、「VfW や ACM を捨てて DirectShow にすれば解決するよ」ということです。 正確には、「解決しそうだよ」くらいですが。 まだ実験中なので、DTXMania に反映される際にはその点ご注意を。 でも、動画と BGM が別々にデコードされる仕様である DTX 形式では、今度は動画と BGM のズレが 発生しそうですねー……
fromさん、yyagiさんへ HOHOHO_MIURAです。 えーっと若干話しに付いていけなくなりました(^-^; 黙ってソースコードを読めということなんですかねorz。 じつわ、Win7+x64とは別に、WinXPSP2+x86を持っておりプレイ自体はそちらの方で遅延もなく実施出来ています。 ただ、今後新しいマシンを購入していくにしても、Win7しか手に入らないし、 大容量メモリを活かすためにもx64で動かしていきたいというのが本音なんですね。 なので、ロジックの不具合(発生遅延を含む)は置いておいて、x64にまず移行させて、 その後x86で開発を進めている方々と連動して動ければいいかなと思っていたのですが、 その入口で躓いてしまいましたorz。 ただ、Win7+x64という発声遅延が顕著に現れるマシンをメインとして使用するようになったので、 何がボトルネックになっているかは、比較的容易に検証出来るかと思います。 ただ、根気のいる作業が必要なので、結論が出るまでしばらく時間が掛かりそうですが (ToT)。 そんな感じでございます<(_ _)>
fromさん、yyagiさんへ HOHOHO_MIURAです。 一ついい忘れておりました。 発声遅延の私の確認方法ですが、Profileなどで調査しているわけではなく、 電子ドラム(DD-65)自身の音声と、DTXManiaの音声を比較して、 全く同タイミングで発声すれば問題なし、 「ダダン」と2つの音がズレて発声すればNGとして取り扱っております。 以上、参考までに。
37.1度です。あと少しです。FROMです。 > じつわ、Win7+x64とは別に、WinXPSP2+x86を持っておりプレイ自体はそちらの方で遅延もなく実施出来ています。 XP ではサウンドチップの提供するハードウェアアクセラレーション(HAL)が有効になるので、まだ救われていると思います。 HAL があれば、ドラムが何音同時に鳴ろうとも、サウンドミキシングや周波数変換、ビットレート変換などをすべて ハードウェア(サウンドチップ)側で行ってくれるので、遅延も少なくなります。 そして Windows Vista, 7 では、サウンドはすべて CPU で処理するように変更され、HAL は(ごく一部をのぞいて)完全に封印されています。 よって、遅延に関しては、CPU パワー、メモリの速さ、サウンドチップとメモリの通信の速さ等々がモノを言います。 ついでに、DirectSound3D に至っては Vista, 7 で廃止されました。 > ただ、今後新しいマシンを購入していくにしても、Win7しか手に入らないし、 > 大容量メモリを活かすためにもx64で動かしていきたいというのが本音なんですね。 実は、うちの開発マシンも Windows7 (x64) で、DTXMania用PC は XP (x86) なんですよ(^^; なのでもう必死。
HOHOHO_MIURAです。 お久しぶりです。 今更の質問なので、申し訳ないのですが。。。 ・Win7+x64の遅延の問題ですが、x86では発生しているのでしょうか? この質問の回答で何か出来るという訳ではないのですが、FROMさんのコメントにあった、 「Windows Vista, 7 では、サウンドはすべて CPU で処理するように変更され・・」 とが原因であれば、x86でも同様の問題が発生すると思うのですが、 そのような情報はあまり流れていないもので。 ソースコード見ないで、こんな質問をするのをするのもなんですが、 ご存知であれば、回答頂けると幸いです。
お久しぶりです。 FROMです。 おなか痛い。ここ5日ほど。 > ・Win7+x64の遅延の問題ですが、x86では発生しているのでしょうか? 発生するはずですが…、 私は x86 用の Win7 を持っていないので試したことがないです。 すみません。 # あ、妹のマシンが Win7(x86)だったかな? …でもまあ、再生遅延の原因となる要素はいっぱいありますよ、ほんと。 OS や CPU を疑うのは一番最後に回した方がいいかもってくらいに。 あと、サウンドカード(もしくはオンボードサウンド)の各種エフェクトは すべて切断しておいたほうがいいようです。 例えばうちの XP に挿してるのは SoundBlaster X-Fi XtremeGamer ですが、 ドライバ他のソフトウェアをインストールしたら色々なエフェクトが ON に なってて、許容しがたい大きな遅延が発生してました。 HALが効いてないのかー? Win7 でも、サウンド周りで余計なエフェクトがかかってないか調べてみては いかがでしょうか?
HOHOHO_MIURAです。 FROMさんのレスいつも早いですね。 いつ寝られているんですか(^-^; さて本題ですが、了解です。 サウンドボード周りのドライバを、ちゃんと見直すことから始めてみようと思います。 私も仕事柄ハードを制御するソフトを組むんですが、 結局、問題の環境を作らないとテストすら出来ないので、 それを完全に潰すのって、事実上不可能に違いんですよね。 このあたり、OSが違いを吸収して頂けるとありがたいのですが。 なんとももどかしい問題ですね。
詳細