背景音乐
2015-07-04 11:43
176 查看
一般添加声音是靠两种方法实现的。一种是MediaPlayer,一种是SoundPool。这两种方法的区别是MediaPlayer可以存储较大的音频文件,载入稍慢,不支持同时播放。而SoundPool只能存储较小的音频文件,载入较快,支持同时播放。这样就很显然了,MediaPlayer用来实现背景音乐,而SoundPool用来实现音效。
package my.Game.audio;
import java.io.IOException;
import com.threed.jpct.Logger;
import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.media.AudioManager;
import android.media.MediaPlayer;
public class MyMusic {
protected static MediaPlayer mediaPlayer;
protected static boolean mustResume = false;
private static Activity act;
public MyMusic(Activity act){
mediaPlayer = new MediaPlayer();
MyMusic.act=act;
}
public static void prepareMediaPlayer(String file) {
if(mediaPlayer == null) {
mediaPlayer = new MediaPlayer();
}
AssetFileDescriptor afd = null;
try {
afd = act.getAssets().openFd("sound/"+file+".ogg");
} catch (Exception e) {
e.printStackTrace();
Logger.log("Tried creating Music with missing asset ... " + file);
System.exit(0);
return;
}
try {
mediaPlayer.reset();
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
afd.close();
} catch (IOException e) {
e.printStackTrace();
Logger.log("Error setting data source in Music.play, IO exception");
System.exit(0);
return;
} catch (IllegalStateException e) {
e.printStackTrace();
Logger.log("Error setting data source in Music.play, fail ...");
return;
}
try {
mediaPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
Logger.log("Error preparing MediaPlayer");
System.exit(0);
return;
}
}
public static void play(boolean loop) {
if(mediaPlayer == null) {
Logger.log("error:MediaPlayer hasn't prepared.");
return;
}
mediaPlayer.setLooping(loop);
mediaPlayer.start();
}
public static void stop() {
if(mediaPlayer == null) {
Logger.log("error:No mediaPlayer is playing.");
return;
}
mediaPlayer.stop();
}
public static void pause() {
if(mediaPlayer == null) {
Logger.log("error:No mediaPlayer is playing.");
return;
package my.Game.audio;
import java.io.IOException;
import com.threed.jpct.Logger;
import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.media.AudioManager;
import android.media.MediaPlayer;
public class MyMusic {
protected static MediaPlayer mediaPlayer;
protected static boolean mustResume = false;
private static Activity act;
public MyMusic(Activity act){
mediaPlayer = new MediaPlayer();
MyMusic.act=act;
}
public static void prepareMediaPlayer(String file) {
if(mediaPlayer == null) {
mediaPlayer = new MediaPlayer();
}
AssetFileDescriptor afd = null;
try {
afd = act.getAssets().openFd("sound/"+file+".ogg");
} catch (Exception e) {
e.printStackTrace();
Logger.log("Tried creating Music with missing asset ... " + file);
System.exit(0);
return;
}
try {
mediaPlayer.reset();
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
afd.close();
} catch (IOException e) {
e.printStackTrace();
Logger.log("Error setting data source in Music.play, IO exception");
System.exit(0);
return;
} catch (IllegalStateException e) {
e.printStackTrace();
Logger.log("Error setting data source in Music.play, fail ...");
return;
}
try {
mediaPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
Logger.log("Error preparing MediaPlayer");
System.exit(0);
return;
}
}
public static void play(boolean loop) {
if(mediaPlayer == null) {
Logger.log("error:MediaPlayer hasn't prepared.");
return;
}
mediaPlayer.setLooping(loop);
mediaPlayer.start();
}
public static void stop() {
if(mediaPlayer == null) {
Logger.log("error:No mediaPlayer is playing.");
return;
}
mediaPlayer.stop();
}
public static void pause() {
if(mediaPlayer == null) {
Logger.log("error:No mediaPlayer is playing.");
return;
相关文章推荐
- 网易云音乐8亿用户背后的伤疤
- flex 控件的重要属性
- Delphi控件ListView的属性及使用方法详解
- web下载的ActiveX控件自动更新
- WinForm实现按名称递归查找控件的方法
- C#中父窗口和子窗口之间控件互操作实例
- MFC中动态创建控件以及事件响应实现方法
- WinForm自定义函数FindControl实现按名称查找控件
- winform异型不规则界面设计的实现方法
- WinForm拖拽控件生成副本的解决方法
- ASP.NET的HtmlForm控件学习及Post与Get的区别概述
- WinForm实现移除控件某个事件的方法
- C#分屏控件用法实例
- jQuery操作表单常用控件方法小结
- js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
- C#的winform控件命名规范
- Jquery给基本控件的取值、赋值示例
- ASP.net 动态加载控件时一些问题的总结
- Android中设置只有程序第一次运行才显示的界面实现思路
- ASP.NET 4中的可扩展输出缓存(可以缓存页面/控件等)