SoundPool简介

SoundPool常用来同时播放多个短暂的音频

封装

这里封装一个简单的SoundPlayer,模拟管理播放王者荣耀里的单杀、双杀、和三杀的音频,支持播放、循环播放、暂停、继续播放等功能

所需的三个音频文件sound_single_kill、sound_double_kill、sound_triple_kill放置在/res/raw文件夹下

public class SoundPlayer {private Context context;private SoundPool soundPool;// 能同时播放的最大声音数private static final int MAX_SREAMS = 5;// 单杀的声音public static int SOUND_SINGLE_KILL;// 双杀的声音public static int SOUND_DOUBLE_KILL;// 三杀的声音public static int SOUND_TRIPLE_KILL;public SoundPlayer(Context context) {this(context, null);}public SoundPlayer(Context context, SoundPool.OnLoadCompleteListener onLoadCompleteListener) {this.context = context;soundPool = new SoundPool(MAX_SREAMS, AudioManager.STREAM_MUSIC,0);SOUND_SINGLE_KILL = soundPool.load(context, R.raw.sound_single_kill, 1);SOUND_DOUBLE_KILL = soundPool.load(context, R.raw.sound_double_kill, 1);SOUND_TRIPLE_KILL = soundPool.load(context, R.raw.sound_triple_kill, 1);soundPool.setOnLoadCompleteListener(onLoadCompleteListener);}// resId为放在raw文件夹下的音频文件public void load(int resId) {soundPool.load(context, resId, 1);}// 参数为SoundPool.load()方法返回的soundIDpublic void unload(int soundID) {soundPool.unload(soundID);}// 播放单杀的声音public void playSingleKill() {play(SOUND_SINGLE_KILL);}// 播放双杀的声音public void playDoubleKill() {play(SOUND_DOUBLE_KILL);}// 播放三杀的声音public void playTripleKill() {play(SOUND_TRIPLE_KILL);}// 播放,soundID参数为SoundPool.load()方法返回的值public int play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate) {return soundPool.play(soundID, leftVolume, rightVolume, priority, loop, rate);}// 默认参数的播放public int play(int soundID) {return play(soundID, 1, 1, 0, 0, 1);}// 循环播放public int loopPlay(int soundID) {return play(soundID, 1, 1, 0, -1, 1);}// 停止播放public void stop(int streamId) {soundPool.stop(streamId);}// 暂停播放public void pausea(int streamId) {soundPool.pause(streamId);}// 继续播放public void resume(int streamId) {soundPool.resume(streamId);}// 暂停所有播放public void pauseAll() {soundPool.autoPause();}// 继续所有播放public void resumeAll() {soundPool.autoResume();}// 释放public void release() {if (soundPool != null) {soundPool.release();soundPool = null;}}
}

使用方法

public void test(Context context) {// 实例化SoundPlayerSoundPlayer player = new SoundPlayer(context);// 播放单杀音频player.playSingleKill();// 暂停播放单杀音频player.pausea(SoundPlayer.SOUND_SINGLE_KILL);// 继续播放单杀音频player.resume(SoundPlayer.SOUND_SINGLE_KILL);// 停止播放单杀音频player.stop(SoundPlayer.SOUND_SINGLE_KILL);// 播放双杀音频player.playDoubleKill();// 播放三杀音频player.playTripleKill();// 暂停播放所有音频player.pauseAll();// 继续播放所有音频player.resumeAll();// 释放player.release();
}

