第4章 リスナとソース

第1節 基本的な属性

この節ではリスナオブジェクト/ソースオブジェクトともに設定出来る基本的な属性について説明します。それぞれの属性の『記号』は属性を表すのに使える型を示しています。たとえば、AL_POSITIONは浮動小数点ベクトル(『fv』—alGetSourcefvまたはalSourcefv)、3つの独立した浮動小数点数(『3f』—alGetSource3fまたはalSource3f)どちらでも表せます。

OpenALのリスナオブジェクトとソースオブジェクトはそれらの位置、速度、三次元空間における方向を示す属性を持っています。OpenALはOpenGLの似て、正面の既定視点でX(親指)軸が右、Y(人差し指)軸が上、Z(中指)軸が視点/カメラを向くという、右手デカルト座標系(RHS)を使用します。左手座標系(LHS)から右手座標系に切り替えるには、Z座標の符号を反転させます。

名前記号デフォルト
AL_POSITIONfv, 3f, iv, 3iNaNを除く任意値{0.0f, 0.0f, 0.0f}

解説

AL_POSITIONは世界座標系におけるオブジェクトの現在の位置を示します。任意の3組の妥当な浮動小数点が認められます。NaNや無限大であったときの実装の挙動は未定義です。オブジェクトの位置は常に世界座標系で定義されます。

名前記号デフォルト
AL_VELOCITYfv, 3f, iv, 3iNaNを除く任意値{0.0f, 0.0f, 0.0f}

解説

AL_VELOCITYは世界座標系におけるオブジェクトの現在の速度を示します。任意の3組の妥当な浮動小数点が認められます。オブジェクトのAL_VELOCITYはソースの位置に作用しません。OpenALは連続的な位置変更による速度を計算せず、与えられた速度を元に時間経過による位置調整も行いません。そのような計算はアプリケーションに任されています。音声処理の目的の為、位置と速度は音の違う側面に作用する独立のパラメータです。

AL_VELOCITYはソースとリスナの速度、ドップラー効果に関するパラメータを元に、それぞれのソースについてリスナが感じるドップラー効果を合成するドライバにより評価に持ち込まれます。

名前記号デフォルト
AL_GAINf, fv[0, any]1.0f

解説

AL_GAINはスカラの増幅乗数を定義します。ソースの属性ではそのソースそのもののみに適用されます。リスナの属性では現在のコンテキストにある全てのソースに効果が適用されます。既定値の1.0は、音声は全く減衰しない事を意味します。AL_GAINが0.5であることは6 dBの減衰と等価です。ゼロは無音(出力ミキサに関与しない)と等価です。

ドライバの実装はこのときに適応し、適切なところでミキシング段および処理段をスキップしてもかまいません。実装は確実に副作用なし(訳注:artifact-freeですが、音声の計算過程での異音の事を示していると考えました)(クリック音なし)にゲイン値を変更するよう管理し、また受け入れられるレイテンシの限界内で実際の音声サンプルの修正を遅延してもかまいません。

AL_GAINが1より大きい、すなわち増幅はソースおよびリスナについて可能です。しかしながら実装はオーバーフローを防ぐ為に、総ゲイン(リスナゲインを乗じたソース毎の実効ゲイン)を1に固定してもかまいません。

第2節 リスナオブジェクト

リスナオブジェクトは実際の出力のための音声の処理に作用する様々なプロパティを定義しています。リスナはOpenALコンテキストで単一で、ネームを持ちません。リスナを制御する事により、リスナが聴取ポイントと方向、その他出力ストリームに関与するパラメータを定義し、アプリケーションはユーザが仮想世界を体験する手法を制御します。

スピーカやヘッドフォンのような最終出力装置とHRTF(訳注:頭部伝達関数 Head-Related Transfer Function)のような三次元位置表現法は実装でありハードウェア依存です。

第1節 属性

AL_POSITION、AL_VELOCITY、AL_GAINと、いくつかのソースの属性はまたリスナにも適用出来ます。さらにいくつかの属性はリスナ固有です。

