在实际项目中我们总会遇到要播放音频文件,其实一个MediaPlayer足够大家使用了,但是如果我们在点击按钮的时候要播放声音呢,这个在游戏中使用的非常普遍?当然其实也可以用MediaPlayer来做,但是对性能是极大的浪费,杀鸡焉用牛刀。这篇文章就带大家来学习下android中的另一款音频播放控件SoundPool,下面开始学习了!

1.先来看下API,了解下大概的调用方法和流程。

https://developer.android.google.cn/reference/android/media/SoundPool.html 附上链接地址,有不懂得大家可以自行翻译或者百度。

The SoundPool class manages and plays audio resources for applications.

这句就讲清楚了SoundPool的作用了:管理应用的音频资源。那么看下是怎么管理的。

在几个方法中我们关注其中的四个重载load()方法和一个play()方法。

load中加载声音资源的位置可以是File,path,Assets或者应用的资源中加载,play()方法中各个参数的说明如下,

英文意思还是比较简单的,实在不懂的可以百度查看,原谅我懒,没必要去给大家翻译下,原汁原味的意思更显高逼格。

2.开始撸代码。

大概看懂了API之后我们就来手撸代码了,请打开AS,新建项目………………

public class MainActivity extends AppCompatActivity implements View.OnClickListener{private Button btn01 , btn02 , btn03 , btn04 ;

    private SoundPool soundPool ;

    List<Integer> soundIdList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();

        AudioAttributes audioAttributes = new AudioAttributes.Builder()// 设置场景
                .setUsage(AudioAttributes.USAGE_NOTIFICATION )// 设置类型
                .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC).build();

        soundPool = new SoundPool.Builder()// 设置上面的属性
                .setAudioAttributes(audioAttributes)// 设置最多10个音频流文件
                .setMaxStreams(10).build();

        // 加载音频流到soundPool中去,并且用List存储起来
        soundIdList.add(soundPool.load(this , R.raw.keypress_delete , 1));
        soundIdList.add(soundPool.load(this , R.raw.keypress_invalid , 1));
        soundIdList.add(soundPool.load(this , R.raw.keypress_return , 1));
        soundIdList.add(soundPool.load(this , R.raw.keypress_spacebar , 1));
        soundIdList.add(soundPool.load(this , R.raw.keypress_standard , 1));

    }// 初始化界面控件,并设置点击事件监听
    private void initView(){btn01 = (Button) this.findViewById(R.id.button1);
        btn02 = (Button) this.findViewById(R.id.button2);
        btn03 = (Button) this.findViewById(R.id.button3);
        btn04 = (Button) this.findViewById(R.id.button4);

        btn01.setOnClickListener(this);
        btn02.setOnClickListener(this);
        btn03.setOnClickListener(this);
        btn04.setOnClickListener(this);
    }@Override
    public void onClick(View v) {
   // 随机播放声音 , 根据按钮的值,来随机播放声音
    soundPool.play( soundIdList.get(v.getId() % 5) , 1 ,1 , 0 , 0 , 1);
    }}

代码啥的还是比较少的,注释也比较完整。

演示的界面也比较简单,根据点击不同的按钮播放不同的声音。声音资源文件放到了raw文件夹下

大家可以自行去网络上搜寻一些,.ogg格式的音频资源,然后制作有个性的按钮点击声音。好了,小知识点的记录就到这里了。

