最后的部分是剩下的关于音乐实现的部分,与最先给出的抽象接口/类对应,于音乐有关的三个类分别对应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》一书由Mario Zechner撰写,旨在为初学者提供全面的Android游戏开发指南。本书从Android平台的基础知识入手,逐步深入到游戏开发的各个环节,涵盖了从简单的2D游戏到复杂的3D游戏的开发...
《Beginning Android Games 2012》这本书是一本关于Android游戏开发的专业教程书籍,由Mario Zechner和Robert Green共同撰写。该书以Android智能手机和平板电脑的游戏应用程序开发为主题,针对的是那些对Android游戏...
- **书籍名称**:《Beginning Android Games》(Android游戏开发入门) - **作者**:Mario Zechner - **出版信息**:Apress出版社,2011年4月10日发行 - **ISBN**:1430230428 - **资源格式**:PDF - **语言**:英文...
《Beginning Android Games, 2nd Edition》是一本深入浅出的Android游戏开发指南,由Mario Zechner与Robert Green合著。本书旨在帮助读者构建针对Android智能手机和平板电脑的游戏应用程序,涵盖了从基础知识到高级...
- **书名**:《Beginning Android 4 Games Development》 - **作者**: Mario Zechner 和 Robert Green - **出版社**: Apress Media, L.L.C. - **出版日期**: 2011年 - **ISBN**: - 纸质版: 978-1-4302-3987-1 - ...
### Apress.Beginning Android Games.2011 #### 知识点概览 - **Android游戏开发基础知识** - **Android SDK入门** - **游戏开发基础理论** - **OpenGL ES图形编程** - **2D与3D游戏编程技巧** - **Android游戏开发...
《Beginning Android Games, 第二版》是一本专注于Android游戏开发的权威图书,由Mario Zechner和Robert Green共同撰写。本书旨在为读者提供一个全面的游戏开发入门教程,涵盖了从基础的游戏设计概念到高级的编程...
### 关于《Beginning Android Games》的关键知识点 #### 一、书籍概述 本书是一本非常出色的Android游戏开发入门书籍,由Mario Zechner撰写。作者在书中深入浅出地介绍了从2D到3D游戏开发的基本原理和技术细节。...
《初识Android 4游戏开发》是一本专为Android游戏开发者设计的指南,涵盖了从入门到进阶的各种关键知识点。这本书旨在帮助读者掌握在Android 4平台上构建游戏所需的技术和技巧,无论你是初学者还是有经验的程序员,...
### 关于《Beginner Android Games》的知识点梳理 #### 一、引言与目标受众 - **书籍定位**:本书面向初学者,旨在教授如何在Android平台上开发游戏应用。 - **主要内容**:涵盖Android基础知识、音频及图形编程、...
### Android游戏开发基础:《Beginning.Android.Games》关键知识点概览 #### 一、书籍简介与目标受众 《Beginning.Android.Games》是一本专为初学者设计的经典Android游戏开发教程。作者Mario Zechner通过本书带领...
### Android 4 游戏开发入门关键知识点概览 #### 一、图书基本信息与目标读者 - **出版日期**:2011年12月15日。 - **作者**:Mario Zechner 和 Robert Green。 - **目标读者**: - 对Android平台有一定Java基础...
《Apress.Beginning.Android.Games》是一本专为Android游戏开发者设计的详尽指南,由Mario Zechner撰写。本书不仅介绍了Android平台的基础知识,还深入探讨了游戏开发的各个方面,包括音频、图形编程、数学、物理...
- **"Beginning.Android.4.Games.Development.Dec.2011"**:该标题表明本书旨在为初学者提供Android 4游戏开发的基础知识。发布于2011年12月,反映了当时Android平台的发展状况及游戏开发的技术背景。 #### 描述...
《Apress Beginning Android 4 Games Development 2011》是一本专为初学者设计的Android游戏开发指南,旨在帮助读者掌握使用Android平台创建游戏所需的技术和知识。这本书的出版年份是2011年,尽管Android系统已经...
安卓游戏框架android 游戏框架,基于kilobolt.com 上的教程,该教程本身基于《Beginning Android Games Development》(由Mario Zechner 和Robert Green 编写)。 目前,我直接基于教程进行此操作,但很快就会开始...
开发者在创建这款游戏的过程中,参照了Mario Zechner所著的《 Beginning Android Games》这本书,这是一本非常权威且深入浅出的Android游戏开发指南,对于初学者和有经验的开发者来说都是宝贵的资源。 首先,让我们...