チケット #25732

SoundDecoder.dllとxadec.dllのソースコードの公開依頼

登録: 2011-07-17 06:56 最終更新: 2011-09-21 02:01

報告者:
担当者:
(未割り当て)
チケットの種類:
状況:
完了
コンポーネント:
マイルストーン:
優先度:
5 - 中
重要度:
5 - 中
解決法:
動いてるけど?
ファイル:
なし
投票
点数: 0
No votes
0.0% (0/0)
0.0% (0/0)

詳細

HOHOHO_MIURAと申します。

私の方でも以下の方同様、
Win7+x64による発音遅延が激しい問題に悩まされております。
http://de.sourceforge.jp/ticket/browse.php?tid=23709&group_id=5350

VOW64が介在しているのが原因か?と仮説を考え、
全てをx64ネイティブに変更すれば解決するのではと思い、
以下のSubversionリポジトリからtrunkフォルダをチェックアウトして、
x64によるコンパイルを試みてみました。
http://sourceforge.jp/projects/dtxmania/svn/view/

開発環境は以下の通りです。
OS:Win7 Pro x64
言語:Visual C++ 2008 Express
   Visual C# 2008 Express
   Microsoft Windows SDK for Windows7(7.0)
   Microsoft DirectX SDK (June,2010)

上記環境をx64コンパイル可能なようにセットアップ後、
 SlimDX.sln:Release/x64でリビルド
 DTXManiaソリューション:Release/AnyCPUでリビルド
を行ない正常終了しましたが、実際に実行したところ、
「xadec.dll が存在しません。DTXManiaをダウンロードしなおしてください。」
「SoundDecoder.dll またはその依存するdllが存在しません。DTXManiaをダウンロードしなおしてください。」
とエラーが出力され、DTXManiaが起動されませんでした。
尚、生成したEXE・DLLファイルは上記DLLも含め実行しております。

いろいろ調査した結果、
 ・DTXManiaプロジェクト/Program.cs/tDLLの存在チェックメソッド/LoadLibrary()が上記DLLの場合のみ正常に動作しない。
 ・Windowsの仕様として、x64EXEにリンク出来るDLLはx64のみ。x86はリンクできない。
  (x86EXE-x86DLLのリンクは、x64環境下でも可能)
 ・上記DLLをx64でリビルドしないと、フルx64は実現出来ない?
という結論に至りました。

Subversionリポジトリを全て拝見させてもらったのですが、
「xadec.dll」「SoundDecoder.dll」それ自体はあるものの、
そのソースコードを見つけることが出来ませんでした。

そこで、xadec.dll」「SoundDecoder.dll」のソースコードを、
Subversionリポジトリにチェックインして頂きたいのですが、
可能でしょうか?

以上、ご検討の程お願いします。

チケットの履歴 (12 件中 3 件表示)

2011-07-17 06:56 更新者: hohohomiura
  • 新しいチケット "SoundDecoder.dllとxadec.dllのソースコードの公開依頼" が作成されました
