Android中的游戏音效

exp*_*Fun 11 audio android

我正在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));
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我的GameView类.我想在这个类onTouchEvent中添加声音效果如下:

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

  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试将其作为mainActivity(即使用MediaPlayer.creat()),但它显示错误.有谁知道如何根据我的班级设计添加这样的声音效果?

Fil*_*mek 55

对于像爆炸,硬币收集等那样的短音效,最好使用SoundPool.

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

SoundPool sp = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
Run Code Online (Sandbox Code Playgroud)

在棒棒糖和后来:

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();
Run Code Online (Sandbox Code Playgroud)

这创建了最大的声音池.10个声音流(即可以同时播放多少个同步声音效果)并AudioManager.STREAM_MUSIC用作声音流.

请务必在您的音量控制中设置Activity,以便用户能够更改正确的音量:

setVolumeControlStream(AudioManager.STREAM_MUSIC);
Run Code Online (Sandbox Code Playgroud)

比,你需要将声音效果加载到池中并给它们标识符:

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

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

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

sp.play(soundIds[0], 1, 1, 1, 0, 1.0);
Run Code Online (Sandbox Code Playgroud)

参数是:

  • 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();
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助