Android soundpool初探
内容:本编播客主要讲解一下“即时音效”;
特点:快,短。
在播放这类时间短但是要求反应迅速的的音效,就不能够用不能够使用播放时间较长的音乐播放技术了,而应该采取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初探的更多相关文章
- 《Android 性能测试初探》
移动测试站点推荐: https://testerhome.com/ 专项相关帖子推荐: <Android 性能测试初探>合集 移动无线应用专项测试浅谈 公开课: [腾讯课堂]Testerh ...
- Android Activity初探
原地址:Android Activity初探 Activity是一个应用中的组件,它为用户提供一个可视的界面,方便用户操作,比如说拔打电话.照相.发邮件或者是浏览地图等.每个activity会提供一个 ...
- 十九、Android Activity初探
原文:十九.Android Activity初探 Activity是一个应用中的组件,它为用户提供一个可视的界面,方便用户操作,比如说拔打电话.照相.发邮件或者是浏览地图等.每个activity会提供 ...
- Android 性能测试初探(六)
书接前文 Android 性能测试初探之功耗(五) 本节聊聊性能测试的最后一项- 流量,当然我所指的性能测试是针对大部分应用而言的,可能还有部分应用会关注网速.弱网之类的测试,但本系列文章都不去一一探 ...
- Android 性能测试初探(五)
书接上文 Android 性能测试初探之 GPU(四) 前文说了的一些性能测试项大家可能都听说,接下来我们聊聊大家不常关注的测试项- 功耗 . 功耗测试主要从以下几个方面入手进行测试 测试手机安装目标 ...
- Android 性能测试初探(四)
书接上文 Android 性能测试初探(三) 自从 cpu及内存后,GPU 这个词对于 PC 性能测试者也不陌生了,什么 3Dmax,安兔兔之类的第三方软件让 GPU 在移动端性能测试领域都知晓,但对 ...
- Android 性能测试初探(三)
书接上文 Android 性能测试初探(二) 本文接着往下聊,今天主聊 CPU 及 内存 看到这两个名词,做过PC性能测试的就比较熟悉了,同样的性能测试关注点 :) 首先说说内存,移动端关注的是内存消 ...
- Android 性能测试初探(二)
书接前文 Android 性能测试初探(一).上回大体介绍了下在 android 端的性能测试项,现在我们就细节测试项做一些阐述(包括如何自己 DIY 测试). 首先我们来说说启动时间.关于应用的启动 ...
- Android SoundPool.play方法的音量与系统音量的关系
Android中播放音频,除了使用MediaPlayer,还可以使用SoundPool.SoundPool使用音效池的概念来管理多个短促的音效,对于需要短促的提示音的场景特别合适. 通常调用Sound ...
随机推荐
- position sticky的兼容
position的sticky这个属性一般用于导航条,因为他在屏幕范围(viewport)时该元素的位置并不受到定位影响(设置是top.left等属性无效),当该元素的位置将要移出偏移范围时,定位又会 ...
- 微信公众号获取acess_token并存储(php)
<?php define("appid", "你的appid"); define("appsecret", "你的appse ...
- linux下将本地文件上传到github中?
今天编写一份Python基础代码,经过Linux上传到github上,遇到点问题,已经解决 1.首先sudo su 进入root 用户 2.ls 检查出当前文件下有什么文件 3. cd 进入你将要上传 ...
- windows与虚拟机的linux共享一个文件夹
1.安装VMware Tools,在VMware面板上选择“虚拟机-重新安装VMware tools…” 2.使用命令 Ctrl+Alt+T 打开终端: 3.切换用户到root,命令 su 回车,输入 ...
- 大数据【三】YARN集群部署
一 概述 YARN是一个资源管理.任务调度的框架,采用master/slave架构,主要包含三大模块:ResourceManager(RM).NodeManager(NM).ApplicationMa ...
- 网站与phpwind用户同步的方法
搭建了一个个人网站,希望使用phpwind来完成论坛功能.但很快就发现存在用户同步的问题,我的网站已经有了用户管理功能, phpwind论坛也有.因此用户同步注册,登陆和注销是必须要实现的. 网上说可 ...
- pytest+allure+jenkins +python2.7
pip install lxml==3.8.0 pip install pytest-allure-adaptor
- 文档撰写思路与排版(hadoop)
这几天在写项目提交的几个报告,写完回想了一下,在写作框架确定与排版上浪费了不少时间,特此总结一下思路. 这个写完回家过年了....emmmm 1. 定好大标题框架,使用自动添加序号,先不着急修改样式 ...
- 脚本设置IP bat 命令行设置自动获取IP和固定IP
由于办公室网络需要固定IP和DNS才能上网, 在连接公共网络或者家里又需要自动获取IP和DNS才能上网. 频繁手动切换很麻烦,就搞了两个脚本一键设置. 1.新建文本文件, 命名为固定IP.bat 复制 ...
- heckboxlist详细用法、checkboxlist用法、checkboxlist
heckboxlist详细用法.checkboxlist用法.checkboxlist for (int i = 0; i < CheckBoxList1.Items.Count; i++) { ...