設定されている場合は、それを使用してストリームを作成します。&stream);ストリームを作成したら、その設定を確認します。サンプル形式、サンプルレート、フレームあたりのサンプル数を指定した場合、それらが変更されることはありません。デバイスの性能に応じて、それらが変更されることがあります。優れた防御的プログラミングを行うためには、ストリームを使用する前にその設定をチェックする必要があります。以下の関数を使用して、各ビルダー設定に対応するストリーム設定を取得することができます。AAudioStream_getBufferCapacityInFrames()ビルダーを保存しておくと、後で新しいストリームを作成するために再利用することができます。二度と使用しない場合は、削除する必要があります。つの安定状態のいずれかになります(エラー状態の「切断済み(Disconnected)」については後述します)。オープン(Open)開始済み(Started)一時停止済み(Paused)フラッシュ済み(Flushed)停止済み(Stopped)ストリームの状態が開始済みの場合、データはストリーム経由でしか送信されません。ストリームの状態を変更するには、状態遷移を要求する次の関数のいずれかを使用します。AAudioStream_requestFlush(stream);出力ストリームに対しては一時停止かフラッシュしか要求できないことに注意してください。これらの関数は非同期で、状態変更はすぐには起こりません。状態遷移を要求すると、ストリームが対応する過渡状態のいずれかに遷移します。開始中(Starting)一時停止中(Starting)フラッシュ中(Flushing)停止中(Stopping)クローズ中(Closing)下の状態図では、安定状態を角の丸い四角形で、過渡状態を点線の四角形で示しています。呼び出すことができます。状態変更を警告するためのコールバックを提供していません。使用すると、状態変更を待機できます。この関数は、自動的に状態変更を検出するわけでも、特定の状態を待機するわけでもありません。inputState「以外」になるまで待機します。一時停止を要求すると、ストリームは即座に過渡状態の一時停止中になり、しばらくして一時停止済み状態になります。この動作は保証されません。使用して「一時停止中以外の状態」を待機します。その方法を以下に示します。呼び出し時点で仮定した状態)でない場合、この関数はすぐに戻ります。ない場合は、状態が一時停止中でなくなるか、タイムアウトになるまでブロックされます。ストリームの現在の状態を確認できます。開始、停止、フラッシュを要求した後にもこれと同じ手法を使用できます。呼び出さないでください。ストリームはクローズするとすぐに削除されます。呼び出さないでください。関数を使用して、そのストリームに対する読み取りまたは書き込みを行えるようになります。大きい値に設定します。この場合、実際に転送されたフレーム数が結果になります。入力を読み取ったら、正しい数のフレームが読み取られたことを確認する必要があります。しないと、オーディオの不具合を引き起こす不明なデータがバッファに格納される可能性があります。ドロップアウトを作成できます。}ストリームを開始する前に、データまたは無音を書き込むことにより、ストリームのバッファを準備することができます。設定した非ブロック呼び出しで行う必要があります。返されたデータ形式と一致する必要があります。ストリームのクローズストリームの使用を終了する場合は、ストリームをクローズします。ストリームベースの関数で使用できなくなります。ストリームは、以下のイベントのいずれかが発生した場合にいつでも切断される可能性があります。関連付けられているオーディオ機器の接続が解除された(ヘッドフォンが引き抜かれた場合など)。内部エラーが発生した。オーディオ機器がメインのオーディオ機器ではなくなった。ストリームが切断された場合、ストリームをクローズすることしかできません。使用してその関数を登録します。次の例に示すように、コールバックでストリームの状態をチェックする必要があります。コールバックからストリームをクローズしたりオープンし直したりせずに、別のスレッドを使用する必要があります。)になっている場合があります。アプリのパフォーマンスは、その内部バッファを調整し、特殊な高優先度スレッドを使用することによって最適化できます。ある内部バッファとデータのやり取りをします。パラメータを混同しないでください。バッファの「容量」は、バッファで保持できるデータの総量です。このメソッドでは、割り当て可能な容量がデバイスの最大許容値に制限されます。アプリでバッファの全容量を使用する必要はありません。設定可能な「サイズ」までバッファを満たします。バッファのサイズはその容量までは設定できますが、たいていはそれより少なく設定します。バッファサイズを制御することにより、バッファを満たすのに必要なバースト数を特定し、レイテンシを制御します。メソッドを使用します。アプリはオーディオを再生するとき、バッファに対して書き込みを行い、書き込みが完了するまでブロックします。バッファからの読み取りを個別のバーストで行います。フレームで構成され、通常は読み取るバッファのサイズより小さくなります。バーストのサイズとレートはシステムが制御します。これらのプロパティは通常、オーディオ機器の回路によって決定されます。バーストサイズやバーストレートは変更できませんが、内部バッファのサイズはそれに含まれるバーストの数に応じて設定できます。バッファサイズが報告されたバーストサイズの倍数の場合にレイテンシが最小になります。大きなバッファから始めて徐々に小さくしていき、不足し始めたところで少し戻す方法です。小さなバッファサイズから始めて、足りなければ大きくします。これを、出力がスムーズに送信されるようになるまで繰り返します。このプロセスはすぐに実行できるので、できればユーザーが最初の音を鳴らす前に行ってください。ユーザーにオーディオの不具合を聞かせないように、最初は無音を使用して初期のバッファサイズの設定を実行することもできます。パフォーマンスは時間とともに変化します(ユーザーが機内モードをオフにした場合など)。書き込みながら繰り返しバッファ調整を行うことができます。バッファ最適化ループの例を以下に示します。}この手法を入力ストリームのバッファサイズの最適化に使用してもメリットはありません。入力ストリームはできるだけすばやく動作して、バッファデータの量を最小に保つようにします。その後、バッファがいっぱいになるとアプリがプリエンプトされます。ジッターが発生したりする可能性があります。これにより、オーディオの不具合が発生することがあります。レイテンシが高くなります。ストリームで非同期コールバック関数を使用してアプリとデータをやり取りすることができます。パフォーマンスに優れた高優先度スレッドでコールバックを実行します。コールバック関数のプロトタイプを以下に示します。numFrames);ストリーム構築を使用してコールバックを登録します。myUserData);最も単純なケースでは、ストリームが定期的にコールバック関数を実行して、その次のバーストのデータを取得します。コールバック関数の呼び出し元のストリームでは読み取りや書き込みを行わないようにする必要があります。目の引数として指定される)を処理する必要があります。コールバックが出力ストリームに属している場合は、コードでデータをバッファに格納する必要があります。次のように、コールバックを使用して、正弦波出力を連続的に生成することができます。複数のストリームを処理することができます。つのストリームをマスターとして使用し、ユーザーデータで他のストリームへのポインタを渡すことができます。コールバックの例を以下に示します。ストリームが出力ストリームです。入力ストリームはユーザーデータに含まれています。コールバックは、入力ストリームからの非ブロック読み取りを実行し、出力ストリームのバッファにデータを格納します。}この例では、入力ストリームと出力ストリームのチャンネル数、形式、サンプルレートが同じであると仮定しています。コードで変換が適切に処理される限り、ストリームの形式は一致しなくてもかまいません。つのモードがあります。デフォルトのモードです。レイテンシと節電のバランスを取る基本ストリームが使用されます。小さいサイズのバッファと、低レイテンシのために最適化されたデータパスを使用します。大きいサイズの内部バッファと、レイテンシを犠牲にして節電を実現するために最適化されたデータパスを使用します。