最后的部分是剩下的关于音乐实现的部分,与最先给出的抽象接口/类对应,于音乐有关的三个类分别对应Audio,Music,Sound的具体实现,Audio是两者的统一管理,程序通过Audio来取得Music或Sound,下面是3者的具体实现
public class AndroidAudio implements Audio {
AssetManager assets;
SoundPool soundPool;
public AndroidAudio(Activity activity){
activity.setVolumeControlStream(AudioManager.STREAM_MUSIC);
this.assets=activity.getAssets();
this.soundPool=new SoundPool(20,AudioManager.STREAM_MUSIC,0);
}
@Override
public Music newMusic(String filename) {
try {
AssetFileDescriptor assetDescriptor=assets.openFd(filename);
return new AndroidMusic(assetDescriptor);
} catch (IOException e) {
throw new RuntimeException("Couldn't load music '"+filename+"'");
}
}
@Override
public Sound newSound(String filename) {
try{
AssetFileDescriptor assetDescriptor=assets.openFd(filename);
int soundId=soundPool.load(assetDescriptor, 0);
return new AndroidSound(soundPool,soundId);
} catch (IOException e) {
throw new RuntimeException("Couldn't load sound '"+filename+"'");
}
}
}
public class AndroidSound implements Sound {
int soundId;
SoundPool soundPool;
public AndroidSound(SoundPool soundPool, int soundId){
this.soundId=soundId;
this.soundPool=soundPool;
}
@Override
public void dispose() {
soundPool.unload(soundId);
}
@Override
public void play(float volume) {
soundPool.play(soundId, volume, volume, 0, 0, 1);
}
}
public class AndroidMusic implements Music, OnCompletionListener {
MediaPlayer mediaPlayer;
boolean isPrepared =false;
public AndroidMusic(AssetFileDescriptor assetDescriptor){
mediaPlayer=new MediaPlayer();
try {
mediaPlayer.setDataSource(assetDescriptor.getFileDescriptor(),assetDescriptor.getStartOffset(),assetDescriptor.getLength());
mediaPlayer.prepare();
isPrepared=true;
mediaPlayer.setOnCompletionListener(this);
} catch (Exception e) {
throw new RuntimeException("Couldn't load music");
}
}
@Override
public void dispose() {
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
mediaPlayer.release();
}
@Override
public boolean isLooping() {
return mediaPlayer.isLooping();
}
@Override
public boolean isPlaying() {
return mediaPlayer.isPlaying();
}
@Override
public boolean isStopped() {
return !isPrepared;
}
@Override
public void pause() {
}
@Override
public void play() {
if(mediaPlayer.isPlaying()){
return;
}
try{
synchronized (this) {
if(!isPrepared){
mediaPlayer.prepare();
}
mediaPlayer.start();
}
} catch (IllegalStateException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
}
@Override
public void setLooping(boolean looping) {
mediaPlayer.setLooping(looping);
}
@Override
public void setVolume(float volume) {
mediaPlayer.setVolume(volume, volume);
}
@Override
public void stop() {
mediaPlayer.stop();
synchronized (this) {
isPrepared=false;
}
}
@Override
public void onCompletion(MediaPlayer arg0) {
synchronized (this) {
isPrepared=false;
}
}
}
分享到:
相关推荐
Beginning Android Games.pdf
Beginning Android Games, Third Edition gives you everything you need to branch out and write your own Android games for a variety of hardware. Do you have an awesome idea for the next break-through ...
"Beginning Android Games, Second Edition offers everything you need to join the ranks of successful Android game developers, including Android tablet game app development considerations. You'll start...
Android. While some of the material may be old news for you, there are still a lot of tips and hints contained here that should make reading this book worthwhile. Android is a strange beast at times, ...
你会开始与游戏设计基础和编程的基础,然后逐步实现建立自己的基本的游戏引擎和游戏可玩。这会给你一切你需要另辟蹊径,写自己的Android游戏。 潜在的用户群和现有的高性能装置,使机器人的广泛有志游戏开发商...
Beginning Android Games 2012 (新版)
Beginning Android Games English | 6 Jan. 2017 | ISBN: 1484204735 | 636 Pages | PDF | 11.87 MB Learn all of the basics needed to join the ranks of successful Android game developers. You'll start with...
Beginning Android Games, 2nd Edition
Beginning Android Games, Third Edition gives you everything you need to branch out and write your own Android games for a variety of hardware. Do you have an awesome idea for the next break-through ...
beginning android games
android.开发书籍 高清PDF Beginning Android Games
Beginning Android 4 Games Development offers everything you need to join the ranks of successful Android game developers. You'll start with game design fundamentals and programming basics, and then ...
Beginning Android Games(3rd) 英文无水印pdf 第3版 pdf使用FoxitReader和PDF-XChangeViewer测试可以打开
Beginning Android 4 Games Development offers everything you need to join the ranks of successful Android game developers. You'll start with game design fundamentals and programming basics, and then ...
你会开始与游戏设计基础和编程的基础,然后逐步实现建立自己的基本的游戏引擎和游戏可玩。这会给你一切你需要另辟蹊径,写自己的Android游戏。 这本书将指导制作为Android平台的几个示例游戏的过程,并涉及广泛的...
Android游戏开发(Beginning Android 4 Games Development.pdf)
Beginning Android Beginning Android Beginning Android
* Android平台的基础,适用于那些在游戏中基本面 * 2D和3D游戏的设计和他们在Android平台上的成功实施 你将学到什么 *如何开发你的第一个Android应用程序的设置和使用的开发工具 *在Android平台中的游戏编程的基础...
* Android平台的基础,适用于那些在游戏中基本面 * 2D和3D游戏的设计和他们在Android平台上的成功实施 你将学到什么 *如何开发你的第一个Android应用程序的设置和使用的开发工具 *在Android平台中的游戏编程的基础...