我正在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()),但它显示错误。 有谁知道如何根据我的班级设计添加这样的声音效果?
答案 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();
找到了它