android声音播放之SoundPool的应用,让你的按钮从此有声有色相关推荐

  1. Android 音频播放之SoundPool的使用和封装(自定义声音资源)

    例如,现在在一个五子棋游戏中,我们需要在棋子落盘的时候播放一段声音.我们可以利用SoundPool,因为它时间很短,而且需要反复播放,并且我们不希望声音占用太大资源. 一般大家使用的是MediaPla ...

  2. Android 音频播放之SoundPool的使用和封装

    一般大家使用的是MediaPlayer来播放音频,它的创建和销毁都是非常消耗资源的,如果我们的需求是播放一些短促而且频繁播放的音频的话MediaPlayer就有些不合适了,我们来讲讲SoundPool ...

  3. android声音播放函数双声道合并,Android音频编辑之音频合成功能

    前言 音频编辑系列: 本篇主要讲解音频PCM数据的合成,这里合成包括音频之间的拼接,混合. - 音频拼接:一段音频连接着另一段音频,两段音频不会同时播放,有先后顺序. - 音频混合:一段音频和另一段音 ...

  4. android声音播放函数双声道合并,Android音视频系列(七):PCM音频单声道与双声道的相互转换...

    前言 上一篇我们已经学习了PCM音频的保存格式,这一篇我们通过掌握的知识,完成PCM音频的单声道和双声道的互相转换. 正文 首先我们把上一篇的最核心部分贴出来: PCM音频保存格式 我们首先完成单声道 ...

  5. Android开发音效增强中铃声播放Ringtone及声音池调度SoundPool的讲解及实战(超详细 附源码)

    需要源码请点赞关注收藏后评论区留下QQ~~~ 一.铃声播放 虽然媒体播放器MediaPlayer既可用来播放视频,也可以用来播放音频,但是在具体的使用场合,MediaPlayer存在某些播音方面的不足 ...

  6. android 声音池,Android使用SoundPool实现播放音效

    如果在程序应用中(比如:游戏的音效等)需要播放密集.短促的音效,这时就使用SoundPool来播放音效,SoundPool使用音效池的概念来管理多个短促的音效,例如它可以开始就10个音效,以后在程序中 ...

  7. Android 自定义播放器旋转角度及手势调整声音亮度

    最近项目中用到了自定义播放器,大概要求是这样的:控制台会自动消失点击屏幕又会自动弹出,视频角度需要旋转,手势控制亮度跟音量. 一般在Android中,播放视频如果要求不高的话我都是用的videoVie ...

  8. Android中播放音乐的几种方式

    Android中播放音乐的几种方式 前言 前几天一直在研究RxJava2,也写了记录了几篇博客,但因为工作任务原因,需要研究音频相关的知识,暂时放下Rxjava,本文的demo中,MediaPalye ...

  9. 【Android】播放音频的几种方式介绍

    转自:u013366008的博客  https://blog.csdn.net/u013366008/article/details/76577372 Android中播放音乐的几种方式 前言 前几天 ...

最新文章

  1. Linux命令(2):free
  2. VC中GetLastError()获取错误信息的使用,以及错误代码的含义
  3. nginx for discuz 伪静态规则
  4. div 文字 input 垂直居中
  5. Vue中组件间通信的方式
  6. android studio 中使用lambda表达式
  7. 我花了一年时间研究不确定性估算,写下了这份最全指南
  8. js 自带的 map() 方法
  9. Eclipse 编码常用技巧【不断补充完善】
  10. c语言注释部分两侧的分界符号分别是,C语言习题及解答.doc
  11. Android渐变色画笔 自定义View渐变色
  12. Allatori:代码混淆器的使用(EclipseIDEA)
  13. java生成pdf旋转_Java 添加、删除、旋转PDF页面
  14. 应用分发是什么意思?APP内测分发步骤
  15. HDU多校第三场6608 Fansblog(米勒罗宾+威尔逊定理)
  16. 来一起造轮子:手写 Vue3 reactivity 模块
  17. oracle 按照lead,Oracle之Lead和Lag偏移量函数使用详解
  18. python爬取股票图_python 股票数据爬取(两种方法)
  19. 苏宁易购 App 客户端架构演进
  20. Quartus安装及使用教程(13版附安装包)

热门文章

  1. php生成准考证,用这种方法5分钟就可以批量生成上百份带照片的准考证
  2. Word模板引擎poi-tl
  3. 基于bluez的树莓派低功耗蓝牙开发:与多个低功耗蓝牙模块连接
  4. 为什么Chrome比其他浏览器快
  5. 新手入门贴:史上最全Web端即时通讯技术原理详解
  6. 互联网企业盈利模式全分析二
  7. torch.normal(mean, std, size, *, out=None)
  8. sip软电话yate client的编译过程
  9. c语言循环写回合制小游戏_【资源】60个C语言项目源码免费领取!
  10. 误泄公司代码、疫情被裁,一个程序员的生存日记