Android携帯ゲームを作って世界に配信してみよう(3) ―― 効果音の入れ方とデータの保存処理を学ぶ

山田 元康

tag: 組み込み

エレキ系DIY 2011年12月 7日

●ゲーム内でのSoundPoolの利用方法

 ゲーム内では,次のようにSoundPoolを利用して効果音を再生します.まず,アプリケーション(DribbleActivity)が起動し,画面(SurfaceView)が生成されたタイミングで,SoundPoolの初期化を行います.管理クラスの生成と,利用するすべての効果音を読み込みます.その後,ゲームの場面の中で,必要な効果音を再生しています.

 リスト4は,ゲームの起動時に初期化処理を行っているところです.ゲーム内のすべての効果音を管理するSoundsクラスのinitメソッドを呼び出します.リソースの読み込みには,Contextが必要となりますので,引数にContextを渡しています.

 

リスト4 createThreadメソッド内でSounds.initを呼び出す(Main.javaより抜粋)

  /**
   * ゲームループスレッドを生成し ゲームループを開始 or 再開
   */
  public static void createThread(final SurfaceView view) {
    Main.view = view;
    if (first) {
      Sounds.init(view.getContext());
      PlayLog.init(view.getContext());
      Main.initScenes(view);
      startScene(Main.TITLE);
      first = false;
    }
    thread = new Thread() {
      @Override public void run() {
        Main.runLoop();
      }
    };
    thread.start();
  }

 

 次に,リスト5のように,今回ゲーム内で同時に利用される三つの効果音を,一括で読み込みます.また,読み込んだ際にAPIが戻す音声ID(soundID)を保管して,再生時に利用できるようにします.

 

リスト5 効果音を一括で読み込む(Sounds.javaより抜粋)

  public static void init(final Context context) {
    Sounds.context = context;
    soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
    sidBounce1 = soundPool.load(context, R.raw.sfx_bounce1, 1);
    sidBounce2 = soundPool.load(context, R.raw.sfx_bounce2, 1);
    sidTouch = soundPool.load(context, R.raw.sfx_touch, 1);
  }

 

 ボールがバウンドした際に効果音1を再生しています(リスト6リスト7).指定しているパラメータの意味は,効果音の定位はセンター,プライオリティは最低,ループはしない,再生ピッチは標準となります.

 

リスト6 バウンド音を再生する関数を呼び出す(PlayScene.javaより抜粋)

  public void process(SurfaceView view) {
    :
    if (floor <= ballY) {
      // 床に当たった
    :
      if (bounce < 1 && ballVY < 1) {
        // 床の上で停止している
    :
      } else {
        // 床の上でバウンド
        ballY = floor - bounce;
        ballVY = -ballVY * DECAY_VERTICAL;
        dribbled++;
        Sounds.playBounce1();
        Log.v("Dribble","Bound on the floor: ballVY=" + ballVY + ",bounce=" + bounce);
    :
      }
    :
    } else {
    :
    }
    :
  }

 

リスト7 バウンド音を再生(Sounds.javaより抜粋)

  public static void playBounce1() {
    soundPool.play(sidBounce1, 1.0F, 1.0F, 0, 0, 1.0F);
  }

 

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日