我在Pacman游戏中定义了以下声音类来播放声音:
public class Sound {
private static boolean sound = true;
private static MediaPlayer eatSound;
private static MediaPlayer shortEatSound;
private static MediaPlayer eatCherry;
private static MediaPlayer eatGhost;
private static MediaPlayer extraLive;
private static MediaPlayer intermission;
private static MediaPlayer openingSound;
private static MediaPlayer pacmanDiesSound;
private static MediaPlayer sirenSound;
public static void initializeOpenSound(Context context) {
openingSound = MediaPlayer.create(context, R.raw.opening_song);
}
public static void initializeSounds(Context context) {
eatSound = MediaPlayer.create(context, R.raw.eating);
shortEatSound = MediaPlayer.create(context, R.raw.eating_short);
eatCherry = MediaPlayer.create(context, R.raw.eating_cherry);
eatGhost = MediaPlayer.create(context, R.raw.eating_ghoasts);
extraLive = MediaPlayer.create(context, R.raw.extra_lives);
intermission = MediaPlayer.create(context, R.raw.intermission);
pacmanDiesSound = MediaPlayer.create(context, R.raw.pac_man_dies);
sirenSound = MediaPlayer.create(context, R.raw.siren);
}
public static int getOpeningSoundDuration() throws SoundInitializationError {
if (openingSound != null) {
return openingSound.getDuration();
} else {
throw new SoundInitializationError("Opening Sound not initialized!");
}
}
public static void playSirenSound() throws SoundInitializationError {
if (isSoundOn()) {
if (sirenSound != null) {
sirenSound.start();
} else {
throw new SoundInitializationError("Siren Sound not initialized!");
}
}
}
public static void playPacmanDiesSound() throws SoundInitializationError {
if (isSoundOn()) {
if (pacmanDiesSound != null) {
pacmanDiesSound.start();
} else {
throw new SoundInitializationError("Pacman Dies Sound not initialized!");
}
}
}
public static void playOpeningSound() throws SoundInitializationError {
if (isSoundOn()) {
if (openingSound != null) {
openingSound.setLooping(true);
openingSound.start();
} else {
throw new SoundInitializationError("Opening Sound not initialized!");
}
}
}
public static void playIntermissionSound() throws SoundInitializationError {
if (isSoundOn()) {
if (intermission != null) {
intermission.start();
} else {
throw new SoundInitializationError("Intermission Sound not initialized!");
}
}
}
public static void playExtraLiveSound() throws SoundInitializationError {
if (isSoundOn()) {
if (extraLive != null) {
extraLive.start();
} else {
throw new SoundInitializationError("Extra Live Sound not initialized!");
}
}
}
public static void playEatSound() throws SoundInitializationError {
if (isSoundOn()) {
if (eatSound != null) {
eatSound.start();
} else {
throw new SoundInitializationError("Eat Sound not initialized!");
}
}
}
public static void playShortEatSound() throws SoundInitializationError {
if (isSoundOn()) {
if (shortEatSound != null) {
shortEatSound.start();
} else {
throw new SoundInitializationError("Short Eat Sound not initialized!");
}
}
}
public static void playEatCherrySound() throws SoundInitializationError {
if (isSoundOn()) {
if (eatCherry != null) {
eatCherry.start();
} else {
throw new SoundInitializationError("Eat Cherry Sound not initialized!");
}
}
}
public static void playEatGhostSound() throws SoundInitializationError {
if (isSoundOn()) {
if (eatGhost != null) {
eatGhost.start();
} else {
throw new SoundInitializationError("Eat Ghost Sound not initialized!");
}
}
}
public static void stopOpeningSound() throws SoundInitializationError {
if (openingSound != null) {
openingSound.stop();
} else {
throw new SoundInitializationError("Opening Sound not initialized!");
}
}
public static boolean isSoundOn() {
return sound;
}
public static void setSoundOn(boolean b) {
sound = b;
}
}
这对我的HTC Desire非常有效,但在我的T-Mobile G1上,只能播放OpeningSound。其他声音文件没有播放,但也没有例外。两种设备都使用2.1。
任何提示?
答案 0 :(得分:1)
只需将SoundPool用于短音