音效Android

时间:2016-01-18 14:54:54

标签: android audio android-mediaplayer

我想为我的每个玩家活动添加声音效果,例如死亡。我应该使用soundpool还是meidaplayer?我该怎么做?为了更好地理解以下是我的课程设计,我有一个主要的活动类“游戏”从视图我称之为“GamePanel”类,它扩展了surfaceView并绘制了我的整个游戏。任何帮助将不胜感激!下面的游戏类。

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.SoundPool;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

public class Game extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    View v1 = (new GamePanel(this));
    setContentView(v1);


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_game, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);


}

}

和我希望播放声音的GamePanel

   player.resetDY();
        if (!reset) {
            newGameCreated = false;
            startReset = System.nanoTime();
            reset = true;
            dissapear = true;
            explosion = new 
            Explosion(BitmapFactory.decodeResource(getResources(), R.drawable.explosion), player.getX(),
                    player.getY() - 30, 100, 100, 25);
             ///here 

1 个答案:

答案 0 :(得分:1)

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

请务必在“活动”中设置音量控制,以便用户能够更改正确的音量:

setVolumeControlStream(AudioManager.STREAM_MUSIC);

然后,您需要将声音效果加载到池中并为其提供标识符:

int soundIds[] = new int[10];
soundIds[0] = sp.load(context, R.raw.your_sound, 1);
//rest of sounds goes here

在此处查看完整答案:source