LoginSignup
8
8

More than 5 years have passed since last update.

ADX2 LEを使おう その4

Last updated at Posted at 2016-05-09

ここではプログラムを組む上での注意点を説明していく。
今回は汎用的なサウンドの使い方であり特殊処理に関しては触れないものとする。

フレームワーク化する

実際の開発ではCRIの関数をそのまま呼び出すことはほとんどなく
SoundManagerを作ってその中にCRIの関数を書くことになる。

ゲームのサウンドは特殊なことを行う場合以外は、BGM、SE、VOICEの再生と停止、音量設定くらいしかない。
しかし直接CRIの関数呼び出してやると1つの動作をさせるのに何行も書かなくてはいけなくなってしまうので
これらをフレームワーク化することで利便性を高める。

サウンドマネージャーに必要なメソッド

サウンドマネージャーはシングルトンで構築し、どこからでもアクセスできるようにしておく。
必要になりそうな汎用的なメソッドを以下に並べる。

  • Initialize
  • Finalize
  • Load
  • Unload
  • PlayBGM
  • StopBGM
  • IsPlayingBGM
  • SetVolumeBGM
  • GetVolumeBGM
  • PlaySE
  • StopSE
  • IsPlayingSE
  • SetVolumeSE
  • GetVolumeSE
  • PlayVoice
  • StopVoice
  • IsPlayingVoice
  • SetVolumeVoice
  • GetVolumeVoice
  • StopAll
  • Suspend
  • Resume

各メソッドの説明とメソッド内での注意点を記載する。

Initialize

初期化処理を記述する。

ターゲットプラットフォーム用の初期化

プラットフォームごとに初期化方法が異なるため、CRIのサンプルを元に正しい初期化処理を行う。

BGM、SE、VOICEそれぞれのプレイヤー数の確保

プレイヤー1つにつき1つ音を鳴らすことができる。
プレイヤーが8つある場合は、同時に8音鳴らせるということになる。
プレイヤー数はゲームによって異なるが、汎用的な数を設定するのであれば
BGMは1、SEは8、ボイスは4あれば十分である。
また、今回のBGMは1つしか再生しないことを前提に説明を進めていく。

フェード設定

サウンドのフェードイン、フェードアウトを行う場合、CRIではプレイヤーごとにフェード設定をしてやる必要がある。
大抵の場合フェード処理は必要になってくるため、全てのプレイヤーにフェード設定をしておいたほうが無難である。
AttachFaderというメソッドでフェードを有効にするが、デフォルトでフェードインとフェードアウト500ミリ秒設定になっているため、SEとVOICEのフェードイン時間は0に設定したほうがよい。

ACFファイルの読み込み

全体設定であるACFファイルを読み込んでおく

必要なACBファイルの読み込み

ゲーム内で読み替えを行わず、最初から最後まで使用するものは初期化の時点で読み込んでおく

Finalize

終了処理を記述する。
読み込んだファイルの解放、プレイヤーの解放、ADX2の解放で終わるはず。

Load

ACBファイルの読み込むを行う。
ここで行うのは読み替えを行うもので、最初から最後まで使用するものはInitializeで済ませてよい。

Unload

ACBファイルの解放を行う。
ここで行うのは読み替えを行うもので、最初から最後まで使用するものはFinalizeで済ませてよい。

PlayBGM

BGMの再生を行う。

引数

  • BGM名 or BGMのインデックス
  • ディレイ(開始までのWait時間、デフォルトで0秒)
  • フェードイン時間(デフォルトで0.5秒)
  • フェードアウト時間(デフォルトで0.5秒)

注意点

  • 現在再生されているBGM名が指定された場合は何もしないようにする。
  • CRIはフェード機能を有効にしている時、BGM1を再生中にBGM2を再生しようとした場合、自動的にフェードで切り替えを行ってくれるため、フェードインやフェードアウトの時間は0にしないほうがよい。

StopBGM

BGMの停止を行う

引数

  • フェードアウト時間(デフォルトで0.5秒)

注意点

フェード時間が0より大きい値が指定されている状態で停止後に即時にリソースを解放している場合、フリーズの原因となることがあるため、即時解放のときはフェードアウト時間を0にしてやる必要がある。

IsPlayingBGM

BGMの再生中の有無を取得する。
状態がPrepかPlayingのときは再生中と判断するのがよい。

SetVolumeBGM

BGMの音量を設定する

GetVolumeBGM

BGMの音量を取得する

PlaySE

SEの再生を行う。

引数

  • SE名 or SEのインデックス
  • 再生するプレイヤーのインデックス(-1を指定すると空いているプレイヤーを使用する)
  • ループの有無
  • ディレイ(開始までのWait時間、デフォルトで0秒)

戻り値

再生するプレイヤーのインデックス、空いているプレイヤーがなかった場合は-1。

注意点

  • 初期化の段階で行っているので問題ないと思うが、フェードインの時間は0秒にしておく。

StopSE

SEの停止を行う

引数

  • 停止するプレイヤーのインデックス(-1が指定された場合は全てのSEを停止)
  • フェードアウト時間(デフォルトで0.5秒)

注意点

BGMと同じ

IsPlayingSE

プレイヤーのインデックスを指定するところ以外は、BGMと同じ

引数

  • プレイヤーのインデックス

SetVolumeSE

SEの音量を設定する

GetVolumeSE

SEの音量を取得する

PlayVoice

Voiceの再生を行う。

引数

  • Voice名 or Voiceのインデックス
  • キャラクター名 or キャラクターのインデックス
  • 再生するプレイヤーのインデックス(-1を指定すると空いているプレイヤーを使用する)
  • ディレイ(開始までのWait時間、デフォルトで0秒)

戻り値

再生するプレイヤーのインデックス、空いているプレイヤーがなかった場合は-1。

注意点

  • 初期化の段階で行っているので問題ないと思うが、フェードインの時間は0秒にしておく。
  • 読み込んでいないキャラクターを指定された場合は、再生タイミングで読み込むようにする。ただし、際限なく読み込んでしまうとメモリを圧迫してしまうため、一定以上の読み込みを行ったら古いものから解放するようにしておくとよい。

StopVoice

Voiceの停止を行う

引数

  • 停止するプレイヤーのインデックス(-1が指定された場合は全てのVoiceを停止)
  • フェードアウト時間(デフォルトで0.5秒)

注意点

SEと同じ

IsPlayingVoice

SEと同じ

引数

  • プレイヤーのインデックス

SetVolumeVoice

Voiceの音量を設定する

GetVolumeVoice

Voiceの音量を取得する

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8