名前記号デフォルト
AL_ORIENTATIONfv, ivNaNを除く任意値{(0.0f, 0.0f, -1.0f), (0.0f, 1.0f, 0.0f)}

解説

AL_ORIENTATIONは'at'ベクトルと'up'ベクトルからなる3組の値のペアです。そして、'at'ベクトルへの部分空間垂線への'up'ベクトルの正射影はリスナについての'上'方向を表します。そこでは、'at'ベクトルがリスナーの'前進'方向を表します。

OpenALは2つのベクトルが線形独立であることを期待します。それらのベクトルは正規化されているとは期待されていません。もし2つのベクトルが線形従属である場合、動作は未定義です。

第2節 属性の変更

リスナの属性はリスナのコマンド群の使用により変更されます。

void alListener{n}{if}{v}(ALenum paramName, T values);

第3節 属性の取得

リスナのステートはOpenAL実装の内部で管理され、完全に取得出来ます。Querying Object Attributes(オブジェクト属性の取得)を参照してください。paramNameが妥当な値かどうかはlistener*コマンドのそれと同様です。

void alGetListener{n}{if}{v}(ALenum paramName, T *values);

第3節 ソースオブジェクト

ソースは位置、速度、サンプルデータを伴うバッファのような属性をもちます。ソースの属性を制御する事でアプリケーションはソースから関連づけられたバッファより提供された静的なサンプルデータを修正したりパラメータを決める事が出来ます。

ソースは局所的な音声を定義し、また発生源、すなわちリスナに至るまでの処理の全く最初の段階での音声に適用する属性のセットを集約します。

ソースに関連した効果は、効果適用の順番が崩れたり逆転しても出力が変化しない場合を除き、リスナに関連した効果よりも先に適用されなければなりません。

OpenALはまた、現在の再生状態(開始した、停止した、一時停止した)や関連づけたバッファの中の現在のサンプル位置へのアクセスを含む、ソースの実行ステートを操ったり取得する追加の関数を提供します。

第1項 ソースネームの管理

OpenALはソースのネームのハンドルを要求したり解放する呼び出しを提要しています。ソースの実行ステートを制御する呼び出しも提供されています。

ソースネームを要求する

アプリケーションはalGenSourcesを使って好きな数のソースを要求します。

void alGenSources(ALsizei n, ALuint *srcNames);

この呼び出しはn個のソースを生成し、srcNamesの配列にソースのネームを格納します。

ソースネームを開放する

アプリケーションはalDeleteSourcesを使って好きな数のソースの削除を要求します。

void alDeleteSources(ALsizei n, ALuint *sources);

再生中のソースは削除可能です—ソースは自動的に停止された後削除されるでしょう。

ソースネームを検証する

アプリケーションはalIsSourceを使ってソースネームが有効であるかどうかを検証する事が出来ます。

ALboolean alIsSource (ALuint sourceName);

第2項 属性

この項ではソース毎に設定する、現在のバッファの処理に作用する属性を羅列します。それら属性のいくつかはバッファキューの項目に設定できます。

位置座標

名前記号デフォルト
AL_SOURCE_RELATIVEi, ivAL_TRUEかAL_FALSEAL_FALSE

解説

AL_SOURCE_RELATIVEをAL_TRUEにすることはソースの位置、速度、コーンおよび方向プロパティはリスナからの相対位置であると解釈されます。

種類

名前記号デフォルト
AL_SOURCE_TYPEi, ivAL_UNDETERMINED、AL_STATIC、AL_STREAMINGのいずれかAL_UNDETERMINED

解説

AL_SOURCE_TYPEは読み込み専用のプロパティで、ソースはバッファをキューに格納する準備ができているか、静的バッファを使用する準備ができているか、またはストリーミング再生か静的再生どちらかを使えるような未定のステートかどうかを示します。

