我正在Android中开发一个简单的游戏。我想为每个触摸添加声音效果
事件。但是,我添加了贯穿整个游戏的背景音效。但
如何为触摸游戏的任何角色添加微小的声音效果。为了更好的理解
以下是我的类(class)设计:
我有一个主要 Activity ,作为 View ,我正在调用扩展的 GameView 类
表面 View 。对于 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() ),但它显示错误。
有人知道如何在我的类(class)设计的基础上添加这样的音效吗?

最佳答案

对于爆炸、硬币收集等短音效,最好使用 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

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

播放声音的最后一步是调用 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 = 最低优先级)
  • loop 循环模式(0 = 无循环,-1 = 永远循环)
  • rate 播放率(1.0=正常播放,范围0.5到2.0)

  • 您需要记住,SoundPool 不应使用超过 1MB 的媒体文件,文件越小,效果和性能越好。

    确保在完成后释放 SoundPoolActivity.onDestroy
    sp.release();
    

    希望这可以帮助

    关于android - Android中的游戏音效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19272646/

    10-13 03:44