| ゲームキット目次 | ゲームキット索引 |
継承:なし
ライブラリ: libgame.so
アロケーション:コンストラクタのみ
BGameSoundクラスは、ほかのゲームサウンドクラスの基本となるものです。このクラスを直接使うことはありません。代わりに継承されたクラスを使うことになります
たくさんの爆発音や、不気味なエイリアンの声や、そのほかのスリリングなオーディオの楽しみの音はプレイヤーを幸せにしません(?)。様々なBGameSoundからの継承されたクラスはこれをスナップにします(?)。
音を再生するのはシンプルで、ほとんどの適切なクラスの継承されたオブジェクトのインスタンスを生成し、 StartPlaying()関数を呼ぶだけです。どうやって、適切なクラスを決定するのか?いくつかのヒントを挙げると
ほとんどのゲームの要求は、 BSimpleGameSoundとBFileGameSoundクラスで満たされます。そしてもちろん、これらのクラスのどれも要求を満たさなかったら、継承クラスをあなた自身で書いてもいいのです。
時々、プレイヤーは同じ時間に同じ音の多数のコピーを鳴らす必要がある。例えば、3way砲を発射し、二つのターゲットに当たったとすると、一度に2つの爆発が聞こえなくてはいけない。それぞれのBGameSound (またはBGameSoundから継承した)オブジェクトは、一度に一回しか再生できない。従って、あなたが許可するそれぞれのポリフォニーのチャンネルから鳴らすためにサウンドのコピーをする必要がある。
これは、このようなシンプルクラスを簡単に使用できる様にする。
class MultipleEffect {
public:
MultipleEffect(BGameSound * sound, int polyphony) {
m_fx = new BGameSound *[polyphony];
m_fx[0] = sound;
for (int ix=1; ix<polyphony; ix++) {
m_fx[ix] = sound->Clone();
}
m_current = 0;
m_polyphony = polyphony;
}
void StartPlaying() {
int id = atomic_add(&m_current, 1) % m_polyphony;
m_fx[id]->StartPlaying();
}
private:
int32 m_current;
int32 m_polyphony;
BGameSound *m_fx;
};
<<<試してみて、このクラスを洗練してくれ>>>
このクラスのコンストラクタは、BGameSoundから派生した音楽と、一度に再生できるタイムの最大の数を特定します(?)。それは、適切な複製の数を生成しStartPlaying()関数の実装は自動的に最も古い物を選択し、再利用します(?)。 Since StartPlaying()関数が再生している音楽上で最初から再生し直すために、これはちゃんと動作する(?)。 &mdashもし、ポリフォニーが3なら、すでに3つの音楽が再生しており、最も古いものはリセットされ、最初から再生し直される。
![]() |
現在のバージョンのBeOSでは、
BSimpleGameSoundの複製を作ると、サウンドデータのバッファも複製されるので、メモリ内にサウンドエフェクトの複製をもつことが出来る。この方法で多くのメモリを素早く使用するために、コードを書くときに注意しておいて下さい。
|
パフォーマンスが関わることには多くのことがあり、もちろん出来る限り多くのシステム上でゲームを動かしたいと思うだろう。Beはこれら3つの状況でアプリケーションをテストするとこを推薦する。
これは、徹底的なリストではありません。出来る限り多くの環境でソフトウェアを試すべきです。
|
サウンドオブジェクトを初期化します。
![]() |
現在では deviceはNULLでなくてはいけません。
|
|
BGameSoundによって使用されているメモリを解放します。
ノードがプロデューサーによってBBufferGroupsが作られセットされたなら、デストラクタによって削除すべきです。
|
ゲームサウンドオブジェクトのコピーを返します。基底クラスでは実装されません。派生クラスで実装しなければなりません。
|
サウンドをプレイする責任のあるBGameSoundDeviceへのポインタを返します。デフォルトのデバイスが使用されていたら NULLか返ります。
|
サウンドのフォーマットを示すgs_audio_format構造体を返します。
|
BGameSoundオブジェクトに取り付けられているサウンドへのIDを返します。サウンドが選択されていなかったら、0が返ります。
protected:
|
オブジェクトによって再生されているサウンドを特定します。
返値
B_OK初期化は成功した。
B_ERRORコンストラクタは失敗した。
他のエラー。プレイヤーは他のエラーを返すかもしれません。
|
オブジェクトの初期化が成功したかどうかを示す、status_t型の変数を返します。B_OKの返値は全てがうまく行っていることを示す。他のエラーはコンストラクタでエラーになったことを示す。
|
サウンドが再生されていればtrueが返り、そうでなければfalseが返ります。
|
この関数はBGameSoundのメモリープール(バッファによって得られる)がメモリーでロックされているかどうかを調べる。プールをロックすることは、パフォーマンスを良くする可能性があるが、メモリの要求も増えて仮想メモリを使用する能率が落ちるかもしれない。
![]() |
ロックの状態をセット出来るのは派生クラスのコンストラクタだけです。状態を一度セットしてしまうと変更出来ません。
|
返値
B_OKプールのロック状態はセットされました。
EALREADYロック状態はすでにセットされている。
|
SetAttributes()関数inAttributes配列にマッチするサウンドの属性をセットします。inAttributeCountはリストの中にいくつの属性があるか示します。
GetAttributes()はサウンドの現在の属性を示します。ioAttributesリストはinAttributeCount gs_attribute構造体のリストを含みます。それぞれのエントリは配列のスロットに格納された属性が入っているattributeフィールドを示します(?)。関数が変えるときにこれらの属性が満たされます。
返値
B_OK属性の変更は記録された
B_ERRORプレイヤーは適切に初期化されなかった。
|
SetGain()はサウンドのゲイン(ボリューム)をセットします。もし rampDurationがゼロでなかったら、ゲインの変更はrampDuration時間取ります。 ゲインは現在の値から新しい値に、述べられた(rampDuration)マイクロ秒で変更されます。rampDurationが0なら、変更は即座にされます。
Gain()関数は現在のゲインを返します。
ゲインは0.0 (無音)から1.0 (最高)までの値を取ります。
返値
B_OKゲインの変更は記録された。
B_ERRORオブジェクトは適切に変更されなかった。
他のエラー。派生クラスは他の適切なエラーを返してもよい。
protected:
|
InitCheck()が返ったときにセットされたエラーコードを返します。派生クラスはそれらのコンストラクタからこれを呼び出さなくてはなりません。
|
この関数は一度に使用できるBGameSoundから派生したオブジェクトの最大数を特定します。この値は32から1024の間の値であるはずです。もし、この範囲外だったら、32または1024の値が取得されます。実際の値のセットが返ります(?)。
|
poolSizeによって特定されうるサウンドバッファのバイト数でメモリープールのサイズをセットします。 この値は128キロバイトから4メガバイトの間でなくてはいけません。そうでなかったらB_BAD_VALUEが返ります。
![]() |
一度アロケートされたメモリープールは変更できません。
|
一般的にこの関数は、新しいBGameSoundのサブクラスを実装している時にしか呼ばれません。
返値
B_OKメモリープールのサイズはセットされました。
B_BAD_VALUE要求されたプールサイズは不適切です。
EALREADYメモリープールはすでにアロケートされてます。そのサイズは変更できません。
|
SetPan()はサウンドのパンを指定します。-1.0から1.0のこの値は、サウンドの場所を示します(完全に左から、完全に右まで)。0の値は、サウンドはユーザーの前に直接現れることを示します(?)。rampDurationが、0でなかったら、ポジションの変更はrampDurationかかります。サウンドは最初のポジションから新しいポジションへ、述べられた(rampDuration)マイクロ秒だけかかって、移動します。もしrampDurationが0なら、変更はすぐ行われます。
Pan()は現在のパンを返します。
返値
B_OKパンの変更は記録された。
B_ERRORオブジェクトは適切に初期化されなかった。
他のエラー。派生クラスは適切なエラーを返しても良い。
|
StartPlaying()関数は音の再生を始めます。StopPlaying()は再生を終了します。
StartPlaying()関数をすでに再生している音に対して実行すると、音は止まって最初から鳴り始めます。
これらは全てがうまくいったら、 B_OKを返します。もし、そうでなかったら、適切なエラーコードを返します。そのエラーは派生クラスが用いているものとはかぶりません。
| ゲームキット目次 | ゲームキット索引 |
訳者 big56