最初の生成時、ソースはAL_UNDETERMINEDステートになっているでしょう。もしalSourcei(sid, AL_BUFFER, bid)を使ってバッファが割り当てられた後ならば、ソースはAL_STATICステートへ移行するでしょう。もしソースに割り当てられた最初のバッファがalSourceQueueBuffersによって割り当てられたのであれば、ソースはAL_STREAMINGステートへ移行するでしょう。どちらかのタイプのソースにalSourcei(sid, AL_BUFFER, NULL)を使ってNULLバッファを割り当てる事はステートをAL_UNDETERMINEDにリセットするでしょう。またストリーミングソースに何らかのバッファを割り当てる事はステートをAL_STATICに切り替えるでしょう。

静的ソースに対しバッファをキューに格納する試みはAL_INVALID_OPERATIONエラーを引き起こすでしょう。

バッファ内ループ

名前記号デフォルト
AL_LOOPINGi, ivAL_TRUEかAL_FALSEAL_FALSE

解説

AL_LOOPINGはバッファキューの最終バッファの終端に至ってもソースがAL_STOPPEDステートにならない事を示すフラグです。そのかわり、ソースは即座にAL_INITIALおよびAL_PLAYINGに移行するでしょう。既定値はAL_FALSEです。AL_LOOPINGはいかなる実行ステートにあるソースでも変更可能です。特に、AL_PLAYINGのソースでも切り替え可能です。

現在のバッファ

名前記号デフォルト
AL_BUFFERi, iv正当なバッファネーム全てAL_NONE

解説

ソースのキューの先頭項目の、現在のバッファオブジェクトを指定します。AL_STOPPEDステートかAL_INITIALステートのソースでのAL_BUFFERの使用はキュー全体を空にし、指定された1つのバッファを追加します。

AL_PLAYINGステートかAL_PAUSEDステートのソースでは、AL_BUFFERの設定はAL_INVALID_OPERATIONエラーを引き起こすでしょう。AL_BUFFERはAL_INITIALステートおよびAL_STOPPEDステートのソースにのみ適用可能です。不正なバッファネーム(バッファネームが存在しないためか、そのソースに割り当てる事が出来ないためか)の指定はAL_INVALID_VALUEを引き起こすでしょう。一方、不正なソースネームの指定はAL_INVALID_NAMEエラーを引き起こすでしょう。

AL_NONE(NULLか0)は正当なバッファネームです。alSourcei(sName, AL_BUFFER, AL_NONE)は、AL_INITIALステートかAL_STOPPEDステートのソースについて、キューに1つかそれ以上バッファがあったとしても、現在のバッファキューを開放する正しい手段です。alSourcei(sName, AL_BUFFER, AL_NONE)呼び出しはAL_PLAYINGステートかAL_PAUSEDステートのソースではやはりAL_INVALID_OPERATIONエラーを引き起こし、結果的にソースのミュートや停止には使用出来ません。

キュー状態の取得

名前記号デフォルト
AL_BUFFERS_QUEUEDi, iv[0, any]なし

解説

取得のみです。与えられたソースのキュー内のバッファ数を取得します。これは未だ再生していないもの、現在再生中のもの、既に再生されたものを含みます。現在有効かつ唯一のバッファネームが0である場合は0を返すでしょう。

名前記号デフォルト
AL_BUFFERS_PROCESSEDi, iv[0, any]なし

解説

取得のみです。与えられたソースの再生済バッファ数を取得します。間接的に、これは現在再生中のバッファのインデックスを与えます。それらをキューから取り出すのにいくつスロットの数が必要かを決定するのに使用されます。AL_STOPPEDステートのソースでは全てのバッファが処理済です。AL_INITIALステートのソースでは1つもバッファが処理済ではなく、全て未処理です。現在有効かつ唯一のバッファネームが0である場合は0を返すでしょう。

増幅度の制限

名前記号デフォルト
AL_MIN_GAINf, fv[0.0f, 1.0f]0.0f

解説

