ボリューム0のボイス消費を減らしつつ復帰させる

AISACでボリュームを0にしても発音している?

AISACなどでボリュームを0にした時など、音が聞こえなくなる状態になった場合でも、内部的には無音で再生が行われ続けています。

デコード処理

音声圧縮する=エンコード

音声を展開する=デコード

エンコードはツールでデータを作る時に行っていて、デコードはゲーム上で再生時にリアルタイムに行われます。

ボリューム0でもデコードやボイスの監視処理はし続ける

圧縮波形のデコード処理やボイスの消費は行われ続ける意味になります。

音量が0で聞こえない音が鳴っている

デコードした結果に対してボリューム0が掛け合わされて音が聞こえていないという状態です。(いつでもすぐにボリュームが上がったら鳴らせる準備をし続けています。毎オーディオ処理)

音は聞こえていないのに、デコードをし続けているのはCPUの負荷がかかって勿体無いと感じる時があるかと思います。

ボイス処理も行われている

聞こえていない音であっても、ボイスリソースを確保しているので、ボイス数やボイスリミット(プライオリティの低い音は消える)などは維持し続けています。

仮想ボイスで回避する

そんな時は、ボイスビヘイビアから「仮想ボイス」を選択することで、ボイスの処理負荷を軽減することができます。

とくにボリューム0になるような演出が多い時に設定しておくと良いでしょう。

20150311VirtualVoice

通常モードは、何もしない

何もしないということは、ボリューム0でも音がなり続けます。

ボイス数も使い続けます。

ボイス停止

ボリュームが0になったらボイス停止をしてボイスリソースを解放してくれます。

  • オートメーションのボリュームで音が小さくなって消えたり。
  • 距離減衰で音が小さくなって、ある距離で止める。

停止してしまうので、復帰はできません。

遠ざかって、音が聞こえなくなって消えてしまって構わないような音に使います。

仮想ボイス

ボリュームが0になると音が止まり、その後にボリュームが上がると時間経過したところから再生復帰します。

仮想ボイス時はボイスリソースを解放してくれます。

厳密に同期ではなくなる

注意点として、復帰する時に再度再生する形(眠りから目覚める形)となるのでタイミングが若干ずれてしまう場合があります。

これは、シークして再生をするのですが、再生には若干のずれが発生する場合があります。

  • 厳密に音楽などが同期がとれていないと不自然なもの
  • 口パクなどずれていると微妙なもの

には使えません。厳密同期したい場合は「通常モード」で、音量0で鳴らし続けて、音量をあげる方が良いです。

仮想ボイスリトリガー

ボリュームが0になったらボイス停止をして、その後にボリュームがあがると、頭から再生しなおします。

  • 距離減衰などで0で止まるけど、もういちど近くにきたら鳴ってほしいけど、また頭から再生しても問題ない音

などにつかいます。