【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ミリ秒の遅延が発生するが、ブロックはスムーズ再生にされる
- ビート単位で作る場合はすこし面倒になりそうではあるが…