AL_MIN_GAINは増幅しきい値スカラです。このソースについて常に保証される最小のAL_GAINを示します。距離による減衰やソースのAL_GAINなど様々な減衰要素の処理の終わりに、計算された実効ゲインはこの値と比較されます。もし実効ゲインがAL_MIN_GAINより小さい時、AL_MIN_GAINが採用されます。これはリスナゲインが適用される前に起こります。もしAL_MIN_GAINにゼロが設定されていた場合、実効ゲインは補正されないでしょう。

名前記号デフォルト
AL_MAX_GAINf, fv[0.0f, 1.0f]1.0f

解説

AL_MAX_GAINは増幅しきい値スカラを定義します。このソースで許される最大のAL_GAINを示します。距離による減衰やソースのAL_GAINなど様々な減衰要素の処理の終わりに、計算された実効ゲインはこの値と比較されます。もし実効ゲインがAL_MAX_GAINより大きい時、AL_MAX_GAINが採用されます。これはリスナゲインが適用される前に起こります。もしリスナゲイン倍のAL_MAX_GAINがまだ実装の扱える最大ゲインを越えていた場合、実装は固定してもかまいません。

もしAL_MIN_GAINにゼロが設定されていた場合、ソースは実質的にミュートされます。実装はこの状況に適応してもかまいませんが、ソースをミュートするのにGAINをゼロにするのが適した方法であるよう最適化が要求されたり推奨されたりしません。

距離モデルに関する属性

表4–12 REFERENCE_DISTANCE属性
名前記号デフォルト
AL_REFERENCE_DISTANCEf, fv, i, iv[0, any]1.0f

これはロールオフあり反比例距離モデルにおける距離減衰計算に使用されます。距離モデルに依存し、ゲインが固定される下限しきい値の距離のようにも振る舞うでしょう。詳細は距離モデルの節を参照してください。

表4–13 ROLLOFF_FACTOR属性
名前記号デフォルト
AL_ROLLOFF_FACTORf, fv, i, iv[0, any]1.0f

これはロールオフあり反比例距離モデルにおける距離減衰計算に使用されます。距離がAL_MAX_DISTANCEより小さく、かつ距離モデルによってはAL_REFERENCE_DISTANCEより大きい場合、これは適用可能範囲を越えた距離減衰を削ぎ落とすでしょう。距離の関数によりどのように減衰が計算されるかの詳細は距離モデルの節を参照してください。

特に、距離減衰を除くという前提のソースについてはAL_ROLLOFF_FACTORはゼロを設定する事が出来ます。実装はこのケースに適応するべく、ソース毎を基準として完全に距離減衰計算を無視するよう推奨されます。

表4–14 MAX_DISTANCE属性
名前記号デフォルト
AL_MAX_DISTANCEf, fv, i, iv[0, any]MAX_FLOAT

これは、もし反比例固定距離モデルが使用されているのであれば、ロールオフあり反比例距離モデルにおける距離減衰計算に使用されます。この場合、距離がAL_MAX_DISTANCEより大きい場合、AL_MAX_DISTANCEに固定されるでしょう。AL_MAX_DISTANCEによる固定はAL_MIN_GAIN似よる固定より先に適用され、もしAL_MAX_DISTANCEにおける実効ゲインがAL_MIN_GAINのときより大きい場合、AL_MIN_GAINは効力を持ちません。ソースの取捨選択はサポートされません。

ピッチによる周波数シフト

表4–15 SOURCE_PITCH属性
名前記号デフォルト
AL_PITCHf, fv(0.0f, any]1.0f

解説

要求されたピッシシフトで、1.0であれば元と変わりません。各々の値の50パーセント減少は-12半音(1オクターブ下がる)のピッチシフトと等価です。各々の値の2倍は12半音(1オクターブ上がる)のピッチシフトと等価です。ゼロは不正な値です。実装は自らの制限に即すよう、実際の出力のピッチの範囲をある値に固定するかもしれません。

方向・音源コーン

