- 浏览: 430977 次
- 性别:
- 来自: 深圳/湛江
-
文章分类
最新评论
-
wangyudong:
很多API doc生成工具生成doc需要重度依赖代码里加注解的 ...
[ios]利用xcode自动生成项目文档 -
tiger1819:
有源码么,想学习
[android]仿360状态,类流量监控桌面浮动显示 -
119568242:
借我一双翅膀 写道大哥,求指教啊?
IOS 开发,调用打电话,发短信,打开网址 -
借我一双翅膀:
大哥,求指教啊
IOS 开发,调用打电话,发短信,打开网址 -
li247276297:
楼主 是不是要加个权限?
[android]仿360状态,类流量监控桌面浮动显示
Android菜鸟日记
21音效- SoundPool
关于音效:
音效是小于7秒的音频。
这一类时间段但是要求反应迅速的印象就不能使用播放时间较长的音乐播放技术了{比如mediaManager}
SoundPool
介绍:android系统中 用于管理和播放应用程序的声音资源。此类将音频加载到内存,故出于性能考虑:只有音效才使用此方法实现。
1.通过 new SoundPool()获得SoundPool对象
Ex: new SoundPool(int 最大音效数,int 音效类型,int音频文件质量)。
2.通过sp.load()加载音频。会返回此音频的序列号();根据load顺序返回。
此方法返回:int 为加载音效的soundID [作为此音效的标示id].
soundID用于play方法,作为参数告知调用哪个被加载的音效。
建议使用hashMap <Integer,integer>来保存返回的数据。
这样可以把所有的音频文件集中在一起。[不适用也一样的]
3.通过sp.paly()来启动音频
sp.play(int 要启动的id, float 左声道音量, float 右声道音量, int 优先级, int 循环次数, int 回放速度);
int 循环次数:-1为 无限循环 0为不循环
rate 回放速度:0.5~2 1为正常
重点: play() 方法返回streamID 如果要存在需要暂停当前音效的行为的话,需要把此id保存下来[我一般是用hashmap] 不过音效一般不暂停,且每次的paly()返回的值递增,同样的东西被paly()多次,他们的strreamID是不一样的,且streamID不因播放完毕而减少。
既如果播放了199次,当播放200次时 即使前面的199次都结束了,低200次的id依旧是streamID=200; 另:streamID从1开始。
PS:左右声道音量可以通过系统获取
AudioManager am = (AudioManager) this
.getSystemService(this.AUDIO_SERVICE);
float maxv = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
// 获得stream 的最大音量 把系统音量传入 从而获得系统当前最大音量。
float currentv = am.getStreamVolume(AudioManager.STREAM_MUSIC);
// 获得当前音量
4.通过sp. Pause(int straemID)来暂停音频
其实这个不怎么用到,因为音效时间很短 很少需要暂停音效的。
真要用到就把把之前保存所有streamID的hashMap拿出来
然后用迭代器Iterator 迭代出所有的streamID
然后一一暂停
如下
public void funStop() {
Iterator it= spMaping.keySet().iterator();
while (it.hasNext()) {
Integer temp = (Integer)it.next();
Log.v("myTag", ""+temp);
sp.pause(temp);
}
}
代码:
SoundPoolActivityActivity.java
package com.lurencun.test;
import java.util.HashMap;
import java.util.Iterator;
import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class SoundPoolActivityActivity extends Activity {
private Button bt1 = null;
private Button bt2 = null;
private Button bt3 = null;
private Button bt4 = null;
private SoundPool sp = null;
private HashMap<Integer, Integer> spMap = null;
private HashMap<Integer, Integer> spMaping = new HashMap<Integer, Integer>();;
int i = 1;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.initSountPool();
bt1 = (Button) this.findViewById(R.id.bt1);
bt2 = (Button) this.findViewById(R.id.bt2);
bt3 = (Button) this.findViewById(R.id.bt3);
bt4 = (Button) this.findViewById(R.id.bt4);
}
public void funClick(View v) {
// 点击触发
int temp = v.getId();
switch (temp) {
case R.id.bt1:
playSound(1, 3);
break;
case R.id.bt2:
playSound(2, 3);
break;
case R.id.bt3:
funStop();
break;
case R.id.bt4:
sp.pause(spMap.get(2));
break;
}
}
public void initSountPool() {
// 初始化资源
sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
// 设置 soundpool(最大容纳音效数 音频类型 文件质量)
spMap = new HashMap<Integer, Integer>();
spMap.put(1, sp.load(this, R.raw.attack02, 1));
// sp.load加载音乐 (环境 ,音乐资源,优先级)
spMap.put(2, sp.load(this, R.raw.attack14, 1));
// Log.v("myTag", ""+sp.load(this, R.raw.attack14, 1));
}
public void playSound(int sound, int number) {
AudioManager am = (AudioManager) this
.getSystemService(this.AUDIO_SERVICE);
float maxv = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
// 获得stream 的最大音量 把系统音量传入 从而获得系统当前最大音量。
float currentv = am.getStreamVolume(AudioManager.STREAM_MUSIC);
// 获得当前音量
int temp = sp.play(spMap.get(sound), currentv, currentv, 1, number, 1);
//play返回streamID;
Log.v("myTag", "==:" + temp);
// 将打开的流放入spMaping里面
spMaping.put(i, temp);
i++;
}
public void funStop() {
Iterator it= spMaping.keySet().iterator();
while (it.hasNext()) {
Integer temp = (Integer)it.next();
Log.v("myTag", ""+temp);
sp.pause(temp);
}
}
}
2011-10-12
poolo
21音效- SoundPool
关于音效:
音效是小于7秒的音频。
这一类时间段但是要求反应迅速的印象就不能使用播放时间较长的音乐播放技术了{比如mediaManager}
SoundPool
介绍:android系统中 用于管理和播放应用程序的声音资源。此类将音频加载到内存,故出于性能考虑:只有音效才使用此方法实现。
1.通过 new SoundPool()获得SoundPool对象
Ex: new SoundPool(int 最大音效数,int 音效类型,int音频文件质量)。
2.通过sp.load()加载音频。会返回此音频的序列号();根据load顺序返回。
此方法返回:int 为加载音效的soundID [作为此音效的标示id].
soundID用于play方法,作为参数告知调用哪个被加载的音效。
建议使用hashMap <Integer,integer>来保存返回的数据。
这样可以把所有的音频文件集中在一起。[不适用也一样的]
3.通过sp.paly()来启动音频
sp.play(int 要启动的id, float 左声道音量, float 右声道音量, int 优先级, int 循环次数, int 回放速度);
int 循环次数:-1为 无限循环 0为不循环
rate 回放速度:0.5~2 1为正常
重点: play() 方法返回streamID 如果要存在需要暂停当前音效的行为的话,需要把此id保存下来[我一般是用hashmap] 不过音效一般不暂停,且每次的paly()返回的值递增,同样的东西被paly()多次,他们的strreamID是不一样的,且streamID不因播放完毕而减少。
既如果播放了199次,当播放200次时 即使前面的199次都结束了,低200次的id依旧是streamID=200; 另:streamID从1开始。
PS:左右声道音量可以通过系统获取
AudioManager am = (AudioManager) this
.getSystemService(this.AUDIO_SERVICE);
float maxv = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
// 获得stream 的最大音量 把系统音量传入 从而获得系统当前最大音量。
float currentv = am.getStreamVolume(AudioManager.STREAM_MUSIC);
// 获得当前音量
4.通过sp. Pause(int straemID)来暂停音频
其实这个不怎么用到,因为音效时间很短 很少需要暂停音效的。
真要用到就把把之前保存所有streamID的hashMap拿出来
然后用迭代器Iterator 迭代出所有的streamID
然后一一暂停
如下
public void funStop() {
Iterator it= spMaping.keySet().iterator();
while (it.hasNext()) {
Integer temp = (Integer)it.next();
Log.v("myTag", ""+temp);
sp.pause(temp);
}
}
代码:
SoundPoolActivityActivity.java
package com.lurencun.test;
import java.util.HashMap;
import java.util.Iterator;
import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class SoundPoolActivityActivity extends Activity {
private Button bt1 = null;
private Button bt2 = null;
private Button bt3 = null;
private Button bt4 = null;
private SoundPool sp = null;
private HashMap<Integer, Integer> spMap = null;
private HashMap<Integer, Integer> spMaping = new HashMap<Integer, Integer>();;
int i = 1;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.initSountPool();
bt1 = (Button) this.findViewById(R.id.bt1);
bt2 = (Button) this.findViewById(R.id.bt2);
bt3 = (Button) this.findViewById(R.id.bt3);
bt4 = (Button) this.findViewById(R.id.bt4);
}
public void funClick(View v) {
// 点击触发
int temp = v.getId();
switch (temp) {
case R.id.bt1:
playSound(1, 3);
break;
case R.id.bt2:
playSound(2, 3);
break;
case R.id.bt3:
funStop();
break;
case R.id.bt4:
sp.pause(spMap.get(2));
break;
}
}
public void initSountPool() {
// 初始化资源
sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
// 设置 soundpool(最大容纳音效数 音频类型 文件质量)
spMap = new HashMap<Integer, Integer>();
spMap.put(1, sp.load(this, R.raw.attack02, 1));
// sp.load加载音乐 (环境 ,音乐资源,优先级)
spMap.put(2, sp.load(this, R.raw.attack14, 1));
// Log.v("myTag", ""+sp.load(this, R.raw.attack14, 1));
}
public void playSound(int sound, int number) {
AudioManager am = (AudioManager) this
.getSystemService(this.AUDIO_SERVICE);
float maxv = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
// 获得stream 的最大音量 把系统音量传入 从而获得系统当前最大音量。
float currentv = am.getStreamVolume(AudioManager.STREAM_MUSIC);
// 获得当前音量
int temp = sp.play(spMap.get(sound), currentv, currentv, 1, number, 1);
//play返回streamID;
Log.v("myTag", "==:" + temp);
// 将打开的流放入spMaping里面
spMaping.put(i, temp);
i++;
}
public void funStop() {
Iterator it= spMaping.keySet().iterator();
while (it.hasNext()) {
Integer temp = (Integer)it.next();
Log.v("myTag", ""+temp);
sp.pause(temp);
}
}
}
2011-10-12
poolo
发表评论
-
[android]使用 Matrix 的随触摸旋转的ImageView
2013-02-22 01:58 7956使用 Matrix 的随触摸旋转的ImageView 突 ... -
[android]动态改变按钮背景状态 StateListDrawable
2012-10-29 10:52 1492动态改变按钮背景状态 很少用到 上次和六哥聊到。 ... -
[android]ViewPage上无法通过onKeyDown()获得按钮事件
2012-08-20 04:53 1398系统无法监听到遥控器在VewPage上的按钮事件,如需 ... -
[android]待解决 lisTview 的onItemSelected 监听事件焦点的问题。
2012-08-18 21:18 2198今天遇到个问题 到目前为止 一直不理解为什么 大概描述下布局 ... -
[android]layout_weight 在layout_width 为fill_parent 与wrap_content 时的不同含义
2012-08-12 12:52 1280转自:http://hi.baidu.com/l ... -
[android]仿制新浪微博消息页面 图标切换动画
2012-08-10 17:33 4063研究了下以前不怎么用到的动画效果的实现 顺便做了一个新浪微 ... -
[android]仿制新浪微博消息页面 图标切换动画
2012-08-10 17:33 3研究了下以前不怎么用到的动画效果的实现 顺便做了一个新浪微 ... -
[android]仿制新浪微博消息页面 图标切换动画
2012-08-10 17:33 0研究了下以前不怎么用到的动画效果的实现 顺便做了一个新浪微 ... -
[android]Activity切换动画
2012-08-10 12:23 1494今天准备比赛的时候 遇到了这个问题。 查了些资料 ... -
android中ADT版本问题:无故报 java.lang.NoClassDefFoundError
2012-07-31 22:08 1819今天修改一个老项目的时候,发现在所有配置正确的情况下,代目无任 ... -
[android]仿360状态,类流量监控桌面浮动显示
2012-05-27 22:03 6065前两天看到部分音频播放器可以实现在桌面上显示歌词,360那个浮 ... -
[转]android开发问题记录 "founderapp"
2012-02-08 10:48 1088这段时间,由于某种原因,一直在做android手机开发, ... -
关于weight
2012-02-05 21:20 859layout_weight=1后,除了其它的控件之外剩 ... -
判断SD卡是否存在
2012-02-02 17:54 902android.os.Environment.getEx ... -
[转]Android文件管理器介绍
2012-02-02 16:50 3097转自:http://www.linuxidc.com/L ... -
[转]Android文件管理器介绍
2012-02-02 16:49 5转自:http://www.linuxidc.com/L ... -
[转]android 几何图形的绘制
2012-02-01 16:06 2212转自:http://byandby.iteye.c ... -
Android菜鸟日记32-游戏中的碰撞
2012-01-11 23:09 1769Android菜鸟日记 32-游戏中的碰撞 一、 ... -
Android菜鸟日记31-selector 中使用 shape
2012-01-11 23:05 1644Android菜鸟日记 31- ... -
Android菜鸟日记30-View与SurfaceView
2012-01-11 22:45 973Android菜鸟日记 30 View与Surfa ...
相关推荐
安装首先,从您的应用程序目录安装npm软件包: npm install react - native - soundpool -- save 然后使用以下方法自动链接: react - native link react - native - soundpool 编辑android/app/build.gradle以声明...
总之,通过合理运用SoundPool,开发者可以为Android游戏构建出丰富多样的音效体验,提升游戏的整体品质。在实际开发中,根据游戏的具体需求,灵活调整和优化上述步骤,可以进一步提高音效播放的效率和效果。
`SoundPool`是Android提供的一种轻量级的音频管理工具,特别适用于游戏开发或者需要快速响应的场景,因为它可以预先加载音频文件到内存,从而实现即时播放。 `SoundPool`的核心概念: 1. **音频流类型**:Android...
在Android开发中,SoundPool是用于播放短暂...综上所述,SoundPool是Android平台上实现高效音效播放的关键组件,尤其适用于需要快速响应和低延迟的场景。了解和熟练掌握SoundPool的使用,能显著提升应用的用户体验。
本资源“4-15-2(SoundPool音效).7z”可能包含了一系列与SoundPool相关的音频文件和示例代码,用于帮助开发者了解和实践如何在Android应用中使用SoundPool来实现音效的播放。 SoundPool是Android SDK中的一个类,它...
我怀疑当前是否有主流手机出现Android SoundPool崩溃的问题。 原始自述文件: SoundPool似乎遭受了三星Galaxy S2(以及其他双核手机)崩溃的困扰。 在等待正式修复时,一些人建议作为一种解决方法,将OpenSL ES...
这个毕业设计项目专注于使用SoundPool来实现音效功能,帮助学生深入理解和掌握Android音频处理技术。以下是关于SoundPool及其在Android应用中使用的详细知识点: 1. **SoundPool的介绍**:SoundPool是Android系统...
SoundPool是Android平台提供的一个用于播放音效文件的API,它支持加载和播放多个音频文件,适用于游戏或者需要快速播放多个短暂音频的场景。SoundPool使用简单,性能优越,可以实现低延迟的音效播放。SoundPool通过...
在Android开发中,SoundPool是实现短音频播放的重要工具,尤其适用于游戏或应用程序中的音效管理。本Demo源码提供了一个完整的示例,演示如何有效利用SoundPool来播放和控制音效。以下将详细解析SoundPool的核心概念...
在Android应用开发中,SoundPool是一个非常重要的音频管理类,用于播放小而短的声音效果,如游戏中的音效。这个源码压缩包“Android应用源码之(SoundPool音效).zip”提供了一个实例,帮助开发者深入理解如何在实际...
在Android开发中,有时我们需要为应用添加音效以提升用户体验,这时`SoundPool`类就显得尤为重要。`SoundPool`是Android系统提供的一个音频管理工具,它允许开发者快速播放短期的音频剪辑,如游戏中的按钮点击声或...
本示例将深入探讨如何在Android应用中使用`SoundPool`来实现音效的加载与播放,以提高用户体验。 `SoundPool`是Android为处理短暂、重复的音频而设计的。它通过内存映射技术,可以快速地加载和播放音频,特别适合...
通过这个项目"4-15-2(SoundPool音效).zip",开发者可以学习如何在Android应用中集成和控制音效,提升应用的互动性和用户体验。通过实践,你可以更好地理解SoundPool的工作机制,并将其应用到自己的项目中。
在Android开发中,即时音效的实现通常依赖于`android.media.SoundPool`类。`SoundPool`是一个高效的声音播放管理器,特别适用于处理小型、短促的音频剪辑,如游戏中的点击声、按钮音效等。下面我们将深入探讨如何...
本文实例为大家分享了Android使用SoundPool播放音效的具体代码,供大家参考,具体内容如下 SoundPool(int maxStreams, int streamType, int srcQuality) 参数依次是: ①指定支持多少个声音,SoundPool对象中允许...
总的来说,SoundPool是Android开发中处理音效播放的得力助手,通过合理的配置和使用,可以为游戏和应用带来流畅的音频体验。然而,随着Android系统的更新,开发者也应关注新的音频API,适时更新技术栈,以利用最新的...
Android应用源码之(SoundPool音效).zip项目安卓应用源码下载Android应用源码之(SoundPool音效).zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
在Android开发中,为应用程序添加背景音乐和音效是提升用户体验的重要一环。本文将详细介绍如何使用`MediaPlayer`和`SoundPool`这两个核心组件来实现这一功能。 首先,`MediaPlayer`是Android系统提供的一个用于...
SoundPool.Builder类是Android 5.0以后提供的新方式,用于创建SoundPool对象。 六、playSound方法的设计 在playSound方法中,我们需要使用SoundPool对象播放音频文件。SoundPool对象提供了play方法,用于播放音频...
Android提供了MediaPlayer和SoundPool类来处理音频播放。通过源码,你可以学习到如何加载和播放背景音乐,以及如何根据游戏事件触发特定的音效。 最后,性能优化是Android游戏开发不可或缺的部分。了解如何减少渲染...