内容:本编播客主要讲解一下“即时音效”;

特点:快,短。

在播放这类时间短但是要求反应迅速的的音效,就不能够用不能够使用播放时间较长的音乐播放技术了,而应该采取soundpool技术来播放。

soundpool简介:

该类用于管理和播放应用程序的声音资源,并且将声音文件加载到内存中,出于性能的考虑,一般只将小于7秒左右的声音文件用于该技术进行播放。

下面给出一个播放短促音的例子:(soundpool类的主要注释都放到了该类的代码中)

一、MainActivity.java

package wyf.zcl;

import java.util.HashMap;

import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast; /**
* 游戏中的音效处理
* @author yw-tony
*
*/
public class MyActivity extends Activity implements OnClickListener{
SoundPool sp; //得到一个声音池引用
HashMap<Integer,Integer> spMap; //得到一个map的引用
Button btn_start1,btn_start2,btn_pause1,btn_pause2; //声音播放控制按钮
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initSoundPool();//初始化声音池
initViews();
}
private void initViews(){
btn_start1 = (Button)findViewById(R.id.main_start1);
btn_start2 = (Button)findViewById(R.id.main_start2);
btn_pause1 = (Button)findViewById(R.id.main_pause1);
btn_pause2 = (Button)findViewById(R.id.main_pause2);
btn_start1.setOnClickListener(this);
btn_start2.setOnClickListener(this);
btn_pause1.setOnClickListener(this);
btn_pause2.setOnClickListener(this);
}
/**
* 初始化音乐池
*/
public void initSoundPool(){//初始化声音池
sp=new SoundPool(
, //maxStreams参数,该参数为设置同时能够播放多少音效
AudioManager.STREAM_MUSIC, //streamType参数,该参数设置音频类型,在游戏中通常设置为:STREAM_MUSIC
//srcQuality参数,该参数设置音频文件的质量,目前还没有效果,设置为0为默认值。
);
spMap=new HashMap<Integer,Integer>();
spMap.put(, sp.load(this, R.raw.attack02, ));
spMap.put(, sp.load(this, R.raw.attack14, ));
}
/**
* 播放短促音
* @param sound 控制播放第一个音乐还是第二个音乐
* @param number 控制音乐播放的循环次数
*/
public void playSound(int sound,int number){ //播放声音,参数sound是播放音效的id,参数number是播放音效的次数
AudioManager am=(AudioManager)this.getSystemService(this.AUDIO_SERVICE);//实例化AudioManager对象
float audioMaxVolumn=am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); //返回当前AudioManager对象的最大音量值
float audioCurrentVolumn=am.getStreamVolume(AudioManager.STREAM_MUSIC);//返回当前AudioManager对象的音量值
float volumnRatio=audioCurrentVolumn/audioMaxVolumn;
sp.play(
spMap.get(sound), //播放的音乐id
volumnRatio, //左声道音量
volumnRatio, //右声道音量
, //优先级,0为最低
number, //循环次数,0无不循环,-1无永远循环
//回放速度 ,该值在0.5-2.0之间,1为正常速度
);
}
/**
* 按钮的点击事件
*/
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.main_start1:
playSound(,); //播放第一首音效,循环一遍
Toast.makeText(MyActivity.this, "播放音效1", Toast.LENGTH_SHORT).show();
break;
case R.id.main_start2:
playSound(,); //播放第二首音效,循环一遍
Toast.makeText(MyActivity.this, "播放音效2", Toast.LENGTH_SHORT).show();
break;
case R.id.main_pause1:
sp.pause(spMap.get());
Toast.makeText(MyActivity.this, "暂停音效1", Toast.LENGTH_SHORT).show();
break;
case R.id.main_pause2:
sp.pause(spMap.get());//传入播放音乐的id编号
Toast.makeText(MyActivity.this, "暂停音效2", Toast.LENGTH_SHORT).show();
break;
} }
}

该类对应的配置文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:text="播放音效1"
android:id="@+id/main_start1"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
<Button
android:text="播放音效2"
android:id="@+id/main_start2"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
<Button
android:text="暂停音效1"
android:id="@+id/main_pause1"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
<Button
android:text="暂停音效2"
android:id="@+id/main_pause2"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
</LinearLayout>