それぞれのソースはAL_CONE_INNER_ANGLEおよびAL_CONE_OUTER_ANGLEの設定に依存して指向性である事が出来ます。コーン内、外側のゾーン、その中間のゾーンの3つのゾーンが定義されます。指向性ソースにおける角度依存ゲインはコーン内の中では定数で、中間のゾーンではそこからコーン外に指定された値まで変化します。ソースのAL_GAINはコーン内に適用され、外側のゾーンのゲインを定義するためアプリケーションはAL_CONE_OUTER_GAIN因数を選べます。中間ゾーンではAL_GAINからAL_GAINのAL_CONE_OUTER_GAIN倍まで、線形補正が適用されます。

表4–16 ソースのDIRECTION属性
名前記号デフォルト
AL_DIRECTIONfv, 3f, iv, 3iNaNを除く任意値(0.0f, 0.0f, 0.0f)

解説

もしAL_DIRECTIONが零ベクトルでなければ、ソースは指向性となります。音の放射は方向ベクトルの周囲で対称(円筒形に対称)であると仮定されます。ソースは実質的に2つの角度のみ必要とし、完全な3自由角に向けられません。

零ベクトルが既定で、ソースが無指向性であることを示します。非零ベクトルの指定はソースを指向性にするでしょう。指向性ソースに対する零ベクトルの指定は実質的に無指向性ことを示すでしょう。

表4–17 ソースのCONE_INNER_ANGLE属性
名前記号デフォルト
AL_CONE_INNER_ANGLEf, fv, i, ivNaNを除く任意値360.0f

解説

360度法における音声コーンの内角です。既定の360は内角が世界全体を覆っている事を意味し、全指向性ソースと等価です。

表4–18 ソースのCONE_OUTER_ANGLE属性
名前記号デフォルト
AL_CONE_OUTER_ANGLEf, fv, i, ivNaNを除く任意値360.0f

解説

360度法における音声コーンの外角です。既定の360は外角が世界全体を覆っている事を意味します。もし内角も360であった場合、角度依存減衰はゼロとなるゾーンです。

表4–19 ソースのCONE_OUTER_GAIN属性
名前記号デフォルト
AL_CONE_OUTER_GAINf, fv[0.0f, 1.0f]0.0f

解説

外角により定義されるコーンの外側の実効ゲインを決定するためのAL_GAINに対する乗数因数です。コーン外側に適用される実効ゲインはAL_GAINのAL_CONE_OUTER_GAIN倍です。

AL_GAINの変更は全方位に影響を及ぼします。すなわちソースはリスナがどこに居ようとも全方位で減衰されます。アプリケーションはもし違う挙動を望むのであればAL_CONE_OUTER_GAINを変えなければなりません。

オフセット

表4–20 ソースのAL_SEC_OFFSET属性
名前記号デフォルト
AL_SEC_OFFSETf, fv, i, iv[0.0f, any]未定

解説

秒単位で表された再生位置です。この値はループするソースではゼロヘループバックするでしょう。

既に再生しているソースでAL_SEC_OFFSETを設定した時、新たなオフセットが範囲を超えていない限り、再生は新たなオフセットへジャンプするでしょう。範囲を超えている場合はAL_INVALID_VALUEエラーがセットされます。もしソースが再生中でないのならば、オフセットは次のalSourcePlay呼び出しに適用されるでしょう。

位置はソースの全キュー内バッファの始点からの相対位置です。そしてこの呼び出しにより飛び越えたキュー内バッファはいずれも処理済とされるでしょう。

この値はバイト位置を基準としており、ピッチシフトされたソースは誇張された再生速度となるでしょう。例えば、もしピッチが2.0と設定されていた場合、0.500秒はバッファ内では0.250秒にしか辿り着かないかもしれません。

表4–21 ソースのAL_SAMPLE_OFFSET属性
名前記号デフォルト
AL_SAMPLE_OFFSETf, fv, i, iv[0.0f, any]未定

解説

サンプル数で表された再生位置です。この値はループするソースではゼロヘループバックするでしょう。圧縮された形式の場合、この値は非圧縮データにおける正確なオフセットを表すでしょう。

