`
119568242
  • 浏览: 430977 次
  • 性别: Icon_minigender_1
  • 来自: 深圳/湛江
社区版块
存档分类
最新评论

Android菜鸟日记 21音效- SoundPool

 
阅读更多
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
分享到:
评论

相关推荐

    react-native-soundpool:React Native模块可播放短片段

    安装首先,从您的应用程序目录安装npm软件包: npm install react - native - soundpool -- save 然后使用以下方法自动链接: react - native link react - native - soundpool 编辑android/app/build.gradle以声明...

    Android游戏设计之-------游戏音效的播放 SoundPool

    总之,通过合理运用SoundPool,开发者可以为Android游戏构建出丰富多样的音效体验,提升游戏的整体品质。在实际开发中,根据游戏的具体需求,灵活调整和优化上述步骤,可以进一步提高音效播放的效率和效果。

    Android多媒体功能开发-使用SoundPool播放音频的例子

    `SoundPool`是Android提供的一种轻量级的音频管理工具,特别适用于游戏开发或者需要快速响应的场景,因为它可以预先加载音频文件到内存,从而实现即时播放。 `SoundPool`的核心概念: 1. **音频流类型**:Android...

    Android用SoundPool播放音效

    在Android开发中,SoundPool是用于播放短暂...综上所述,SoundPool是Android平台上实现高效音效播放的关键组件,尤其适用于需要快速响应和低延迟的场景。了解和熟练掌握SoundPool的使用,能显著提升应用的用户体验。

    4-15-2(SoundPool音效).7z

    本资源“4-15-2(SoundPool音效).7z”可能包含了一系列与SoundPool相关的音频文件和示例代码,用于帮助开发者了解和实践如何在Android应用中使用SoundPool来实现音效的播放。 SoundPool是Android SDK中的一个类,它...

    opensl-soundpool:POC,用于基于OpenSL ES的Android SoundPool替代品

    我怀疑当前是否有主流手机出现Android SoundPool崩溃的问题。 原始自述文件: SoundPool似乎遭受了三星Galaxy S2(以及其他双核手机)崩溃的困扰。 在等待正式修复时,一些人建议作为一种解决方法,将OpenSL ES...

    Android应用源码之(SoundPool音效)-IT计算机-毕业设计.zip

    这个毕业设计项目专注于使用SoundPool来实现音效功能,帮助学生深入理解和掌握Android音频处理技术。以下是关于SoundPool及其在Android应用中使用的详细知识点: 1. **SoundPool的介绍**:SoundPool是Android系统...

    Android基础软件源码(SoundPool音效).zip

    SoundPool是Android平台提供的一个用于播放音效文件的API,它支持加载和播放多个音频文件,适用于游戏或者需要快速播放多个短暂音频的场景。SoundPool使用简单,性能优越,可以实现低延迟的音效播放。SoundPool通过...

    Android SoundPool音效使用Demo源码.rar

    在Android开发中,SoundPool是实现短音频播放的重要工具,尤其适用于游戏或应用程序中的音效管理。本Demo源码提供了一个完整的示例,演示如何有效利用SoundPool来播放和控制音效。以下将详细解析SoundPool的核心概念...

    Android应用源码之(SoundPool音效).zip

    在Android应用开发中,SoundPool是一个非常重要的音频管理类,用于播放小而短的声音效果,如游戏中的音效。这个源码压缩包“Android应用源码之(SoundPool音效).zip”提供了一个实例,帮助开发者深入理解如何在实际...

    android 使用 SoundPool 播放音效

    在Android开发中,有时我们需要为应用添加音效以提升用户体验,这时`SoundPool`类就显得尤为重要。`SoundPool`是Android系统提供的一个音频管理工具,它允许开发者快速播放短期的音频剪辑,如游戏中的按钮点击声或...

    Android下使用SoundPool的示例

    本示例将深入探讨如何在Android应用中使用`SoundPool`来实现音效的加载与播放,以提高用户体验。 `SoundPool`是Android为处理短暂、重复的音频而设计的。它通过内存映射技术,可以快速地加载和播放音频,特别适合...

    4-15-2(SoundPool音效).zip

    通过这个项目"4-15-2(SoundPool音效).zip",开发者可以学习如何在Android应用中集成和控制音效,提升应用的互动性和用户体验。通过实践,你可以更好地理解SoundPool的工作机制,并将其应用到自己的项目中。

    即时音效, 通过android.media.SoundPool实现

    在Android开发中,即时音效的实现通常依赖于`android.media.SoundPool`类。`SoundPool`是一个高效的声音播放管理器,特别适用于处理小型、短促的音频剪辑,如游戏中的点击声、按钮音效等。下面我们将深入探讨如何...

    Android使用SoundPool播放音效

    本文实例为大家分享了Android使用SoundPool播放音效的具体代码,供大家参考,具体内容如下 SoundPool(int maxStreams, int streamType, int srcQuality) 参数依次是: ①指定支持多少个声音,SoundPool对象中允许...

    SoundPool音效播放

    总的来说,SoundPool是Android开发中处理音效播放的得力助手,通过合理的配置和使用,可以为游戏和应用带来流畅的音频体验。然而,随着Android系统的更新,开发者也应关注新的音频API,适时更新技术栈,以利用最新的...

    Android应用源码之(SoundPool音效).zip项目安卓应用源码下载

    Android应用源码之(SoundPool音效).zip项目安卓应用源码下载Android应用源码之(SoundPool音效).zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考

    android背景音乐音效,使用MediaPlayer、SoundPool实现

    在Android开发中,为应用程序添加背景音乐和音效是提升用户体验的重要一环。本文将详细介绍如何使用`MediaPlayer`和`SoundPool`这两个核心组件来实现这一功能。 首先,`MediaPlayer`是Android系统提供的一个用于...

    Android如何给按钮添加点击音效

    SoundPool.Builder类是Android 5.0以后提供的新方式,用于创建SoundPool对象。 六、playSound方法的设计 在playSound方法中,我们需要使用SoundPool对象播放音频文件。SoundPool对象提供了play方法,用于播放音频...

    Android游戏源码---Amazed

    Android提供了MediaPlayer和SoundPool类来处理音频播放。通过源码,你可以学习到如何加载和播放背景音乐,以及如何根据游戏事件触发特定的音效。 最后,性能优化是Android游戏开发不可或缺的部分。了解如何减少渲染...

Global site tag (gtag.js) - Google Analytics