12

Androidで簡単なゲームを開発しています。タッチ イベントごとに効果音を追加したい。ただし、ゲーム全体で実行されるバックグラウンド サウンド エフェクトを追加しました。しかし、ゲームのキャラクターに触れるための小さな効果音を追加するにはどうすればよいでしょうか。理解を深めるために、私のクラス設計を以下に示します。私は、surfaceView を拡張する GameView クラスをビューとして呼び出すメイン アクティビティを持っています。バクグラウンド サウンドについては、mainActivity でサウンドを作成し、その GameView クラスを次のように呼び出しました。

public class MainActivity extends Activity {
    MediaPlayer backgroundMusic;



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
         backgroundMusic = MediaPlayer.create(MainActivity.this, R.raw.bg);


         backgroundMusic.setLooping(true);
         backgroundMusic.setVolume(10.0f, 3.0f);
         backgroundMusic.start();

        setContentView(new GameView(this));
    }
}

そして、以下は私の GameView クラスです。以下のように、このクラス onTouchEvent に効果音を追加したいと思います。

public class GameView extends SurfaceView {
 @Override
 public boolean onTouchEvent(MotionEvent event) {
   //checking condition I want to give different sound here.

  }
}

mainActivity ( MediaPlayer.creat() を使用)として実行しようとしましたが、エラーが表示されます。私のクラスデザインに基づいてそのような効果音を追加する方法を知っている人はいますか?

4

3 に答える 3

56

爆発、コイン収集などの短い効果音には、 を使用することをお勧めしますSoundPool

サウンド プールを作成するだけです。

SoundPool sp = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);

Lollipop 以降の場合:

AudioAttributes attrs = new AudioAttributes.Builder()
        .setUsage(AudioAttributes.USAGE_GAME)
        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
        .build();
SoundPool sp = new SoundPool.Builder()
        .setMaxStreams(10)
        .setAudioAttributes(attrs)
        .build();

これにより、最大のサウンドプールが作成されます。10 のサウンド ストリーム (つまり、一度にいくつのサウンド エフェクトを同時に再生できるか) でありAudioManager.STREAM_MUSIC、サウンド ストリームとして使用します。

Activityユーザーが適切なストリームの音量を変更できるように、 で音量コントロールも設定してください。

setVolumeControlStream(AudioManager.STREAM_MUSIC);

それよりも、効果音をプールにロードし、それらに識別子を与える必要があります。

int soundIds[] = new int[10];
soundIds[0] = sp.load(context, R.raw.your_sound, 1);
//rest of sounds goes here

load メソッドにコンテキストを渡す必要があるため、アクティビティ内でこれを行うか、他の場所から取得します。

playサウンドを再生する最後のステップは、メソッドを呼び出すことです。

sp.play(soundIds[0], 1, 1, 1, 0, 1.0);

パラメータは次のとおりです。

  • load () 関数によって返されるサウンド ID

  • leftVolume 左ボリューム値 (範囲 = 0.0 ~ 1.0)

  • rightVolume右ボリューム値 (範囲 = 0.0 ~ 1.0)

  • 優先度 ストリームの優先度 (0 = 最低の優先度)

  • ループ ループ モード (0 = ループなし、-1 = 永久にループ)

  • rate 再生レート (1.0 = 通常の再生、範囲 0.5 ~ 2.0)

1MB を超えるメディア ファイルは使用しないでSoundPoolください。ファイルが小さいほど、効果とパフォーマンスが向上します。

SoundPool完了したら、または で必ず を離してくださいActivity.onDestroy

sp.release();

お役に立てれば

于 2013-10-11T06:42:11.750 に答える
2

GameView は Context のサブクラスではありません。Activity または ApplicationContext を Mediaplayer に渡す

于 2013-10-09T13:08:51.617 に答える
0

次のことを行うだけです...

MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.combo);
mp.start();

Androidで効果音を再生する方法で見つけました

于 2014-08-01T04:55:11.200 に答える