既に再生しているソースでAL_SAMPLE_OFFSETを設定した時、新たなオフセットが範囲を超えていない限り、再生は新たなオフセットへジャンプするでしょう。範囲を超えている場合はAL_INVALID_VALUEエラーがセットされます。もしソースが再生中でないのならば、オフセットは次のalSourcePlay呼び出しに適用されるでしょう。alSourceStop、alSourceRewindや2度目のalSourcePlayはオフセットをバッファの始点にリセットするでしょう。

位置はソースの全キュー内バッファの始点からの相対位置です。そしてこの呼び出しにより飛び越えたキュー内バッファはいずれも処理済とされるでしょう。

表4–22 ソースのAL_BYTE_OFFSET属性
名前記号デフォルト
AL_BYTE_OFFSETf, fv, i, iv[0.0f, any]未定

解説

バイト数で表された再生位置です。この値はループするソースではゼロヘループバックするでしょう。圧縮された形式の場合、この値は圧縮データバッファにおける凡そのオフセットを表すでしょう。

既に再生しているソースでAL_BYTE_OFFSETを設定した時、新たなオフセットが範囲を超えていない限り、再生は新たなオフセットへジャンプするでしょう。範囲を超えている場合はAL_INVALID_VALUEエラーがセットされます。もしソースが再生中でないのならば、オフセットは次のalSourcePlay呼び出しに適用されるでしょう。alSourceStop、alSourceRewindや2度目のalSourcePlayはオフセットをバッファの始点にリセットするでしょう。

位置はソースの全キュー内バッファの始点からの相対位置です。そしてこの呼び出しにより飛び越えたキュー内バッファはいずれも処理済とされるでしょう。

第3項 属性の変更

ソースは音声処理の間考慮すべき、位置やその他のプロパティを指定します。

void alSource{n}{if} (ALuint sourceName, ALenum paramName, T value);
void alSource{n}{if}v (ALuint sourceName, ALenum paramName, T *values);

第4項 属性の取得

ソースのステートはOpenAL実装の内側で管理され、また現在の属性を取得可能です。取得の性能は実装依存で、性能保証はされません。paramNameパラメータの妥当な値は、ソースについて設定する呼び出しでの妥当な値と同一です。

void alGetSource{n}{if}{v} (ALuint sourceName, ALenum paramName, T *values);

第5項 キューにバッファを追加する

OpenALは内蔵のストリーミング機構を指定しません。バッファオブジェクトにデータを流し込む機構はありません。それよりむしろ、APIはソースにバッファをキューイングするというより柔軟で万能な機構を持っています。

この機能を使う方法はたくさんあり、ストリーミングはその1つにすぎません。

ストリーミングは静的バッファのキューイングに置換されます。これは効果的に何らかの多バッファキャッシュをアプリケーションへ持ち込み、アプリケーションは使用したいバッファはいくつか、バッファのサイズ、および循環して再利用するか、プールするか、それとも捨ててしまうかどうかをを選ぶ事ができるようになります。

ループ(有限回にわたる反復)はキュー内で明示的な反復バッファにより実装される事が出来ます。無限ループは理論上は十分に巨大な反復カウンタにより成す事が出来ます。もし無限反復するのが単一バッファのみと仮定された場合、それぞれのソース属性の使用が推奨されます。

多くの場合、バッファ内側でのループと制限されたときのループポイントは、サンプルをいくつかのバッファにわけ、サンプルの断片を反復を含めて相応にキューに入れることに置き換えられる事が出来ます。

バッファはキューに入れられたり、使用された後にキューから取り出されたり、削除されるか、補填してまたキューに入れられたりする事が出来ます。巨大なサンプルの、キューで管理されたいくつかのバッファにわたる分割は、サンプルおよびサンプルインデックスの明治的管理を要求する手法を越えた、全く異なった利点を持っています。

エンキューコマンド

アプリケーションはalSourceQueueBuffersを使用する事で1つまたは複数バッファネームのキューを作る事が出来ます。バッファは配列の中に現れた順序通りにキューに入れられるでしょう。

void alSourceQueueBuffers (ALuint sourceName, ALsizei numBuffers, ALuint *bufferNames);

