sound sepher's PASTIME

ゲーム開発で思ったことや、趣味などの話を書き綴っていきます。

【Unity】ADXまとめ2

ストリームでブロック再生を使う際のメモ

1回目のブロック遷移で無音が大きく発生

  • PCで確認。おそらくストリーム再生時の遅延の影響と思われる?
  • 2回目以降も無音が入る事が多かった(おそらく100%?)

ゼロレイテンシーストリーム

  • 1回目のブロック遷移以外はすべてスムーズに繋がった
  • 通常のストリームより無音の間隔が短くなった
  • 1回目以外は遅延なし

無音の秒数

ストリーム(AttachFaderあり)
  • 1回目のブロック遷移で47ms
  • 2回目以降は11ms
ゼロレイテンシーストリーム(AttachFaderあり)
  • 1回目のブロック遷移で17ms
  • 2回目以降は遅延なし 0ms
  • メモリ再生でも同様の症状あり
AttachFaderなしのストリームとゼロレイテンシーストリーム
  • ストリームはブロック遷移毎に13ms前後、おそらく1フレーム
  • ゼロレは遅延なし
補足
  • ゼロレで1回目の遷移用の波形をメモリにしても同じ秒数の遅延が発生

メモリはどうなってるか?

  • CRI Profilerで確認
  • 波形を10個のデータにあらかじめ切って繋げてブロック化した
  • 調べたのはAtomMemoryUsage、FS Memory Usage、Streaming Usage
  • 色々なパターンを比較した結果、AtomMemoryUsageにのみ影響した
ストリーム
  • 10.97MB
ゼロレイテンシーストリーム
  • 11.02MB

他のパターンを調べてみた

ゼロレで波形ひとつを内部でカットして10個ブロック作成
  • 10.99MB
  • 30KB減った
ゼロレで同シート内にキュー追加、新波形2つを繋げてブロック作成
  • 11.03MB
  • 10KB増えた
ゼロレで奇数ブロックをストリームにした(交互に切り替わる)
  • 11.01MB
  • 奇数ブロックに入る瞬間に無音が入る
  • 20KB減った
ゼロレで同シート内に新波形1つの新キュー作成
  • 11.03MB
  • 10KB増えた
ストリームで同シート内に新波形1つの新キュー作成
  • 11.02MB
  • もともと10ブロックに分けたキューが状態なので変わりなし

結論(予測)

  • 当然だが通常のストリームでは使用メモリは増えない
  • ただしストリームでブロック再生するとブロック遷移時に無音が発生
  • ゼロレ波形を使っても初回1度は微妙に無音の発生する(AttachFaderが原因だった)
  • ゼロレ波形を使ったキューをひとつ増やすと10~20KB使用メモリ増
  • ゼロレ波形を複数使ったキューはそのぶんメモリ増(増値は一定でない?)
  • AtomExPlayerでAttachFaderを使うとブロック遷移で無音が発生する
    ストリーム再生のブロック遷移で遅延が発生するのは変わらない、無音の間隔は違うが

所感

  • 1波形につき10~20KB程度なら100波形で1~2MB程度になる?
    iPhone8(2GB)以下の古いスマホをターゲットにしないのであれば誤差か?
  • PC向けに作るならストリームではなくゼロレイテンシーのほうが良さそう
  • ストリーム再生はキュー内の波形毎の再生頭すべてに影響があるらしい
  • メモリを気にするなら1波形内でブロック再生を組んだ方が良いかも??
  • 試作での確認なので、本番で作り進めたら印象が変わる可能性がある

補足

どうしてもAttachFaderをつけた状態でブロック再生の遅延をなくしたい場合
  • 下記図のように、キューの頭に無音のブロックを作る
  • ブロックはAtomEditorのインスペクターで2ミリ秒まで縮小可
  • 再生直後に約19ミリ秒の遅延が発生するが、ブロックはスムーズ再生にされる
  • ビート単位で作る場合はすこし面倒になりそうではあるが…

f:id:Ashtarte:20220211085258p:plain