Android中的游戏音效

时间:2013-10-09 12:54:45

标签: android audio

我正在Android中开发一款简单的游戏。我想为每个触摸添加声音效果 事件。但是我添加了整个游戏中运行的背景音效。但 如何添加微小的声音效果来触摸游戏中的任何角色。为了更好地理解 以下是我的班级设计: 我有一个主要的活动,从视图我调用我的GameView类扩展 surfaceView。对于bacground声音我刚刚在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()),但它显示错误。 有谁知道如何根据我的班级设计添加这样的声音效果?

3 个答案:

答案 0 :(得分:52)

对于爆炸,硬币收集等短暂的声音效果,最好使用SoundPool

您只需要创建一个声音池:

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

在棒棒糖及以后:

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

您需要将上下文传递给加载方法,因此要么在活动中执行此操作,要么从其他地方获取。

播放声音的最后一步是调用play方法:

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

参数是:

  • soundID load()函数返回的soundID

  • leftVolume 左侧音量值(范围= 0.0到1.0)

  • rightVolume 正确的音量值(范围= 0.0到1.0)

  • 优先级流优先级(0 =最低优先级)

  • 循环循环模式(0 =无循环,-1 =永远循环)

  • 评分播放率(1.0 =正常播放,范围0.5至2.0)

您需要记住,SoundPool不应使用超过1MB的媒体文件,文件越小,效果和性能就越好。

确保在完成后或SoundPool中释放Activity.onDestroy

sp.release();

希望这有帮助

答案 1 :(得分:2)

GameView不是Context的子类。将Activity或ApplicationContext传递给Mediaplayer

答案 2 :(得分:0)

请执行以下操作...

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

我在How to play a Sound Effect in Android

找到了它