Android SoundPool封装相关推荐

  1. Android SoundPool播放音效详细步骤

    MediaPlayer虽然也能播放音频,但是它有资源占用量较高,延迟时间较长,不支持多个音频同时播放等缺点,这些缺点决定MediaPlayer在某些场合的使用情况不会很理想,例如在对时间精准度要求相对 ...

  2. Android 中封装优雅的 MediaPlayer 音频播放器,支持多个播放器

    Android 中封装优雅的 MediaPlayer 音频播放器,支持多个播放器实例的示例: public class AudioPlayer implements MediaPlayer.OnPre ...

  3. android wsdl封装,在Android中调用C#写的WebService(附源代码)

    由于项目中要使用Android调用C#写的WebService,于是便有了这篇文章.在学习的过程中,发现在C#中直接调用WebService方便得多,直接添加一个引用,便可以直接使用将WebServi ...

  4. Android MVVM封装,MVVMFramework

    软件简介 这是一个搭建MVVM模式极速开发库,DataBinding 和 Retrofit 配合使用搭建的快速框架. 环境 AndroidStudio 2.1 MVVM模式 MVVM模式:View,V ...

  5. android动画封装,Android属性动画封装,快速构建动画

    Android实现动画效果的方式主要有帧动画.补间动画.属性动画.关于安桌动画的基础知识可以查看这篇文章Android属性动画完全解析 这里我要讲的是如何快速构建出一个动画效果,如下图: 如果我们用属 ...

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

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

  7. Xamarin.Android之封装个简单的网络请求类

    http://doc.okbase.net/catcher1994/archive/220195.html Catcher8 2016/4/23 0:28:50 阅读(72) 评论(0) 一.前言 回 ...

  8. Android SoundPool 的简单使用

    2019独角兽企业重金招聘Python工程师标准>>> 之前只知道Android中可以用MediapLayer播放音乐,原来今天才发现可以用SoundPool,用SoundPool可 ...

  9. Android之封装支付宝支付

    在做Android支付的时候肯定会用到支付宝支付, 根据官方给出的demo做起来非常费劲,所以我们需要一次简单的封装. 封装的代码也很简单,就是将官网给的demo提取出一个类来方便使用. /*** 支 ...

  10. android websocket封装,Android WebSocket 方案选型OkHttp

    目前Android WebSocket 框架 主要包括: SocketIO Java-WebSocket OkHttp WebSocket 一开始我首选的是采用SocketIO方案,因为考虑该方案封装 ...

最新文章

  1. [转]在Eclipse中使用JUnit4进行单元测试(中级篇)
  2. Windows平台kafka环境的搭建
  3. session 详解
  4. LeetCode: Merge k Sorted Lists
  5. jquery的开发版、mini版是的意思和使用场合
  6. PAT乙级 1093 字符串A+B(两种解法)
  7. git---Git中.gitignore配置
  8. 微信小程序购物车功能实现(干货满满)
  9. win10如何查看服务器日志文件,win10日志文件在哪里?小编教你查看win10日志文件的方法...
  10. 计算机应用二进制原因,计算机中采用二进制的主要原因是什么
  11. Real-Time Rendering——5.2.2 Punctual Lights精准光
  12. Linux CentOS 系统实战笔记-基础篇
  13. 明日之后android和ios,明日之后安卓ios互通区有哪些?ios安卓混服区详细介绍
  14. 有符号和无符号相加(vivo)
  15. Vue中使用Tinymce-edtio
  16. 在vant组件下阻止手机自带键盘弹起
  17. ubuntu忘记mysql密码,怎么办
  18. Android入门文档
  19. 小米运动数据导出并做个性化统计
  20. 放个N老的程序,留着以后看

热门文章

  1. 虚拟试衣 原理与应用
  2. Windows10系统JDK下载和安装
  3. 【知识兔】Excel教程小案例之字帖制作
  4. c# 服务器打印word文档,C#中5步完成word文档打印的方法
  5. Hvdc-vsc. 基于vsc的柔性直流输电模型 pscad实现
  6. selenium官网下载地址以及相关介绍
  7. msfconsole 控制台简介
  8. 华硕 小布 类似机器人_盘点足球赛事背后的高科技 华硕机器人小布化身观赛助理...
  9. 微信小程序如何上传图片
  10. 不限网站的视频字幕实时翻译工具(视频只要有声音就可以翻译)