有以下课程使用声音池播放声音fx:

public class SoundManager {

public static int SOUNDPOOLSND_MENU_BTN = 0;

public static int SOUNDPOOLSND_WIN = 1;

public static int SOUNDPOOLSND_LOOSE = 2;

public static int SOUNDPOOLSND_DRAW = 3;

public static int SOUNDPOOLSND_TICK1 = 4;

public static int SOUNDPOOLSND_TICK2 = 5;

public static int SOUNDPOOLSND_OUT_OF_TIME = 6;

public static int SOUNDPOOLSND_HISCORE = 7;

public static int SOUNDPOOLSND_CORRECT_LETTER = 8;

public static boolean isSoundTurnedOff;

private static SoundManager mSoundManager;

private SoundPool mSoundPool;

private SparseArray mSoundPoolMap;

private AudioManager mAudioManager;

public static final int maxSounds = 4;

public static SoundManager getInstance(Context context)

{

if (mSoundManager == null){

mSoundManager = new SoundManager(context);

}

return mSoundManager;

}

public SoundManager(Context mContext)

{

mAudioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);

mSoundPool = new SoundPool(maxSounds, AudioManager.STREAM_MUSIC, 0);

// mSoundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {

// public void onLoadComplete(SoundPool soundPool, int sampleId,int status) {

// loaded = true;

// }

// });

mSoundPoolMap = new SparseArray();

mSoundPoolMap.put(SOUNDPOOLSND_MENU_BTN, mSoundPool.load(mContext, R.raw.menubutton, 1));

mSoundPoolMap.put(SOUNDPOOLSND_WIN, mSoundPool.load(mContext, R.raw.win, 1));

mSoundPoolMap.put(SOUNDPOOLSND_LOOSE, mSoundPool.load(mContext, R.raw.lose, 1));

mSoundPoolMap.put(SOUNDPOOLSND_TICK1, mSoundPool.load(mContext, R.raw.tick_0, 1));

mSoundPoolMap.put(SOUNDPOOLSND_TICK2, mSoundPool.load(mContext, R.raw.tick_1, 1));

mSoundPoolMap.put(SOUNDPOOLSND_OUT_OF_TIME, mSoundPool.load(mContext, R.raw.out_of_time, 1));

mSoundPoolMap.put(SOUNDPOOLSND_HISCORE, mSoundPool.load(mContext, R.raw.personal_highscore, 1));

mSoundPoolMap.put(SOUNDPOOLSND_CORRECT_LETTER, mSoundPool.load(mContext, R.raw.correct_letter, 1));

// testing simultaneous playing

int streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

mSoundPool.play(mSoundPoolMap.get(0), streamVolume, streamVolume, 1, 20, 1f);

mSoundPool.play(mSoundPoolMap.get(1), streamVolume, streamVolume, 1, 2, 1f);

mSoundPool.play(mSoundPoolMap.get(2), streamVolume, streamVolume, 1, 0, 1f);

}

public void playSound(int index) {

if (isSoundTurnedOff)

return;

int streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, 0, 1f);

}

public static void clear()

{

if (mSoundManager != null){

mSoundManager.mSoundPool = null;

mSoundManager.mAudioManager = null;

mSoundManager.mSoundPoolMap = null;

}

mSoundManager = null;

}

}

它同时播放评论“测试同时播放”下面提到的3个声音.看来你需要在我的代码监听器(OnLoadCompleteListener)中实现注释.可能会发生系统只是在你开始播放时没有加载声音.如果您不想实现提到的侦听器,请尝试在播放声音活动开始后等待一段时间,并在一段时间后开始播放声音.

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