2011年4月6日

Androidで音を鳴らす。[SoundPool編]

SoundPoolクラスの場合、基本は下記の3処理。

①SoundPoolを new して、
②音声ファイル読み込んで、
③再生する
SoundPool soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); // ①
int soundID = soundPool.load(context, R.raw.lalala, 1); // ②
soundPool.play(soundID, 1.0F, 1.0F, 1, 0, 1.0F); // ③

【①の補足】
public SoundPool (int maxStreams, int streamType, int srcQuality)
引数:
  • maxStreams … このSoundPoolオブジェクトで同時に扱う音声(Stream)の最大数
  • streamType … 音声(stream)の種類。 AudioManagerクラスに定義されている
  • srcQuality … サンプルレートの質。(現在はまだ未使用。 0 を使えとのこと)
返り値:
  • 成功なら、SoundPoolオブジェクト
  • 失敗なら、null


【②の補足】
音声ファイルは、res/raw/lalala.ogg に設置したという想定。ResourceIDは R.raw.lalala になる。ここから想像できると思うが、同フォルダに lalala.wavlalala.mp3 を設置しても区別がつかない。

ちなみに、音声ファイルを安定再生するためには oggファイルが良いとのこと。

public int load (Context context, int resId, int priority)
引数:
  • context … コンテキスト
  • resId … 音声ファイルのリソースID
  • priority … 優先度サンプルレートの質。(現在はまだ未使用。将来互換性のため 1 を使え)
返り値:
  • sound ID (再生時に使用)


【③の補足】
public final int play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)

引数:
  • soundID … load()メソッドで返される soundID
  • leftVolume … 音量[左] (範囲:0.0~1.0)
  • rightVolume … 音量[右] (範囲:0.0~1.0)
  • priority … ストリーム優先度 (0 = 優先度最低)
  • loop … ループの回数 (0 = ループ無し、-1 = 無限ループ)
  • rate … 再生レート (1.0 = 標準の再生, 範囲:0.5~2.0)
返値:
  • 成功なら、streamID(≠0)
  • 失敗なら、0


【参考にしたサイト】

0 件のコメント:

コメントを投稿