2011-07-17 07:38 更新者: from
コメント
ほほほみうらさんおはようございます。熱が 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 と大差ない遅延が出てくるんですけどね。(汗

2011-07-17 10:09 更新者: hohohomiura
  • チケット完了時刻2011-07-17 10:09 に更新されました
  • 状況オープン から 完了 に更新されました
コメント
HOHOHO_MIURAです。
ものすごく早いレスありがとうございます<(_ _)>。
ご体調の悪い中のご返答、大変痛み入ります。

回答としては以下の通りということで、一旦締めたいと思います。

 ・x86DLLのx64化は、ソースコードがないため、自分たちで独自実装していくしかない。
  但し、発生遅延はフルx64化では解決しないのではとのこと。

 ・DirectSoundからASIOへのシフトで、遅延軽減の可能性が。
  ⇒ここからは私の私見ですが、確かに上記作業で軽減するかもしれませんが、
   x86環境では正常に動くので、直接の原因ではないのでは?という感じです。

 ・結論としてはデバッグ&ログで、どこが遅延ネックになっているか地道に調べるしかない(T0T)。

以上です。

2011-07-17 10:57 更新者: from
コメント
ども。1時間ごとに目覚めてしまうFROMです。ただいま37.6度なり。

> ・DirectSoundからASIOへのシフトで、遅延軽減の可能性が。

ここがちょっと違いますね。
私が言いたいのは、

・DirectSound でもやり方次第で発声遅延を限りなくゼロにできるよ
・DirectSound から ASIO にシフトしても、今の方法変えなきゃやっぱり遅延でるよ

ということなのですよー。

DTXMania の発声遅延の問題は何年も昔からの課題なので、
ぜひ解決にご協力いただけると幸いです。
2011-07-17 11:11 更新者: yyagi
  • コンポーネント(未割り当て) から FDK に更新されました
  • 解決法なし から 直さない に更新されました
コメント

横からすみません。

  1. DirectSound でもやり方次第で発声遅延を限りなくゼロにできるよ
  2. DirectSound から ASIO にシフトしても、今の方法変えなきゃやっぱり遅延でるよ

の2について、「デコードしながら再生」だとやっぱり遅延がでる、つまり遅延を無くすには常時フルストリーム方式にして且つ事前にデコードしておく必要がある、というお話ですよね。

今のDTXManiaのソース(FDK/コード/03.サウンド/CSound.cs)を見る限り、オンメモリ再生分については最初の読み込み時にデコードを済ませているようですので、後はそれをストリーム再生するようにすれば遅延を小さくできる、ということかと思います。

一方、オンメモリ再生じゃないやつ(約300MB以上のサウンドファイル)は「デコードしながら再生」になってますので、遅延が発生するということになりますが、これはBGMAdjustで各自調整いただくと割り切ってしまえば、あまり悩まずに取りあえずの目的(遅延削減)は達成できるように感じました。

・・・さて、SSTのソースの勉強を始めるか・・・

2011-07-17 16:33 更新者: from
コメント
ども。無理矢理寝てるので体の節々が痛くなってきたFROMです。37.2度です。
そろそろドラム叩いてもいいでしょーか?
……ダメらしい。

> 今のDTXManiaのソース(FDK/コード/03.サウンド/CSound.cs)を見る限り、
> オンメモリ再生分については最初の読み込み時にデコードを済ませているようですので、
> 後はそれをストリーム再生するようにすれば遅延を小さくできる、ということかと思います。 

ええ、でも今の DTXMania のストリーム再生ではダメです。

> 一方、オンメモリ再生じゃないやつ(約300MB以上のサウンドファイル)は「デコードしながら再生」に
> なってますので、遅延が発生するということになりますが、これはBGMAdjustで各自調整いただくと
> 割り切ってしまえば、あまり悩まずに取りあえずの目的(遅延削減)は達成できるように感じました。 

これは yyagi さんからのご指摘ですが、システムタイマを使っている限り、チップの発声時刻と実際の
発声時刻を合わせることは不可能です。
今の DTXMania のストリーム再生では特に。

> ・・・さて、SSTのソースの勉強を始めるか・・・

ええ。簡単に言えば、「VfW や ACM を捨てて DirectShow にすれば解決するよ」ということです。
正確には、「解決しそうだよ」くらいですが。
まだ実験中なので、DTXMania に反映される際にはその点ご注意を。

でも、動画と BGM が別々にデコードされる仕様である DTX 形式では、今度は動画と BGM のズレが
発生しそうですねー……
2011-07-17 18:25 更新者: hohohomiura
コメント
fromさん、yyagiさんへ

HOHOHO_MIURAです。

えーっと若干話しに付いていけなくなりました(^-^;
黙ってソースコードを読めということなんですかねorz。

じつわ、Win7+x64とは別に、WinXPSP2+x86を持っておりプレイ自体はそちらの方で遅延もなく実施出来ています。
ただ、今後新しいマシンを購入していくにしても、Win7しか手に入らないし、
大容量メモリを活かすためにもx64で動かしていきたいというのが本音なんですね。

なので、ロジックの不具合(発生遅延を含む)は置いておいて、x64にまず移行させて、
その後x86で開発を進めている方々と連動して動ければいいかなと思っていたのですが、
その入口で躓いてしまいましたorz。

ただ、Win7+x64という発声遅延が顕著に現れるマシンをメインとして使用するようになったので、
何がボトルネックになっているかは、比較的容易に検証出来るかと思います。
ただ、根気のいる作業が必要なので、結論が出るまでしばらく時間が掛かりそうですが
(ToT)。

そんな感じでございます<(_ _)>
2011-07-17 18:35 更新者: hohohomiura
コメント
fromさん、yyagiさんへ

HOHOHO_MIURAです。

一ついい忘れておりました。

発声遅延の私の確認方法ですが、Profileなどで調査しているわけではなく、
電子ドラム(DD-65)自身の音声と、DTXManiaの音声を比較して、
全く同タイミングで発声すれば問題なし、
「ダダン」と2つの音がズレて発声すればNGとして取り扱っております。

以上、参考までに。
2011-07-17 19:25 更新者: from
コメント
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) なんですよ(^^;
なのでもう必死。

2011-09-20 22:51 更新者: hohohomiura
  • チケットの種類サポートリクエスト から 性能改善 に更新されました
  • 解決法直さない から 動いてるけど? に更新されました
  • 状況完了 から オープン に更新されました
コメント
HOHOHO_MIURAです。
お久しぶりです。
今更の質問なので、申し訳ないのですが。。。

・Win7+x64の遅延の問題ですが、x86では発生しているのでしょうか?

この質問の回答で何か出来るという訳ではないのですが、FROMさんのコメントにあった、
「Windows Vista, 7 では、サウンドはすべて CPU で処理するように変更され・・」
とが原因であれば、x86でも同様の問題が発生すると思うのですが、
そのような情報はあまり流れていないもので。

ソースコード見ないで、こんな質問をするのをするのもなんですが、
ご存知であれば、回答頂けると幸いです。
2011-09-20 23:19 更新者: from
コメント
お久しぶりです。
FROMです。
おなか痛い。ここ5日ほど。

> ・Win7+x64の遅延の問題ですが、x86では発生しているのでしょうか?

発生するはずですが…、
私は x86 用の Win7 を持っていないので試したことがないです。
すみません。
# あ、妹のマシンが Win7(x86)だったかな?

…でもまあ、再生遅延の原因となる要素はいっぱいありますよ、ほんと。
OS や CPU を疑うのは一番最後に回した方がいいかもってくらいに。


あと、サウンドカード(もしくはオンボードサウンド)の各種エフェクトは
すべて切断しておいたほうがいいようです。

例えばうちの XP に挿してるのは SoundBlaster X-Fi XtremeGamer ですが、
ドライバ他のソフトウェアをインストールしたら色々なエフェクトが ON に
なってて、許容しがたい大きな遅延が発生してました。
HALが効いてないのかー?

Win7 でも、サウンド周りで余計なエフェクトがかかってないか調べてみては
いかがでしょうか?
2011-09-21 02:01 更新者: hohohomiura
  • 状況オープン から 完了 に更新されました
  • チケット完了時刻2011-09-21 02:01 に更新されました
コメント
HOHOHO_MIURAです。

FROMさんのレスいつも早いですね。
いつ寝られているんですか(^-^;

さて本題ですが、了解です。
サウンドボード周りのドライバを、ちゃんと見直すことから始めてみようと思います。

私も仕事柄ハードを制御するソフトを組むんですが、
結局、問題の環境を作らないとテストすら出来ないので、
それを完全に潰すのって、事実上不可能に違いんですよね。

このあたり、OSが違いを吸収して頂けるとありがたいのですが。
なんとももどかしい問題ですね。

添付ファイルリスト

添付ファイルはありません

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする