チケット #27787

選曲から演奏開始までの時間短縮

登録: 2012-03-10 12:22 最終更新: 2012-03-25 20:51

報告者:
担当者:
チケットの種類:
状況:
完了
コンポーネント:
マイルストーン:
優先度:
5 - 中
重要度:
5 - 中
解決法:
受領
ファイル:
1
投票
点数: 0
No votes
0.0% (0/0)
0.0% (0/0)

詳細

選曲時に発生する「選曲画面のフェードアウト」と「NowLoading画面のフェードイン」を省略することで、演奏開始までの体感待ち時間を短縮する。

フェードアウト・フェードインで1秒ずつ使っているので、計2秒の短縮となる。

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

2012-03-10 12:22 更新者: yyagi
  • 新しいチケット "選曲から演奏開始までの時間短縮" が作成されました
2012-03-10 12:36 更新者: yyagi
コメント

それでも、ちょっと長めの曲(Full版とか)はちょっと読み込みに時間が掛かる模様。

調べてみると、SoundDecoder.dllが提供する各Open()で時間が掛かっている。 フォーマット違いのOpen()の時は一瞬で終了するのに対して、フォーマットがあっていると (例えばoggに対してoggOpen()すると)、処理に2~3秒掛かっている。

いったい中で何が行われているのだろうか・・??

2012-03-10 14:34 更新者: from
コメント

正直ほとんど覚えていませんが、

確か、Open() 内で一度データを全部デコードしてたと思います。で、ため込んだPCMデータを、再生中に Decode() で少しずつかっぱらってくるという見事な似非ストリーミング再生。

ただし、ogg だけは本当のストリーミングをしている(xaもだったかな?)ので、Open() 内でのデコードは行ってません。

例えば、私が昔作った Ys2 OP の PREVIEW サウンドは長い(フル版が最初から最後まで流れる)ですけど、ogg 形式なので、選曲画面で選択するとすぐにプレビュー再生が始まると思います。他のフォーマットだと、全部デコードするまでプレビュー再生が始まらない上に、デコードが終わるまでフリーズするはずです。

……たぶん、そんな感じだったのではないかと。(汗

2012-03-10 15:06 更新者: yyagi
コメント

Open()の処理時間が分かるようにしたログを添付しました。

  • Ys2 OPのBGM音は約1.6MBあって、Open()に0.7秒。
  • 蝶のFull verのBGMは約4.8MBあって、Open()に2.1秒。

どうやらoggもOpen()でフルデコードしているっぽいですね。冷静に考えれば、Open()時点ではオンメモリ再生させるかストリーミング再生させるかを決めていないのだから、こういう実装になりそうではあります。

2012-03-10 23:56 更新者: from
コメント

ふーむ。

でも ogg がストリーム化してあるのは間違いないですよ。

Ys2 OP のプレビューはその実験だったんですから。

となると、libogg の方で全体サイズ測るとか何かしてる可能性はありますね。

2012-03-11 00:47 更新者: yyagi
  • 状況オープン から 完了 に更新されました
  • チケット完了時刻2012-03-11 00:47 に更新されました
コメント

ぬー。そうですか・・・。

ちょっと気になりましたので、vorbisfile.c の ov_fopen() を簡単に読み込んでみました。

オープンのついでに全てのBOS(Beginning Of Stream)ページをフェッチしてますが、 件のoggファイルはどれも1個ずつしかBOSを持っていませんでしたので、そんなに時間が掛かると思えず。

参考) http://www12.ocn.ne.jp/~dante98/text/rfc3533j.txt

まあ今回はここに注力するつもりはないので、一旦このチケットはクローズします。今よりもっと高速化したくなったときに、SoundDecoder.dllの作り直し含めて再検討します。

2012-03-11 20:02 更新者: None
コメント

これ、いいですね
キビキビ動いてる感がすごくいいです

チケット趣旨とはずれますが、個人的にはリザルト画面のフェードアウトも削ってみると体感がどうなるか興味があります
・リザルト画面→フェードアウト(これ)→フェードイン→選択画面。

あまりキビキビしすぎると安っぽく見えるからあえてクッション処理を置く手法があるのはわかってるつもりですが、今回のは私はありだと思います。

2012-03-12 00:29 更新者: yyagi
  • 解決法なし から 受領 に更新されました
  • 状況完了 から オープン に更新されました
コメント

私はプログレスバー出す前にまず待ち時間短縮派ですので・・・。

さて、リザルト画面のフェードアウトを削った試作品も作ってみました。092に上書きして下さい。

tp://yyagi.com/DTXMania_27787_test.zip (そろそろチケット添付の200k制限を超えて色々面倒になってきたので、外部リンクにします。そろそろ一旦093として出しておくべきか・・・)

実は個人的に最後のフェードアウトがあった方がいいと思っていたクチですが、実際に試してみると、これはこれでアリかなと思いました。(でもやっぱり演奏の余韻は半減しますね)

2012-03-12 10:01 更新者: None
コメント

ありがとうございます。試してみましたが悪くないと思いました。

リザルト画面になっても音楽が続く譜面もあり、それはいきなり音楽が切れる印象が少々増える感じかもしれませんね。個人的にはフェードアウト処理を挟んでもそういうのは少々残念ですが(苦w)
強引かもしれませんが余韻を楽しみたい方はあえてリザルトで待機してもらうことも出来るかな・・・と思うので他の方で反対がなければ実装を検討お願いできないでしょうか。

2012-03-13 01:01 更新者: yyagi
コメント

それでは、リザルトからのフェードアウトを削るか残すかは、他の方のご意見を待ちたいと思います。

2012-03-25 20:51 更新者: yyagi
  • 状況オープン から 完了 に更新されました
  • チケット完了時刻2012-03-25 20:51 に更新されました
コメント

1週間経って、特にコメントがなさそうですので、このまま(フェードアウトカットのまま)として、このチケットは完了とさせていただきます。

添付ファイルリスト

編集

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