Android soundpool初探的更多相关文章

  1. 《Android 性能测试初探》

    移动测试站点推荐: https://testerhome.com/ 专项相关帖子推荐: <Android 性能测试初探>合集 移动无线应用专项测试浅谈 公开课: [腾讯课堂]Testerh ...

  2. Android Activity初探

    原地址:Android Activity初探 Activity是一个应用中的组件,它为用户提供一个可视的界面,方便用户操作,比如说拔打电话.照相.发邮件或者是浏览地图等.每个activity会提供一个 ...

  3. 十九、Android Activity初探

    原文:十九.Android Activity初探 Activity是一个应用中的组件,它为用户提供一个可视的界面,方便用户操作,比如说拔打电话.照相.发邮件或者是浏览地图等.每个activity会提供 ...

  4. Android 性能测试初探(六)

    书接前文 Android 性能测试初探之功耗(五) 本节聊聊性能测试的最后一项- 流量,当然我所指的性能测试是针对大部分应用而言的,可能还有部分应用会关注网速.弱网之类的测试,但本系列文章都不去一一探 ...

  5. Android 性能测试初探(五)

    书接上文 Android 性能测试初探之 GPU(四) 前文说了的一些性能测试项大家可能都听说,接下来我们聊聊大家不常关注的测试项- 功耗 . 功耗测试主要从以下几个方面入手进行测试 测试手机安装目标 ...

  6. Android 性能测试初探(四)

    书接上文 Android 性能测试初探(三) 自从 cpu及内存后,GPU 这个词对于 PC 性能测试者也不陌生了,什么 3Dmax,安兔兔之类的第三方软件让 GPU 在移动端性能测试领域都知晓,但对 ...

  7. Android 性能测试初探(三)

    书接上文 Android 性能测试初探(二) 本文接着往下聊,今天主聊 CPU 及 内存 看到这两个名词,做过PC性能测试的就比较熟悉了,同样的性能测试关注点 :) 首先说说内存,移动端关注的是内存消 ...

  8. Android 性能测试初探(二)

    书接前文 Android 性能测试初探(一).上回大体介绍了下在 android 端的性能测试项,现在我们就细节测试项做一些阐述(包括如何自己 DIY 测试). 首先我们来说说启动时间.关于应用的启动 ...

  9. Android SoundPool.play方法的音量与系统音量的关系

    Android中播放音频,除了使用MediaPlayer,还可以使用SoundPool.SoundPool使用音效池的概念来管理多个短促的音效,对于需要短促的提示音的场景特别合适. 通常调用Sound ...

随机推荐

  1. 天梯赛2016-L2

    L2-001. 紧急救援 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在 ...

  2. C++ 的那些坑 (Day 2)

    虚函数调用的例外 我们知道在通过基类的指针或者引用调用某个对象的函数时,如果这个对象是一个派生类而且该方法是一个虚方法那么一般情况下就会调用派生类的虚方法实现.这个过程是C++的多态.然而这之中有些例 ...

  3. 常见Java问题

    1.泛型的好处 保护了类型安全 避免了强制类型转化 2.final关键字的作用 final修饰的属性是常量 final修饰的方法不可被重写 final修饰的类不能被继承,如:String 3.静态变量 ...

  4. vue 数据请求

    作者QQ:1095737364    QQ群:123300273     欢迎加入!   要引入模块: vue-resource 1.在package.json中的dependencies中添加vue ...

  5. html area标签详解

    <area> 标签定义图像映射中的区域(注:图像映射指得是带有可点击区域的图像). area 元素总是嵌套在 <map> 标签中. 注:<img> 标签中的 use ...

  6. OSGI企业应用开发(十二)OSGI Web应用开发(一)

    前面文章中介绍了如何在OSGI应用中整合Spring和Mybatis框架,本篇文章开始介绍如何使用OSGI技术开发Web应用.对于传统的Java EE应用,应用中涉及到的Web元素无非就是Servle ...

  7. npm 安装指定模块版本

    npm list  查看具体模块 如: npm list @antv/g6 如需要安装指定的模块和版本 保存时      - --save-dev 是你开发时候依赖的东西,--save 是你发布之后还 ...

  8. Android - Android Studio 解决访问被墙的问题

    socks代理配置 项目代理:根目录下的gradle.properties文件 org.gradle.jvmargs=-DsocksProxyHost= 2.全局代理:用户根目录下的.gradle\g ...

  9. ionic开发之Android可以很快打开主页,iOS要几分钟打开主页

    原来是gap://ready导致的csp问题,日志会有这样的提示 解决的办法就是在你的index.html添加gap:的csp配置 <meta http-equiv="Content- ...

  10. Python Django框架笔记(六):模板

    (一){%%}和{{ }} {% for post in posts %} <a href=""><h2>{{ post.title }}</h2&g ...