`

Android游戏音效实现

 
阅读更多

1. 游戏音效SoundPool

游戏中会根据不同的动作 , 产生各种音效 , 这些音效的特点是短暂(叫声,爆炸声可能持续不到一秒) , 重复(一个文件不断重复播放) , 并且同时播放(比如打怪时怪的叫声 , 和技能释放的声音需要同时播放) , 即时(技能用处之后声音马上随着玩家操作发出,不能有延迟).

MediaPlayer会占用大量的系统资源 , 并且不能同时播放 , 并且无法实现即时音效 , 这里引入了一个新的类 -- SoundPool , 这个类完全满足上面提出的四点要求 , 可以无延时播放游戏中的短暂音效 .


2. 相关API介绍

(1) SoundPool

构造方法 : SoundPool(int maxStreams, int streamType, int srcQuality) ;

参数解析 :

maxStream : 该参数是定义最多能同时播放的多少音效 .

streamType : 该参数定义音频类型 , 游戏中一般设置为AudioManager.STREAM_MUSIC .

srcQuality : 该参数用来设置音频质量 , 这个参数目前没有作用 , 这里设置为 0;


加载音频文件方法 :intload(Context context, int resId, int priority);

参数解析 :

context : 上下文对象;

resId : 要加载的资源文件 , 即R.raw.music...

priority : 优先级别 , 这里没有作用 , 设置为1.


播放音效方法 : int play(int soundId, float leftVolume, float rightVolume, int priority, int loop, float rate);

参数解析 :

soundId : 这个id不是资源id , 指的是利用load方法加载资源文件返回的id值 , 这个要区别清楚.

leftVolume : 左声道的音量 , 这个音量是一个 0 ~ 1的数 , 这个小数是当前音量/最大音量的结果;

rightVolume : 右声道的音量 , 这个音量与左声道的音量是同一种音量;

priority : 优先级参数 , 0为最低, 这里设置为1;

loop : 音效循环的次数 , 0为不循环 , -1为永远循环;

rate : 音效回放的速度 , 这个值是在0.5~2.0f之间 , 1f是正常速度;


暂停音效播放方法 :pause(int streamId);

参数streamId :这个参数是play()方法执行完之后的返回值 , 这个返回值是正在播放的音效的一个标识 , 对正在播放的音效进行操作的时候 , 就需要这个标识来对其进行操作;

通知音效播放方法 : stop(int streamId) , 这个参数与上面的pause()方法中的streamId参数是一个效果.


(2)AudioManager

获取方法 : AudioManager对象时系统服务, 可以通过调用上下文对象的getSystemService(Context.AUDIO_SERVICE)获取 , 注意获取到之后 , 需要将对象墙砖为AudioManager对象才可以使用.

eg : AudioManager audioManager = (AudioManager)getApplicationContext().getSystemService(Context.AUDIO_SERVICE);


利用AudioManager获取当前音量的方法 : float currVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

利用AudioManager获取当前系统最大音量方法 : float maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);


使用这两个音量就可以计算出运行SoundPool音效的音量 , 当前音量 / 系统最大音量 , 结果就是soundPool.play()方法中需要传入的音量 ;


3. 程序代码

public class MainActivity extends Activity implements OnClickListener {

	private SoundPool soundPool;
	private HashMap<Integer, Integer> hashMap;
	private int currStreamId;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        initSoundPool();
    }

    private void initSoundPool() {
    	soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);	
    	hashMap = new HashMap<Integer, Integer>();
    	hashMap.put(1, soundPool.load(getApplicationContext(), R.raw.musictest, 1));
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
			case R.id.bt_play:
				play(1, 0);
				Toast.makeText(getApplicationContext(), "播放即时音效", Toast.LENGTH_LONG).show();
				break;
			case R.id.bt_stop:
				soundPool.stop(currStreamId);
				Toast.makeText(getApplicationContext(), "暂停播放", Toast.LENGTH_LONG).show();
				break;
			default:
				break;
		}
	}
	
	private void play(int sound, int loop) {
		AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
		float currVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
		float maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
		float volume = currVolume / maxVolume;
		currStreamId = soundPool.play(hashMap.get(sound), volume, volume, 1, loop, 1.0f);
		System.out.println(currStreamId);
	}
}

4. 程序的注意点

  • 音效文件需要放在res的raw下.
  • SoundPool播放的音效要小于7秒 , 否则会出现加载失败的现象;
  • 在Android平台上使用的即时文件越小越好 , 必要的时候可以降低采样频率或者将立体声改为单声道;
分享到:
评论

相关推荐

    Android游戏音效播放的工具类

    闲余时间写的一个实现音频播放的工具类,可以帮助用户以尽量精简的代码来实现音效播放的功能,如Android中开发应用的按钮等的点击音效,android游戏中的音效等

    Android游戏开发之旅.doc

    今天Android123开始新的Android游戏开发之旅系列,主要从控制方法(按键、轨迹球、触屏、重力感应、摄像头、话筒气流、光线亮度)、图形View(高效绘图技术如双缓冲)、音效(游戏音乐)以及最后的OpenGL ES(Java层)和NDK...

    基于Android Studio的在线数独对战游戏平台的设计与实现

    本研究项目基于Java语言和Android平台,开发一款在线数独对战平台App,利用移动互联网手段为人们带来新的数独体验。 核心功能模块设计: 1.用户登陆的设计与实现 用户通过APP提供的注册、登陆功能,实现使用其它...

    Android Studio实现连连看小游戏,满分大作业,萌新必看!

    主要实现的功能有:难度设置、打乱重排、排行榜、计时器、背景音乐、消除音效。本项目几乎涵盖了Android入门级的所有知识点,适合新手练手实践。详细介绍博客链接:...

    Android游戏源码-忍者快跑

    《Android游戏源码——忍者快跑》是一款基于Android平台的休闲跑酷游戏。本资源提供了游戏的完整源代码,包括游戏逻辑、图形界面、音效等部分。源码结构清晰,注释详尽,易于阅读和维护。 二、适用人群 本资源适用...

    基于android平台的连连看游戏的实现.docx

    在对系统进行详细需求分析的基础上,确定了系统的基本功能要求,对游戏的关卡设置、菜单界面、音效和动画、、时间控制、屏幕绘制、连通算法和布局算法进行了设计,并最终实现了一款风格清新可爱、娱乐体验丰富且性能...

    Android 4游戏编程入门经典

     4.1.7 10个简单步骤建立android游戏项目  4.1.8 市场过滤器  4.1.9 定义游戏图标  4.2 android api基础  4.2.1 创建测试项目  4.2.2 活动的生命周期  4.2.3 处理输入设备  4.2.4 文件处理  4.2.5 音频编程...

    Android使用SoundPool实现播放音效

    如果在程序应用中(比如:游戏的音效等)需要播放密集、短促的音效,这时就使用SoundPool来播放音效,SoundPool使用音效池的概念来管理多个短促的音效,例如它可以开始就10个音效,以后在程序中按音效的ID进行播放。...

    Android制作的2048demo

    android 的2048小游戏完整实现:GridLayout布局(android 4.0及以上)。以前做过一个2048的算法题,学了几天android,觉得可以实现个安卓版的,也就动手写了个。

    android开发揭秘PDF

    11.6 游戏音效 11.7 游戏存档 11.8 小结 第四部分 高级篇 第12章 AndroidOpenGL开发 基础 12.1 OpenGL简介 12.2 多边形 12.3 颜色 12.4 旋转 12.5 3D 空间 12.6 纹理映射 12.7 光照和事件 12.8 混合 12.9 小结 第...

    Android实现打飞机小游戏所需素材

    Android实现打飞机小游戏所需素材,包括游戏字体,游戏音效,游戏图片

    Android 3D游戏开发技术宝典-OpenGL ES 2.0 (吴亚峰) 源代码

    第2章 游戏开发相关android基础知识 23 2.1 游戏中的音效 23 2.1.1 游戏中的即时音效 23 2.1.2 即时音效的一个案例 24 2.1.3 背景音乐播放技术 27 2.1.4 简易音乐播放器的实现 29 2.2 简单数据的...

    android游戏编程入门

    android游戏编程入门 《Android4游戏编程入门经典》是2012年清华大学出版社出版的图书,作者是(美)策希纳(Zechner,M.),无(美)格林(Green,R.)。 第1章 Android,后起之秀 1  1.1 Android简介 1  1.2 版本分裂 3 ...

    Android Studio实现推箱子小游戏,满分安卓程序设计,界面精美,音效炫酷

    推箱子是一款非常受欢迎的益智游戏,游戏的玩法简单,但是需要玩家具备一定的逻辑思维能力和空间感知能力,因此深受广大玩家的喜爱。在游戏中,玩家需要将箱子推到指定位置,每一关都有一个特定的目标,比如推动所有...

    从零开始Android游戏编程电子书 word之Docx版

    从零开始Android游戏编程(第二版),目录: 第一章 搭建开发环境.docx 第二章 创建第一个程序Hello Tank.docx 第三章 显示文字和图片.docx 第四章 响应用户事件.docx 第五章 小结——扫雷游戏的实现.docx 第六...

    Android仿消消乐游戏(终版)

    安卓消消乐游戏,开发工具使用的是Android Studio,游戏包含了下落动画,交互动画、消除动画没做,但是预留了空间扩展,补全了相关声音音效,喜欢的朋友可以下载下来研究!

    Android应用开发揭秘pdf高清版

    11.6 游戏音效 11.7 游戏存档 11.8 小结 第四部分 高级篇 第12章 AndroidOpenGL开发 基础 12.1 OpenGL简介 12.2 多边形 12.3 颜色 12.4 旋转 12.5 3D 空间 12.6 纹理映射 12.7 光照和事件 12.8 混合 12.9 小结 第...

    《Android应用开发揭秘》附带光盘代码.

     11.6 游戏音效  11.7 游戏存档  11.8 小结  第四部分 高级篇  第12章 AndroidOpenGL开发  基础  12.1 OpenGL简介  12.2 多边形  12.3 颜色  12.4 旋转  12.5 3D 空间  12.6 纹理映射  12.7 光照和事件...

    《Android应用开发揭秘》源码

     11.6 游戏音效  11.7 游戏存档  11.8 小结  第四部分 高级篇  第12章 AndroidOpenGL开发基础  12.1 OpenGL简介  12.2 多边形  12.3 颜色  12.4 旋转  12.5 3D 空间  12.6 纹理映射  12.7 光照和事件  ...

Global site tag (gtag.js) - Google Analytics