CRIWARE Unity Plugin Manual  Last Updated: 2024-04-24
ストリーミング

メモリ再生とストリーミング再生

音声データ全体を一旦メモリ上に読み込んでから再生する方法を、CRIでは「メモリ再生」と呼んでいます。
一方、音声データをメモリ上に少しずつ逐次読み込みながら再生する方法を「ストリーミング再生」と呼んでいます。
それぞれの利点、欠点は以下の通りです。
メモリ再生 ストリーミング再生
メモリサイズ 欠点:ワークメモリを大量に必要とする 利点:ワークメモリの必要量が小さくて済む
再生準備 欠点:音声データ全体を読み込むまで再生開始できない 利点:音声データ全体の読み込みを待たなくて良い
発音レイテンシ 利点:発音レイテンシが少ない 欠点:再生リクエストを受けてからストリーミングを開始するため発音レイテンシが大きい
ファイルアクセス 利点:再生中に他のファイルの読み込みを邪魔しない 欠点:他のファイルの読み込みに多少時間がかかるようになる
多くのアプリケーションでは、大量、大容量の音声データをあらかじめ読み込んでおくためのメモリ領域を用意できません。
そういった場合に、省メモリで音声データを再生できるストリーミング再生機能が必要になります。

ストリーミング再生の方法

CRI Atom Craft上でストリーミング再生を指定された音声データは、キューを再生すると自動的にストリーミング再生されます。
また、音声ファイル名やAWBファイル内のファイルIDを設定した場合もストリーミング再生します。(AWBファイルは、複数の音声ファイルをパッキングしたファイルです)

アプリケーションは、ストリーミングのためのバッファを初期化時に設定します。ストリーミング再生するボイスは、必要に応じてこのバッファを使用します。

adx2u_overview_dbas.png


D-BAS

ストリーミング再生ではある一定サイズのバッファを使いまわして音声データを再生します。
このバッファをストリーミングバッファ と呼びます。
ADXではCRI独自技術のD-BASを使い、効率的にストリーミングバッファを管理しています。
D-BASは、ストリーミングバッファをあらかじめ固定長で確保しておき、
各ストリーミング再生に対してストリーミングバッファをブロック単位で割り当てる仕組みです。
D-BASには以下の利点があります。
  1. ストリーミングバッファのサイズを見積もりやすくなります
  2. 固定長のストリーミングバッファを効率的に利用します
  3. メモリの外部断片化が発生しません
D-BASを作成する際は、そのアプリケーションにおけるストリーミング再生本数の最大数、ストリーミング再生の瞬間最大ビットレートを指定します。
つまり、ストリーミング再生の最悪状態を想定します。
この際、ムービー等も同時にストリーミング再生する場合は、それらも含めて再生本数、ビットレートを設定します。
ストリーミング再生の最悪状態を想定してストリーミングバッファを確保するため、
D-BAS作成時の設定値をアプリケーション側が守っていれば、ストリーミングが間に合わなくなることはありません。
(設定値以上のストリーミング再生を行うとエラーになります。)
また、D-BASは、ストリーミング再生の本数やビットレートに応じて、
バッファブロックを各ストリーミング再生に対して動的に割り当てます。
下図の様に、ストリーミング再生本数が少ない場合は余剰分のバッファを使い、
最低限必要なサイズよりも多くのストリーミングバッファを各ストリーミング再生に割り当てます。
バッファリングサイズが増えるため、ストリーミング再生による記録メディアへのアクセス回数を低減し、
他のファイルのロードを効率よく行う事ができます。
ADX_A_46_DBAS_few_streaming.png
一方、ストリーミング再生の状況が最悪状態に近い場合は、下図の様に、
各ストリーミング再生に対して必要最低限のストリーミングバッファが割り当てられます。
ADX_A_47_DBAS_lot_streaming.png
この様な状況でも各ストリーミング再生が途切れることはありませんし、他のファイルをロードすることが可能です。
しかし、メディアへのアクセスが頻繁に発生するため、他のファイルのロード効率は低下します。