Ticket #23575

プレビュー音がループしない

Open Date: 2010-11-02 11:52 Last Update: 2013-04-10 00:16

Reporter:
Owner:
(None)
Type:
Status:
Closed
Component:
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Fixed
File:
None
Vote
Score: 0
No votes
0.0% (0/0)
0.0% (0/0)

Details

選曲画面において、プレビュー音がループ再生されません。

プレビュー音をストリーム再生に対応させた際に何らかの影響が出たかと思いますが、もしかしたら SoundDecoder.dll 側の問題かも知れません。(もしそうなら対処できませんが。)

Ticket History (3/14 Histories)

2010-11-02 11:52 Updated by: from
  • New Ticket "プレビュー音がループしない" created
2010-11-03 23:45 Updated by: yyagi
Comment

時間があれば調べてみようと思いますが、とりあえず1点。

SlimDX側の問題って可能性はないのですよね(ってことを既に確認済みだったりすると直近はDTXMania側のみのソースチェックに注力できて助かる)?

2010-11-04 00:33 Updated by: from
Comment

SlimDX側の問題って可能性はないのですよね

その可能性は否定できません。

私も、いつも疑問があれば、SlimDX のソースコードまで戻って調べてます。

# SlimDX ソースは TortoiseSVN でチェックアウトしてあります。


何しろ、彼らはリリースのたびに平気でデグレしますからねー。

しかも「もう外部プログラマの補助は不要だ」とまで言い切ってて、バグや提案を受ける窓口を減らしましたしねー。

過去に彼らに申請して修正してもらったバグもまた June2010 で再現してるので、仕方なく私自身で SlimDX をカスタマイズしてますしねー。

2010-11-09 00:23 Updated by: yyagi
Comment

FROMさんがお作りになった旧SlimDXページを拝見したのですが、

http://mainori-se.sakura.ne.jp/slimdxwiki/@old/wiki.cgi?page=DirectSound+%A4%CE%BB%C8%A4%A4%CA%FD

「ストリームサウンドの場合には、ループモードで再生を開始します。」って書いてありました。 実際、セカンダリバッファの再生開始をするところのソース(CSound.cs)は

this.Buffer.Play( 0, ( this.bストリーム再生する || this.bループする ) ? PlayFlags.Looping : PlayFlags.None );

こうなってました。

・・・微妙に「ストリーム再生かつループ再生なんて機能は未実装」ってなオチの香りが漂ってきたのですが、そんなことないですよね。

# オンメモリ再生の場合はちゃんとループ再生することを確認しました。

2010-11-15 21:26 Updated by: from
Comment

以前私が作成した某 TO MAKE THE なんとかですが、あれの PREVIEW では、長い ogg(1曲全部)を鳴らしていました。

そして、正常にストリーム再生にてループもしていたことを記憶しています。

(BGM全部をオンメモリにしてたらフリーズ時間がかかりすぎるのですぐ分かるし、ループするたびに動画とずれていった(汗)ことも覚えてます。)

なので、DirectSound 側では正しくループしているんだと思います。

問題は、バッファではなく、ループしてるバッファに書き込むほうがループできてないのではないかと非常に繊細な注意を持って動向を注目し続けております。

2010-11-15 23:41 Updated by: yyagi
Comment

それでは、バッファへの書き込み部分をチェックするのと平行して、「どのバージョンからループしなくなったのか」を、私が持っている過去バージョンで一通りチェックしてみます。

そのときのリリメモと突き合わせればあるいは。

2010-11-19 19:51 Updated by: yyagi
Comment

ある程度以上の大きさのプレビュー音(某fさんのFlyHighで確認)について、 DTXMania068 (080601) ではループ再生しますが、 DTXMania069 (080810) ではループ再生しない、と出ました。

この間にまだ2つのバージョンが存在しますが、手持ちにはなく未確認です。

・・・あれれ、某MAKE THEの話と合わないな・・・。

なおPSPdisp環境下で起動できなくなる問題は、070以降で発生していました。!SlimDX導入以降、サブモニタ環境では起動不可になっていたようです。

2010-11-24 00:33 Updated by: yyagi
Comment

CSound.cs のプロパティ bループする なんですが、誰もsetしてないような気が。 (参照はサウンドバッファ書き込み時など随時行われているのですが。)

なので常にfalseになってるっぽい。

2010-11-24 23:47 Updated by: yyagi
Comment

なので、まずは CSound.cs の t再生を開始する(bool) の中でthis.bループの値をセットしてやってみたところ、 ちょうどループになるタイミングでGPFとなりました。Access Violationだそうな。

ふむ。ちょっと進んだ。

CScore.cs の最後の tデコーダの現在の読み出し位置から1バッファ分のPCMを指定されたバッファに書き込む() が怪しいよなぁ、最後はみ出た部分の処理でハマるよなぁ、ああこの辺のことをfromさんはおっしゃっていたのか-、というところまでは何とか追いつきました。

さてどうしたものか・・・。

2010-12-20 00:01 Updated by: yyagi
Comment

結局、2010-11-24のコメントの通りに CSound.cs の 340行目あたりを

public void t再生を開始する( bool bループする )
{
  this.Buffer.Stop();
:
  try
  {
    this.bループする = bループする;	// #23575 2010.12.18 yyagi: これを追加する
    this.Buffer.Play(0, (this.bストリーム再生する || bループする) ? PlayFlags.Looping : PlayFlags.None);
  }
  catch( OutOfMemoryException )
  {
:

と1行加えてみたところ、今はなぜか普通にループ再生できるようになっていました。前は何か勘違いしていたのだろうか・・・。

ただし、oggやxaではうまくいくのですが、mp3(正確にはriff chunked mp3)だとループ時にGPFでコケます。 問題の所在が SoundDecoder.dll クサくなってきました・・・。

2013-02-13 05:34 Updated by: sf298yen
Comment

今回(Ver.096)ループする仕様に治してくださったと思うのですが、ループしない仕様でもいいんじゃないですか?と言ったら怒られますか?(汗

選曲画面で放置すると延々ループしてるのって少々耳障りなんですよね、、、放置するほうが悪いんですがw

普通プレビューは1回聞けば十分だと思うので、一度再生したら選曲BGM(指定していればですが)に戻ったほうが私としてはストレスの少ないGUIに感じます。

「ループしない」というチケットとは逆行した意見で申し訳ありませんが、コメント残させていただきますm(

※問題なのはループしたいのに出来ていない、ってことなのかもしれませんが。

2013-02-18 19:52 Updated by: yyagi
Comment

「ループさせない方がよい」可動化は他の方のご意見をお待ちいたします。

2013-04-10 00:16 Updated by: yyagi
  • Component Update from (None) to FDK
  • Resolution Update from None to Fixed
  • Status Update from Open to Closed
  • Ticket Close date is changed to 2013-04-10 00:16
Comment

意見がなさそうですので、一旦チケットをクローズいたします。

ループさせない方がよいと思われる方は、その旨新規チケットを起票下さいませ。

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login