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中的游戏音效的主要内容,如果未能解决你的问题,请参考以下文章

OPENGL相关 音效

iPhone游戏中的音效

(转)CocosCreator零基础制作游戏《极限跳跃》九为游戏添加声音音效功能

浅谈游戏音效测试点

浅谈游戏音效测试点

浅谈游戏音效测试点