我正在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)
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
20176 次 |
| 最近记录: |