このコマンドはどんな再生状態(ストリーミングを考慮し、AL_PLAYINGのソースでキューイングが出来なければなりません)でも正当です。

キューにある全てのバッファは、いつでもキューに入れることができるNULLバッファ(すなわち0)を除き同じ形式と属性を持たなければなりません。形式や異なったバッファ属性を混ぜる試みは失敗を生み、AL_INVALID_VALUEエラーが投げられるでしょう。もしキュー操作が失敗した場合、たとえいくつかのバッファがキューに入れられたかもしれなくとも、ソースキューは変更されないままでしょう。

デキューコマンド

ひとたびバッファによるキュー項目がキューに追加され処理されようとしていれば変更されるべきではありません。与えられたキュー項目の除去はソースが停止されるか(そしてこの場合、全てのキューは処理済と考えられます)、AL_PLAYINGらAL_PAUSEDのソースにおいてもしキューが既に処理済であるかのどちらかでなければ出来ません。

もし再生中のソースがそのキューの最後のバッファまで再生が完了する場合、AL_STOPPEDステートへ入るでしょう。(シングルバッファがソースに割り当てられ、それが再生完了したときと同じ振る舞いです。)

alSourceUnqueueBuffersコマンドは処理済のバッファの項目を出現順に、キューから除去します。もし有効なものより、より多くのバッファが要求された場合、操作は宛先引数は変更されないまま、AL_INVALID_VALUEエラーを伴い失敗するでしょう。

void alSourceUnqueueBuffers (ALuint sourceName, ALsizei numEntries, ALuint *bufferNames);

第6項 ソース実行の管理

ソースの実行ステートは取得可能です。OpenALはソースに実行の開始と停止をもたらす状態遷移を始めるための関数群を提供します。

ソースステートを取得する

アプリケーションはalGetSourceとパラメータ名AL_SOURCE_STATEを使用して、いずれのソースの現在のステートを取得できます。ソース毎にAL_INITIAL、AL_PLAYING、AL_PAUSED、AL_STOPPEDの4つの可能な実行ステートのうち1つに在る事ができます。AL_PLAYINGかAL_PAUSEDかのどちらかのソースは有効であると考えられます。AL_STOPPEDかAL_INITIALかのどちらかのソースは無効であると考えられます。

AL_PLAYINGのソースのみ処理の中に含まれます。実装は出力に影響を及ぼさないソースについて、処理段を省いてもかまいません。(例えばゲインゼロによりミューとされているソースについてのミキシング、しかしサンプルのオフセットを増やさない。)

ソースの現在のステートする依存する、ある状態遷移コマンド(例えばくり返し)は正当な無効命令です。それらは無視され、エラーは生成されません。

ステート遷移コマンド群

いずれのソースの既定のステートもINITIALです。この状態から、以下にあるコマンドの適切な使用でいかなる他の状態にも伝わる事ができます。非可逆な状態遷移はありません。

void alSourcePlay (ALuint sName);
void alSourcePause (ALuint sName);
void alSourceStop (ALuint sName);
void alSourceRewind (ALuint sName);

関数はベクトル変数でもまた有効です。それはソース群で同期した操作を保証します。

void alSourcePlayv (ALsizei n, const ALuint * sNames);
void alSourcePausev (ALsizei n, const ALuint * sNames);
void alSourceStopv (ALsizei n, const ALuint * sNames);
void alSourceRewindv (ALsizei n, const ALuint * sNames);

ステート/コマンド/状態遷移図は次に述べるように定義されます。

設定のリセット

alSourceRewindを使ってソースをAL_INITIALステートにするkとおはソースのプロパティをリセットしないでしょう。AL_INITIALはただ単に、ソースはalSourcePlayコマンドを使って実行可能である事を示しています。AL_STOPPEDやAL_INITIALのソースは必要なソースのコマンドの連続使用により既定の設定へリセット出来ます。アプリケーションが役に立つソースの設定を作成するためにとにかくすべての関連状態を指定しなければならないとき、リセットコマンドは全く提供されません。