Android中的游戏音效
Posted
技术标签:
【中文标题】Android中的游戏音效【英文标题】:Game Sound effects in Android 【发布时间】:2013-10-09 12:54:44 【问题描述】:我正在用 android 开发一个简单的游戏。我想为每个触摸添加声音效果 事件。但是我添加了贯穿整个游戏的背景音效。但 如何为触摸游戏的任何角色添加微小的声音效果。为了更好地理解 以下是我的课堂设计: 我有一个主要活动,作为视图,我正在调用我的 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() ),但它显示错误。 有人知道如何根据我的班级设计添加这样的音效吗?
【问题讨论】:
“显示错误”。什么是错误..? 显示的错误不是运行时。只是我的编译器说如下:“MediaPlayer 类型中的方法 create(Context, int) 不适用于参数 (GameView, int)” 这可能是因为 GameView 不是 Activity 类。但是我不知道为什么... @Michael 【参考方案1】:对于爆炸、收币等短音效,最好使用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
您需要将上下文传递给加载方法,因此您要么在活动中执行此操作,要么从其他地方获取。
播放声音的最后一步是调用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 = 永远循环)
rate 播放速率(1.0 = 正常播放,范围 0.5 到 2.0)
您需要记住,SoundPool
不应使用超过 1MB 的媒体文件,文件越小,效果和性能越好。
请务必在完成后释放SoundPool
,或在Activity.onDestroy
中释放。
sp.release();
希望对你有帮助
【讨论】:
这是一个很好的解释!做得好。您/某人能否在 SoundPool 贬值时对其进行编辑/评论?【参考方案2】:GameView 不是 Context 的子类。将 Activity 或 ApplicationContext 传递给 Mediaplayer
【讨论】:
我尝试使用 MediaPlayer.create(MainActivity.this, R.raw.bg);但它显示了同样的错误。任何示例代码?????????【参考方案3】:只需执行以下操作...
MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.combo);
mp.start();
我在How to play a Sound Effect in Android找到它
【讨论】:
以上是关于Android中的游戏音效的主要内容,如果未能解决你的问题,请参考以下文章